関数定義してghciでloadしてささっと試す

最近Haskell勉強中なんだけど、ghciで普通に関数定義できないみたい*1なんで、ちょっと不便してた。でもコンパイルするのはメンドイ。
そしたら今日ghciでその関数定義したファイル(というかモジュール?)をloadしてghci内で使えることを知った。
hoge.hsというファイル内に関数定義を書いて

import Chara

lstrip :: String -> String
lstrip = dropWhile isSpace

ghciで:loadするとすると、ghci内でその関数が使えるようになる。

*Main> :load hoge
[1 of 1] Compiling Main             ( hoge.hs, interpreted )
Ok, modules loaded: Main.
*Main> 

これでインタラクティブシェル的な感じで関数定義できて便利。

*Main> :t lstrip 
lstrip :: String -> String
*Main> lstrip "   jkjkj   "
Loading package filepath-1.1.0.4 ... linking ... done.
Loading package old-locale-1.0.0.2 ... linking ... done.
Loading package old-time-1.0.0.5 ... linking ... done.
Loading package unix-2.4.0.2 ... linking ... done.
Loading package directory-1.0.1.1 ... linking ... done.
Loading package process-1.0.1.3 ... linking ... done.
Loading package array-0.3.0.1 ... linking ... done.
Loading package time-1.1.4 ... linking ... done.
Loading package random-1.0.0.2 ... linking ... done.
Loading package haskell98 ... linking ... done.
"jkjkj   "
*Main> lstrip "   \tmuu"
"muu"
*Main> 

なんか初回実行時だけloadとかlinkとか入るのかな?良くわからないけど。

*1:let使えばできるっぽい