2014-11-28 2 views
0

у меня есть эти два модуля:Выводя Generic из данных, объявленных в другом файле не удается

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, и они оба ведут себя одинаково.

Я могу сделать эту функцию работоспособной, если поместить весь код в один модуль.

Может кто-нибудь объяснить, что здесь происходит, пожалуйста?

+0

Попробуйте использовать песочницу. Я смог успешно построить ваши модули таким образом. – ErikR

+0

@ user5402, какую версию ghc и зависимости вы используете? – coubeatczech

+0

Я добавил информацию о версии в качестве ответа. – ErikR

ответ

1

Я использую 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 
+0

Хорошо, это работает, но все равно это не решает мою проблему. У меня есть другие зависимости в проекте, поэтому я не собирался сбрасывать их все здесь и просто кипятил проблему до сути. Но мне не удалось: -/ – coubeatczech

+0

Надеюсь, вы это поняли. При установке в песочнице вам не придется привязывать версии. Возможно, был плохой файл .o, лежащий вокруг предыдущего компилятора? Во всяком случае, не стесняйтесь связываться, если у вас все еще есть проблемы. – ErikR

+0

только для вашей информации проблема заключалась в том, что я использовал модуль с этими двумя файлами в качестве библиотеки для другого исполняемого файла cabal, и библиотека не выставляла модуль 'Two' – coubeatczech