ghci で全てを済ませたい
ソースファイルを作りたくない
Haskell の勉強をする時に一番便利なのは、ghci のコマンドラインにプログラムを打ち込んでその反応を見ることだ。自分の意図したことがうまくいくのか、そうでないのか、リアルタイムに知るのは気持ちがいいし理解も進む。いちいちエディタを開いて修正して保存して、それを再ロードして試すという操作は、何回も繰り返していると、助けてくれと叫びたくなる。
Haskell Platform をインストールすれば、Windows でもヒストリー機能が付いているので、上矢印一発で先程入力したプログラムを修正できるから、余計にプログラムファイルを作りたくなくなる。
何でも ghci でやってしまう
そこで、何でも ghci でやってしまえないかいろいろと探してみた。
驚いたことに、ガードも ghci のワンライナーで使える。次の例は、階乗の計算をガードを使って定義したものだ。
パターンを使った関数の定義も、ワンライナーでできる。
複数行の do 記法だって、ワンライナーで書ける。
シェルのコマンドも ghci からできる。
自分がどんな関数を定義したのか、検索できる。
ライブラリの関数にどんなものがあるのか検索できる。
関数やライブラリの情報を確認できる。
ガードが書ける
Prelude> fact x | x == 0 = 1 | x > 0 = x * fact (x-1)
Prelude> fact 5
120
パターンが書ける
Prelude> len [] = 0; len (_:xs) = 1 + len xs
Prelude> len [1,2,3,4]
4
do 記法
Prelude> do cs <- getLine; putStrLn cs
hello, world
hello, world
シェルコマンド
Prelude> :! ls
定義した関数を見る
Prelude> :show bindings
fact :: (Num a, Ord a) => a -> a = _
it :: () = ()
len :: (Num t1) => [t] -> t1 = _
ライブラリの検索
Prelude> :browse Text.Regex
matchRegex :: Regex -> String -> Maybe [String]
matchRegexAll ::
Regex -> String -> Maybe (String, String, String, [String])
mkRegex :: String -> Regex
Prelude> :info foldr
foldr :: (a -> b -> b) -> b -> [a] -> b -- Defined in GHC.Base
Prelude> :info System.IO.readFile
readFile :: FilePath -> IO String -- Defined in System.IO
ちょっと、満足。: )