gpt4 book ai didi

haskell - 真实世界 Haskell,第 5 章,SimpleJSON 编译错误

转载 作者:行者123 更新时间:2023-12-02 10:51:42 25 4
gpt4 key购买 nike

根据another question ,现实世界 Haskell 的部分内容现已过时。我只学习了第 5 章,但在将一个简单示例编译为可执行二进制文件时遇到问题。

给出了两个模块:

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 (truncate 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

module Main () where

import SimpleJSON

main = print (JObject [ ("foo", JNumber 1), ("bar", JBool False ) ])

首先包含编译 SimpleJSON 对象文件的说明:

$ ghc -c SimpleJSON.hs

然后链接可执行文件:

$ ghc -o simple Main.hs SimpleJSON.o

这会导致错误,指出“main”未导出:

[2 of 2] Compiling Main             ( Main.hs, Main.o )

Main.hs:1:1:
The main function `main' is not exported by module `Main'

但是,如果我将 main 添加到导出列表或省略空导出列表,我会在链接阶段看到很多多个定义错误:

Linking simple ...
SimpleJSON.o:(.data+0x0): multiple definition of `__stginit_SimpleJSON'
./SimpleJSON.o:(.data+0x0): first defined here
SimpleJSON.o:(.data+0x0): multiple definition of `SimpleJSON_getArray_closure'
./SimpleJSON.o:(.data+0x0): first defined here
....
(.text+0x2d40): multiple definition of `SimpleJSON_JObject_static_info'
./SimpleJSON.o:(.text+0x2d40): first defined here
SimpleJSON.o: In function `SimpleJSON_JArray_info':
(.text+0x2d80): multiple definition of `SimpleJSON_JArray_static_info'
./SimpleJSON.o:(.text+0x2d80): first defined here
collect2: error: ld returned 1 exit status

假设此错误是由于文本中过时的代码或过时的 ghc 接口(interface)造成的,那么编译此 SimpleJSON 示例的正确方法是什么?

最佳答案

这应该有效:

ghc -o simple Main.hs SimpleJSON.hs

或者甚至像这样的东西应该有效:

ghc -c SimpleJSON.hs
ghc -c Main.hs
ghc -o simple Main.o SimpleJSON.o

或者正如 @chi 指出的,你可以使用这个:

ghc --make SimpleJSON.hs Main.hs

关于haskell - 真实世界 Haskell,第 5 章,SimpleJSON 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com