2011-01-12 205 views
8

今天早上坏消息,我愿意尝试使用Leksah(顺便看一下漂亮的应用程序)继续学习haskell。haskell leksah hello-world

我无法编译“Hello World”示例,我发现读取leksah tutorial

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 function主' 不是由模块出口Main'

什么,你会建议我去尝试别的东西吗?

重要编辑现在Leksah附带文件Main.hs,直接加载的第一次启动leksah,所包含的完全functionnal的Hello World小项目。它也有简约的单元测试柜台部分。非常适合初学者 :-)

回答

15

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

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

PS:您还可以删除paranthesis和任何在那里,比你的模块中的任何东西将被出口。

6

你的第二个例子已经差不多了,只需从Main旁边删除()即可。这是您的模块的导出列表,您已将其设置为空(括号内没有任何内容)。因此,main未被看到(因为它未被导出)。

你也可以只导出主:

module Main (main) where 
+0

导出所有内容是否很好? – 2011-01-12 10:50:23

+0

嗯,我不能确定最佳做法是什么,但是:一般来说,当我有一个合理的好主意,我已经形成了一个有凝聚力的模块时,我限制了我的出口。限制导出对于您不希望人们直接访问的数据类型非常重要,通过一组定义的函数。 – ScottWest 2011-01-12 11:45:18

6

“出口一切是好习惯吗?”当然不。你不希望像辅助方法那样的实现细节泄露到外部。另一个例子是价值构造函数,因为没有办法对它们进行理智检查,默认参数等。为了解决这个问题,你只能在模块内部使用它们,并为外部提供方便和安全的初始化功能。