Haskell/有效使用 GHCi
外觀
< Haskell
GHCi 在多個方面協助更高效的工作。在這裡,我們將討論一些使用 GHCi 的最佳實踐。
與許多其他終端程式一樣,您可以在 GHCi 中輸入一些起始文字,然後按 Tab 鍵以顯示所有以您所寫內容開頭的可能性列表。當只有一個可能性時,使用 Tab 將自動完成字串。例如 fol<Tab>將附加字母“d”(因為除了以“fold”開頭的專案外,沒有其他以“fol”開頭的專案)。第二個Tab將列出 Prelude 中包含的四個函式:foldl、foldl1、foldr 和 foldr1。如果您已經匯入了其他模組,則可能會顯示更多選項。
當您將包含程式的檔案載入到 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 命令列中鍵入
:set +s。 - 執行您正在測試的函式。GHCi 輸出函式結果後,將顯示函式執行所花費的時間。
如果您嘗試定義一個跨越多行的函式,或者如果您想將一個 do 塊鍵入 ghci 中(而無需編寫您然後匯入的檔案),有一種簡單的方法可以做到這一點
- 以
:{開啟新的一行 - 鍵入您的程式碼。當您需要新的一行時,按回車鍵。
- 鍵入
:}以結束多行輸入。
例如
*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