首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell:分析错误:需要模块头、导入声明或顶级声明

Haskell:分析错误:需要模块头、导入声明或顶级声明
EN

Stack Overflow用户
提问于 2018-05-06 16:17:03
回答 3查看 15.7K关注 0票数 22

在阅读Haskell教科书时,我将Haskell脚本中的一些命令保存在.hs文件中。这里有一个小示例。

代码语言:javascript
复制
fst (1,2)
snd (1,2)

当我在GHCi的前奏中运行这些命令时,它们工作得很好。当我尝试用这两行代码编译.hs文件时,我得到了以下代码:

代码语言:javascript
复制
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.

我已经用谷歌搜索了这个错误,但找不到任何解释我做错了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-06 16:28:14

您不能只是将任何表达式放入hs文件中。

正如错误消息所说,这里需要一个声明。例如:

代码语言:javascript
复制
main =
    print (fst (1,2)) >>
    print (snd (1,2))
票数 13
EN

Stack Overflow用户

发布于 2018-11-09 00:43:15

从新手到未来的新手:交互式环境ghci会让你相信,你可以在.hs文件中输入一些表达式并运行它(以类似于swift和ruby等语言的方式)。事实并非如此。

Haskell需要一个名为main的入口点。引用:

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

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

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

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

票数 26
EN

Stack Overflow用户

发布于 2021-11-09 04:06:56

我收到了这个错误,但原因似乎与这里发布的任何内容完全不同。并且错误消息一点帮助也没有。

在MacOS High Sierra (10.13)上使用Cabal版本3.6.2.0和GHCI8.10.7我从这个页面开始工作:https://www.tutorialspoint.com/haskell/haskell_modules.htm,特别是“自定义模块”部分。在那里您可以看到我复制和粘贴的代码。

除了教程没有提到我需要向myfirstapp.cabal添加“other- Custom.hs : Custom”之外,并且除了示例Custom.hs文件包含"if x 'rem‘2 == 0“而不是"if x rem 2 == 0”之外,还有以下问题:

缩进很重要!

这一行(在引号内)不起作用"if x rem 2 == 0“。这行代码“if x rem 2 == 0”确实有效!

缩进一个空格是成功和失败的区别。

我对Haskell完全是新手。我用PHP、Javascript和Applescript编写了大量程序,还涉猎了十几个其他语言,这是我第一次看到空白区域。我认为这在Haskell的老手中是很常见的,但如果文档中突出地包含了这一点,那就更好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50197631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档