2

Data.Binaryから:

instance (Binary e) => Binary (IntMap.IntMap e) where
    put = put . IntMap.toAscList
    get = liftM IntMap.fromDistinctAscList get

これは、どのタイプもシリアル化できることを意味すると思いまし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'

提供されたインスタンスをどのように使用できますか?

4

1 に答える 1

7

これは、どのタイプもシリアル化できることを意味すると思いましIntMap (Binary e)たが、そうではありません。

IntMap eそれはします(ある場合はシリアル化可能であることを読み取る必要があるという問題は別としてinstance Binary e)。

Prelude Data.IntMap Data.Binary> encode (fromList [] :: IntMap Int)
"\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL"

IntMapあなたが受け取ったエラーメッセージは、あなたが使用しているものがあなたが構築されたパッケージIntMapからではなく、別のバージョンからのものであることをほぼ確実に意味します。の異なるバージョンのは異なるタイプであり、インスタンスは、で構築された正確なバージョン専用です。containersbinaryIntMapcontainersBinarybinary

をインストールしてから、おそらく新しいバージョンをインストールしcontainersていますbinary

ghciのコマンドラインでフラグを指定し、コンパイルに使用することにより、ビルドされたcontainersバージョンを使用します。binary-packageCabal

于 2013-03-24T22:06:06.477 に答える