在我的应用程序中,我需要序列化包含任意数据类型的向量,在这种情况下是双精度列表。为了序列化矢量,我正在导入Data.Vector.Binary。Data.Vector.Binary重叠二进制[a]实例
当加载在GHCI模块下面的错误出现:
Overlapping instances for Binary [Double]
arising from a use of `decode' at Statistics.hs:57:33-42
Matching instances:
instance (Data.Vector.Generic.Base.Vector v a, Binary a) =>
Binary (v a)
-- Defined in Data.Vector.Binary
instance (Binary a) => Binary [a] -- Defined in Data.Binary
是列表载体的实例? 我查看了文档,但找不到这样的实例。
我能做些什么来序列化这个结构?
编辑:
我用下面的包版本:
- 矢量0.6.0.2
- 载体二进制实例-0.1.2
- 二进制0.5.0.2
此处还有一个代码片段,显示了这个问题,这次是一个字符列表:
import Data.Binary
import Data.Vector.Binary
import qualified Data.ByteString.Lazy as L
main = L.writeFile "/tmp/aaa" $ encode "hello"
请问您可以发布您使用的Binary和Vector版本? – 2010-07-25 13:16:12
我同意GHCi似乎假定列表是向量。我查看了vector-binary-instances的源代码,但没有找到它。 – 2010-07-25 17:36:39
这并不明显。 Edward Kmett不久前在http://stackoverflow.com/questions/3213490/how-do-i-write-if-typeclass-a-then-a-is-also-an-instance-of-b中解释了这个问题-by-this-definiti – 2010-07-25 17:44:16