TL;DR

  • ホームディレクトリに .ghci を作り、:set prompt と :set prompt-cont を書くと、GHCi のプロンプトを変えられる。
  • prompt-function と prompt-function-cont を使えば、プロンプトを動的に変えることもできる。

背景

Haskell の対話環境である GHCi のプロンプトを、好みの表示に変えたかった。

検証

固定のプロンプトを設定する

GHC のユーザーガイドによると、1 行入力時のプロンプトは :set prompt で、複数行入力時のプロンプトは :set prompt-cont で設定できる。ホームディレクトリに .ghci を作成し、次のように書いた。

-- 1 行時のプロンプト
:set prompt "λ> "
 
-- 複数行時のプロンプト
:set prompt-cont "λ| "

動的なプロンプトを設定する

GHC のユーザーガイドによると、prompt-function と prompt-function-cont に関数を渡せば、プロンプトを動的に変えられる。渡す関数のシグネチャは [String] -> Int -> IO String である必要がある。第 1 引数は現在のモジュール名のリスト、第 2 引数は履歴番号である。

次の例では、履歴番号をプロンプトに表示する。

:{
myPrompt modules hist = return $ "(" ++ show hist ++ ") λ> "
:}
:set prompt-function myPrompt

結果

.ghci に書いた設定で、GHCi のプロンプトが λ> 、複数行入力時は λ| に変わった。

キーワード

参考