Haskell,链接两个文件时出错

Haskell,链接两个文件时出错,haskell,linker,Haskell,Linker,我开始读关于哈斯克尔的书《真实世界的哈斯克尔》,我遇到了一个我无法理解的问题。 我有两个文件。第一个文件SimpleJSON.hs包含以下代码: module SimpleJSON ( JValue(..) , getString , getInt , getDouble , getBool , getObject , getArray , isNull ) where data

我开始读关于哈斯克尔的书《真实世界的哈斯克尔》,我遇到了一个我无法理解的问题。 我有两个文件。第一个文件SimpleJSON.hs包含以下代码:

module SimpleJSON
    (
        JValue(..)
      , getString
      , getInt
      , getDouble
      , getBool
      , getObject
      , getArray
      , isNull
    ) where

data JValue = JString String
            | JNumber Double
            | JBool Bool
            | JNull
            | JObject [(String, JValue)]
            | JArray [JValue]
              deriving (Eq, Ord, Show)

getString :: JValue -> Maybe String
getString (JString s) = Just s
getString _           = Nothing

getInt (JNumber n) = Just n
getInt _           = Nothing

getDouble (JNumber n) = Just n
getDouble _           = Nothing

getBool (JBool b) = Just b
getBool _         = Nothing

getObject (JObject o) = Just o
getObject _           = Nothing

getArray (JArray a) = Just a
getArray _          = Nothing

isNull v = v == JNull
我使用了“ghc-csimplejson.hs”来获取对象文件。然后在我的主要部分

module Main (main) where

import SimpleJSON

main = print (JObject [("foo", JNumber 1), ("bar", JBool False)])
我正在导入第二个文件,但当我运行“ghc-o simple Main.hs SimpleJSON.o”以获取.exe文件时,出现以下错误:

collect2.exe: error: ld returned 1 exit status
`gcc.exe' failed in phase `Linker'. (Exit code: 1)

感谢您的帮助

编译器应该认识到,
Main
依赖于
SimpleJSON
通过
import SimpleJSON
语句。这意味着在编译Main.hs时,SimpleJSON.hs也将被编译并链接到生成的可执行文件中

通过在命令行上显式指定SimpleJSON.o,您可能将该文件链接到生成的可执行文件中两次,这会导致您看到的失败


ghc-o simple Main.hs
应该足以让您的程序链接。

不客气。如果您认为这是正确的答案,请您通过点击复选框接受它。