[英]Data.Vector.Binary prevents encoding of lists. Is this a GHC bug?
在GHCI中,如果您運行:
import Data.Binary
encode [1]
一切順利。 但是,如果你然后運行:
import Data.Vector.Binary
encode [1]
你收到一條錯誤信息:
使用`encode'產生的二進制[t0]重疊實例
匹配實例:
instance (Data.Vector.Generic.Base.Vector va, Binary a) => Binary (va) -- Defined in `Data.Vector.Binary' instance Binary a => Binary [a] -- Defined in `Data.Binary'
在表達式中:encode [1]
在'it'的等式中:it = encode [1]
似乎GHC認為我的列表是矢量類型而不是列表。 這是為什么?
如果頭部匹配,則類型類匹配不會回溯。 實例頭
Binary (v a)
說“對於任何類型v: * -> *
並輸入a:*
匹配Binary (va)
。” 因此[] a
匹配。 Data.Vector
的實例可能比它應該更通用。 OverlappingInstances擴展允許您通過選擇“最具體的實例”來解決這種情況,在這種情況下顯然是[a]
。
IMO,Haskell應該提供一種機制來控制實例的范圍,以幫助防止這樣的問題,但事實並非如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.