跳轉到內容

Haskell/有效使用 GHCi

來自 Wikibooks,開放世界中的開放書籍

GHCi 在多個方面協助更高效的工作。在這裡,我們將討論一些使用 GHCi 的最佳實踐。

使用者介面

[編輯 | 編輯原始碼]

製表符補全

[編輯 | 編輯原始碼]

與許多其他終端程式一樣,您可以在 GHCi 中輸入一些起始文字,然後按 Tab 鍵以顯示所有以您所寫內容開頭的可能性列表。當只有一個可能性時,使用 Tab 將自動完成字串。例如 fol<Tab>將附加字母“d”(因為除了以“fold”開頭的專案外,沒有其他以“fol”開頭的專案)。第二個Tab將列出 Prelude 中包含的四個函式:foldlfoldl1foldrfoldr1。如果您已經匯入了其他模組,則可能會顯示更多選項。

當您將包含程式的檔案載入到 GHCi 中時,製表符補全也適用。例如,在鍵入 :l fi<Tab>後,您將看到當前目錄(您啟動 GHCi 時所在的目錄)中所有以“fi”開頭的檔案。

同樣也適用於匯入模組,在鍵入 :m +Da<Tab>import Da<Tab>後,您將看到已安裝的包中所有以“Da”開頭的模組。

": 命令"

[編輯 | 編輯原始碼]

在 GHCi 命令列上,直譯器的命令以字元“:”(冒號)開頭。

  • :help:h -- 列印所有可用命令的列表。
  • :load:l -- 將給定檔案載入到 GHCi 中(您必須在命令中包含檔名)。
  • :reload:r -- 重新載入最近載入的檔案(在更改檔案後很有用)。
  • :type:t -- 列印與命令一起包含的給定表示式的型別
  • :module:m -- 載入給定模組(在命令中包含模組名稱)。您也可以透過在模組名稱之前新增 - 符號來解除安裝模組。
  • :browse -- 提供給定模組中所有可用函式的型別簽名。

在這裡,您可以使用Tab來檢視命令列表,型別 Tab以檢視所有可能的命令。

GHCi 中的計時函式

[編輯 | 編輯原始碼]

GHCi 提供了一種基本的方式來測量函式執行所花費的時間,這對於找出哪個版本的函式執行速度最快(例如,當有多種方法來定義某件事以獲得相同的效果時)很有用。

  1. 在 ghci 命令列中鍵入 :set +s
  2. 執行您正在測試的函式。GHCi 輸出函式結果後,將顯示函式執行所花費的時間。

多行輸入

[編輯 | 編輯原始碼]

如果您嘗試定義一個跨越多行的函式,或者如果您想將一個 do 塊鍵入 ghci 中(而無需編寫您然後匯入的檔案),有一種簡單的方法可以做到這一點

  1. :{ 開啟新的一行
  2. 鍵入您的程式碼。當您需要新的一行時,按回車鍵。
  3. 鍵入 :} 以結束多行輸入。

例如

   *Main> :{
   *Main| let askname = do
   *Main|               putStrLn "What is your name?"
   *Main|               name <- getLine
   *Main|               putStrLn $ "Hello " ++ name
   *Main| :}
   *Main>


可以使用 :set +m 命令(允許多行命令)實現相同的功能。在這種情況下,空行將結束該塊。

此外,ghci 命令中的換行符可以使用 ; 分隔,例如

   *Main> let askname1 = do ; putStrLn "what is your name?" ; name <- getLine ; putStrLn $ "Hello " ++ name
華夏公益教科書