設定ファイルを読み込むstack ghciの起動
いつもstack ghci
で起動した後に手で``:set prompt " > "
をしていました。これを起動時に自動的に実行したかったのですが、やり方がわかりませんでした。
PS C:\Users\User\haskell\> stack ghci Using main module: 1. Package `RS' component exe:RS-exe with main-is file: C:\Users\User\haskell\Main.hs ... [2 of 2] Compiling Main ( C:\Users\User\haskell\app\Main.hs, interpreted ) Ok, two modules loaded. Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script *Main Lib> *Main Lib> :set prompt " > " >
確かに
Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script
のログが出ていて、ここに起動時に実行されるスクリプトがあります。
中身は
:add Lib C:\Users\User\haskell\app\Main.hs :module + Lib
となっています。
ここに書けば実行されるはずですが、stack
が自動的に作成するTemp
内にあるので、ここには書きたくありません。
マニュアルには、起動時に実行するスクリプトの配置場所が3か所書いてあります。
4. Using GHCi — Glasgow Haskell Compiler 8.8.1 User's Guide
なので、ここにスクリプトを配置すればよいのですが、stack ghci
で起動したときの.
やappdata
や$HOME
の場所がわかりませんでした。
あれこれ悩みましたが、答えは単純で、System.Directory
にある関数を使えば、これらの場所がわかります。
*Main Lib> import System.Directory *Main Lib System.Directory> getCurrentDirectory "C:\\Users\\User\\haskell\\" *Main Lib System.Directory> getAppUserDataDirectory "" "C:\\Users\\User\\AppData\\Roaming\\" *Main Lib System.Directory> getHomeDirectory "C:\\Users\\User" *Main Lib System.Directory>
自分の環境の場合は
"C:\Users\User\haskell\"
に.ghci
ファイルを作成しました。
:set prompt " > " :set +t
これで、stack ghci
時に自動的にスクリプトが実行されます。
型の情報も欲しいので:set +t
も入れています。