Haskellのdo記法(1)
do記法はモナディックなコードを書くための別の記法です。特にIOモナドのような、仕様として純粋な値を取り出すことが出来ないモナドを使った処理を書くのには便利です。対照的にMaybeやリストのようなモナドからは純粋な値をパターンマッチやそのための関数を使うことで取ってくることが可能です。
(>>)演算子はそれを使ったコードからdo記法への書き換えが簡単なので、最初に見て行きましょう。下のような、モナドが連なったコードがあるとします。
putStr "Hello" >> putStr " " >> putStr "world!" >> putStr "\n"
これをdo記法で書きなおしてみます。
do putStr "Hello" putStr " " putStr "world!" putStr "\n"
このようなコードはCのような命令型言語のそれと非常に似ていますね。
do記法は入出力によく使われるため、この記法の中にあるモナドはアクションと呼ばれることが多いです。アクションはファイルに書き込む操作だったり、ネットワークのコネクションを開いたり、ユーザに入力を求めたり、といったものだったりします。一般的に、こういったアクションをdo記法から普通のHaskellのコードに戻そうとすると、
do action
other_action
yet_another_action
というコードが
action >> do other_action yet_another_action
というように変えていき、doブロックがからになるまで続ければ出来ます。