2013-08-27 11 views
4

我想編寫一個函數,像這樣如何轉到GHCi的新行?

double :: Int -> Int 
double x = x + x 

的問題是,在我寫的第一行:

Prelude> double :: Int -> Int 

我嘗試去到下一行按下回車鍵,但是當我做,我得到:

<interactive>:84:1: Not in scope: `double' 
Prelude> 

看來,程序執行的第一線,但我不想說,我想程序讓我寫第二行的ð才編譯和執行

所以,我怎麼能去(使用終端在Mac OS林)在Haskell下一行?

+1

使用ghci,編寫haskell代碼的更好方法是編輯文件並使用:load和:reload。這樣你可以避免在每次錯誤後重新輸入。 – seanmcl

回答

17

在ghci中,你必須把定義在一行,並與let開始他們。這比在源文件中的不同:

ghci> let double :: Int -> Int; double x = x + x 

您還可以使用:{:}做木裏線定義:

ghci> :{ 
Prelude| let double :: Int -> Int 
Prelude|  double x = x + x 
Prelude| :} 
ghci> double 21 
42 

確保縮進第二double與第一排隊一個縮進很重要。

我建議您在文本編輯器中完成大部分工作,然後將文件加載到ghci中(使用:load或將其作爲參數提供給命令行)並使用它。在實際編寫代碼時,我發現ghci非常令人愉快地工作 - 它更好地處理已寫入的代碼。無論何時修改ghci中的文本文件:reload(或只是:r)。