IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

設定ファイルを読み込む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も入れています。