我猜這是一個總的初學者錯誤。我有它,我已經寫了Haskell解析錯誤時加載文件與列表定義
let mylist = [1,2,3]
當我運行它使用HS-文件:負載ghci中我得到以下錯誤
解析錯誤(可能是不正確的縮進)
的聲明在我處於Prelude模式時有效。所以基本上我想知道爲什麼加載文件時這不起作用,以及Prelude和Main有什麼區別?
我猜這是一個總的初學者錯誤。我有它,我已經寫了Haskell解析錯誤時加載文件與列表定義
let mylist = [1,2,3]
當我運行它使用HS-文件:負載ghci中我得到以下錯誤
解析錯誤(可能是不正確的縮進)
的聲明在我處於Prelude模式時有效。所以基本上我想知道爲什麼加載文件時這不起作用,以及Prelude和Main有什麼區別?
在GHCi中,語法有點不同,因爲它的行爲有點類似於您在do
-block中,因此您必須使用let x = ...
表單。在一個Haskell源文件,你能不能別再let
和寫:
mylist = [1,2,3]
至於Prelude
和Main
之間的區別,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
。
注意:Haskell風格給頂層聲明提供了一個明確的類型簽名。 –
謝謝!我一直在做很多Python,並且看到解釋器我錯誤地認爲它比運行一個選擇的文件更重要。 –
您可以發佈程序源代碼並將其放在{}標記中嗎? – octopusgrabbus
這就是我寫的全部內容。 Misstook Haskell for Python :) –