Haskell:解析错误:模块头,导入声明或期望的顶级声明

时间:2018-05-06 08:17:03

标签: haskell compiler-errors

我在通过Haskell教科书工作时,在.hs文件中的Haskell脚本中保存了一些命令。这是一个小例子。

fst (1,2)
snd (1,2)

当我从GHCi的前奏中运行这些命令时,它们工作正常。当我尝试使用这两行编译.hs文件时,我得到以下内容:

ch4_test.hs:2:1: error:
    Parse error: module header, import declaration
    or top-level declaration expected.
  |
2 | fst (1,2)
  | ^^^^^^^^^
Failed, no modules loaded.

我已经搜索了这个错误,无法找到任何解释我的错误。

2 个答案:

答案 0 :(得分:7)

从新手到未来的新手:交互式环境ghci会让您相信您可以将一些表达式打入.hs文件中并运行它(与Swift语言类似)和红宝石)。事实并非如此。

Haskell需要一个名为main的入口点。报价:

  

这是一个简单的程序,可读取然后打印字符:

main :: IO ()
main =  do c <- getChar
           putChar c
     

使用名称main很重要:main被定义为Haskell程序的入口(类似于C中的main函数),并且必须具有IO类型,通常是IO()

来源:https://www.haskell.org/tutorial/io.html

答案 1 :(得分:4)

您不能将任何表达式放在hs文件中。

正如错误消息所示,您需要在此处声明。例如:

main =
    print (fst (1,2)) >>
    print (snd (1,2))