从另一个文件中声明的数据派生Generic失败

时间:2014-11-28 16:28:39

标签: haskell ghc deriving ghc-generics

我有这两个模块:

module Server where
import Data.JSON.Schema.Generic (gSchema)
import Data.JSON.Schema.Types (JSONSchema(schema))
import Two
instance JSONSchema Data where 
    schema = gSchema
main :: IO ()
main = undefined

{-# LANGUAGE DeriveGeneric #-}
module Two where
import GHC.Generics (Generic)
data Data = Data {
    scName :: String
} deriving Generic

当尝试构建包含这两个文件的项目时,链接阶段的ghc会抛出几个错误,如下所示:(它们仅在(.data + 0XXXX)部分有所不同。)

dist/dist-sandbox-190abc84/build/libHSserver-0.1.a(Server.o):(.data+0x1b8): undefined reference to `serverzm0zi1_Two_zdfGenericData_closure'

最后的信息是:

collect2: error: ld returned 1 exit status

我用ghc 7.8.3和7.6.3尝试了这一点,它们的行为相似。

如果将所有代码放入一个模块中,我可以使这个功能正常工作。

有谁能解释一下,请问这里发生了什么?

1 个答案:

答案 0 :(得分:2)

我正在使用GHC 7.8.3(来自Haskell平台)。下面是一个cabal.config文件,其中包含沙盒中使用的特定版本。

constraints: aeson ==0.8.0.2,
             array ==0.5.0.0,
             attoparsec ==0.12.1.2,
             base ==4.7.0.1,
             bytestring ==0.10.4.0,
             containers ==0.5.5.1,
             deepseq ==1.3.0.2,
             dlist ==0.7.1,
             generic ==0.1.0.0,
             generic-aeson ==0.2.0.2,
             generic-deriving ==1.7.0,
             ghc-prim ==0.3.1.0,
             hashable ==1.2.2.0,
             integer-gmp ==0.5.1.0,
             json-schema ==0.7.1.1,
             mtl ==2.1.3.1,
             old-locale ==1.0.0.6,
             pretty ==1.1.1.1,
             primitive ==0.5.2.1,
             rts ==1.0,
             scientific ==0.3.3.2,
             syb ==0.4.1,
             tagged ==0.7.3,
             template-haskell ==2.9.0.0,
             text ==1.1.1.3,
             time ==1.4.2,
             transformers ==0.3.0.0,
             unordered-containers ==0.2.5.1,
             vector ==0.10.9.1