Haskell 使用Cabal安装模块后未解析Typeclass实例

Haskell 使用Cabal安装模块后未解析Typeclass实例,haskell,ghc,typeclass,cabal,Haskell,Ghc,Typeclass,Cabal,我创建了一个简单的项目来演示这个问题: 如果我使用“cabal install”编译并安装模块,则无法使用二进制文件序列化测试数据: > ghci GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package i

我创建了一个简单的项目来演示这个问题:

如果我使用“cabal install”编译并安装模块,则无法使用二进制文件序列化测试数据:

> ghci                                               
GHCi, version 7.0.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
ghci> :m +TestBinary.Test Data.Binary
ghci> randomData  . decode $ encode emptyTest 

<interactive>:1:24:
    No instance for (Binary TTestData)
      arising from a use of `encode'
    Possible fix: add an instance declaration for (Binary TTestData)
    In the second argument of `($)', namely `encode emptyTest'
    In the expression: randomData . decode $ encode emptyTest
    In an equation for `it':
        it = randomData . decode $ encode emptyTest
Haskell编译器的版本:

> ghci --version 
The Glorious Glasgow Haskell Compilation System, version 7.0.4

在你的.阴谋集团档案中,你有

Build-depends: base < 5, ghc-binary >= 0.5, bytestring >= 0.9.1
构建取决于:base<5,ghc binary>=0.5,bytestring>=0.9.1
通常,
ghc二进制文件
不公开,除非ghc本身使用,否则不打算使用它。当您将
Data.Binary
加载到ghci中时,它会从包中加载模块,并且该包中的
Binary
类与
ghc Binary
中的类不同,因此
TTestData
没有实例

如果从源代码加载文件,ghci不关心.cabal文件,而是直接使用源代码中的类,因此它可以工作

您应该将依赖项更改为包

Build-depends: base < 5, ghc-binary >= 0.5, bytestring >= 0.9.1