IO操作“主”未由模块“主”导出

时间:2018-12-08 17:41:51

标签: haskell

我有两个名为SimpleJSON.hs的haskell文件,另一个是Main.hs

--File: 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)

还有

--File: Main.hs
module Main () where
import SimpleJSON
main = print (JObject [("foo", JNumber 1), ("bar", JBool False)])

所以在编译时 我在做

ghc -c SimpleJSON.hs

ghc simple Main.hs SimpleJSON.o

那我就报错了

Main.hs:1:1: error:
The IO action ‘main’ is not exported by module ‘Main’
  |
1 | module Main () where
  | ^

如何解决此编译错误?

2 个答案:

答案 0 :(得分:7)

应该是

module Main where

module Main (main) where

答案 1 :(得分:1)

此答案专门针对Real World Haskell的读者。该书似乎使用了Haskell的较旧版本,其中main不需要在导出列表中明确提及。在最新版本中,情况不再如此。

需要提到两个方面:

  • 您需要编写module Main (main) where以便导出main
  • 您无需制作SimpleJSON.hs的目标文件并在编译Main.hs时提及它,即只需运行ghc -o simple Main.hs就足够了

作为一般说明,对Amazon page for the book的一些评论提到书中涉及的某些方面已过时。因此,如果您正在关注本书,则可以使用其他资源来弥补差异。