簡體   English   中英

Data.Vector.Binary可防止列表編碼。 這是GHC的錯誤嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM