2012-01-24 22 views
1

我猜這是一個總的初學者錯誤。我有它,我已經寫了Haskell解析錯誤時加載文件與列表定義

let mylist = [1,2,3] 

當我運行它使用HS-文件:負載ghci中我得到以下錯誤

解析錯誤(可能是不正確的縮進)

的聲明在我處於Prelude模式時有效。所以基本上我想知道爲什麼加載文件時這不起作用,以及Prelude和Main有什麼區別?

+0

您可以發佈程序源代碼並將其放在{}標記中嗎? – octopusgrabbus

+0

這就是我寫的全部內容。 Misstook Haskell for Python :) –

回答

6

在GHCi中,語法有點不同,因爲它的行爲有點類似於您在do -block中,因此您必須使用let x = ...表單。在一個Haskell源文件,你能不能別再let和寫:

mylist = [1,2,3] 

至於PreludeMain之間的區別,Prelude是一個標準模塊,defines the most common Haskell types and functions,它在默認情況下導入到每一個哈斯克爾模塊。

Main只是頂部沒有module Foo where ...的模塊的默認名稱。

在默認設置下使用GHCi時,提示符會顯示哪些模塊當前處於範圍內。如果你剛開始GHCI而不加載一個文件,這將是剛剛Prelude,這樣的提示是這樣的:

Prelude> 

加載模塊後,及時改變,表明其被帶進範圍的新模塊。如前所述,如果你沒有給它一個不同的名字,這將是Main

*Main> 

星號表示該模塊在解釋模式被加載,這意味着一切是在範圍在模塊中也將是在範圍在GHCI提示,包括來自其他模塊,如進口的東西Prelude

可以使用:m命令將附加模塊帶入示波器。注意提示如何改變以顯示附加模塊。

*Main> :m + Data.List 
*Main Data.List> 

對於GHCI或read the GHCi chapter of the GHC User's Guide詳細信息,鍵入:help

+0

注意:Haskell風格給頂層聲明提供了一個明確的類型簽名。 –

+0

謝謝!我一直在做很多Python,並且看到解釋器我錯誤地認爲它比運行一個選擇的文件更重要。 –