みどりねこ日記

よくわからないけど、頑張りますよ。

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ブロックがからになるまで続ければ出来ます。