【发布时间】:2018-05-10 23:42:04
【问题描述】:
您好,我正在尝试从两个文件构建一个 haskell 程序;一个是具有一些用于表示 json 的函数的模块,另一个是一个简单的 main 函数。按照书中 (RWH) 中的示例,ghc 在链接时崩溃。
Jlib.hs
Main.hs
主要:
module Main where
import Jlib
import System.Environment
main::IO()
main=print(JObject[("p0",JNumber 3),("p1",JString "asta")])
我使用命令:
ghc -c Jlib.hs
ghc -o Main Main.hs Jlib.o
我收到以下错误:
$ ghc -o Main Main.hs Jlib.o
[2 of 2] Compiling Main ( Main.hs, Main.o )
Linking Main.exe ...
Jlib.o:fake:(.data+0x0): multiple definition of `__stginit_Jlib'
.\Jlib.o:fake:(.data+0x0): first defined here
Jlib.o:fake:(.data+0x60): multiple definition of `Jlib_zdfShowJValue_closure'
我的文件夹如下所示:
Jlib.hs
Jlib.o
Jlib.hi
Main.hs
Main.o
Main.hi
我问是因为这是书中的一个例子。
后期编辑:添加Jlib模块
module Jlib(
JValue(..),
getString,
getInt,
getBool,
getObject,
getArray
) 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::JValue->Maybe Int
getInt (JNumber n)=Just (truncate n)
getInt _= Nothing
getBool::JValue->Maybe Bool
getBool (JBool b)=Just b
getBool _=Nothing
getObject (JObject obj)=Just obj
getObject _=Nothing
getArray (JArray a)=Just a
getArray _=Nothing
【问题讨论】:
-
我们能看看 Jlib 长什么样吗?
-
当然我不想污染初始代码sn-p。我在初始帖子中添加了定义。
标签: haskell