如何使用参数化实例decleration(Data.Binary)?

Sco*_*ott 1 serialization haskell types instance

来自Data.Binary:

instance (Binary e) => Binary (IntMap.IntMap e) where
    put = put . IntMap.toAscList
    get = liftM IntMap.fromDistinctAscList get
Run Code Online (Sandbox Code Playgroud)

我认为这意味着任何IntMap (Binary e)类型都是可序列化的,但它不会:

Data.Binary Data.IntMap> encode $ ((fromList [])::IntMap Int)

<interactive>:12:1:
    No instance for (Binary (IntMap Int))
      arising from a use of `encode'
Run Code Online (Sandbox Code Playgroud)

我如何使用提供的实例?

Dan*_*her 6

我认为这意味着任何IntMap (Binary e)类型都是可序列化的,但它不会:

它确实(除了它应该读取的nitpick,IntMap e如果有的话,任何都是可序列化的instance Binary e).

Prelude Data.IntMap Data.Binary> encode (fromList [] :: IntMap Int)
"\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL"
Run Code Online (Sandbox Code Playgroud)

您几乎可以肯定的错误消息意味着IntMap您使用的错误消息不是IntMap来自containersbinary构建的包,而是来自其他版本.IntMap来自不同版本的s containers是不同的类型,而Binary实例仅用于binary构建的确切版本.

您可能安装了containers自安装以来的较新版本binary.

使用containers版本binary构建,通过-package在命令行上为ghci 指定标志,以及Cabal用于编译.