読者です 読者をやめる 読者になる 読者になる

モナドっていうのはつまり

haskell モナド

SchemeでPostScriptするライブラリ Tiny-PS 作ったよ - [・ _ゝ・]日記を書くはやみずさんのことなのか。

クラスのインスタンスに、movetoメソッドとかlinetoメソッドとかを適用すると、どのメソッドが適用されたかがインスタンスのps-stackにプッシュされていって、PostScriptを吐き出すときにはスタックを逆から出力していく、というのがこのライブラリのアイディアらしい。

モナドもこれと同じように、「どの順にどういう処理を行うか」を記録したオブジェクトを作っていって、後でいっぺんに実行するような感じなんじゃないだろか?Stateモナドはまさにそうで、getとかputとかで処理手順を表すオブジェクトを作っておいて、runStateで実行するというふうになっている。なかには、MaybeモナドやListモナドのように、(runStateのような)明示的な実行をしなくても計算が行われるようなものもある。IOモナドもそうか。putStrとかreadLineとか書いていても、実際には「そういう処理をする」ということを記録したオブジェクトを作っているだけだから、言語の中には副作用がないと思えると。

書いてる途中にデザインパターンに似たようなのがあったなぁって思い出した。モナドって非破壊的なCommandパターンなのか?