1

我有这两个模块:

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 进行了尝试,它们的行为都相似。

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

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

4

1 回答 1

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
于 2014-11-28T19:47:33.687 回答