8

今天早上的坏消息,我愿意尝试使用 Leksah(顺便说一句,看起来不错的应用程序)来继续学习 Haskell。

我无法编译阅读leksah 教程时发现的“Hello World”示例。

module Main (
main = putStrLn "Hello World"     
) where

compilation-error: src\Main.hs:16:5: parse error on input='`

module Main (
) where
main = putStrLn "Hello World"

compilation-error: src\Main.hs:1:0: The main functionmain' 不是由模块导出的Main'

你有什么建议我试试别的?

重要编辑现在 Leksah 附带一个文件 Main.hs,在您第一次启动 leksah 时直接加载,其中包含一个功能齐全的 Hello World 迷你项目。它还具有极简的单元测试计数器部分。非常适合初学者:-)

4

3 回答 3

15

模块名称后括号中的文本是导出列表。这意味着,您必须将所有功能放入要导出的程序中。但除此之外,您还必须在某处定义您的主要功能。试试这个:

module Main (
  main
) where
main = putStrLn "Hello World"

PS:您也可以删除括号和其中的任何内容,而不是模块中的任何内容都将被导出。

于 2011-01-12T10:27:03.883 回答
6

您的第二个示例几乎就在那里,只需()从旁边删除Main。这是您的模块的导出列表,您已将其设为空(括号之间没有任何内容)。因此,main看不到(因为它没有导出)。

您也可以只导出 main:

module Main (main) where
于 2011-01-12T10:24:56.140 回答
6

“把所有东西都导出是个好习惯吗?” 当然不。您不希望辅助方法等实现细节泄漏到外部。另一个例子是值构造函数,因为没有办法对它们进行完整性检查、默认参数等。为了克服这个问题,你只在模块内部使用它们,并为外部提供方便和安全的初始化函数。

于 2011-01-12T13:55:16.180 回答