2011-01-12 251 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

「出口一切是好習慣嗎?」當然不。你不希望像輔助方法那樣的實現細節泄露到外部。另一個例子是價值構造函數,因爲沒有辦法對它們進行理智檢查,默認參數等。爲了解決這個問題,你只能在模塊內部使用它們,併爲外部提供方便和安全的初始化功能。