油がない

引っ越してから朝食が毎日パンだけなので、とりあえず卵を買ってきた。ある人と朝食メニューがかぶるという宗教上の理由により、ゆで卵ではなくてスクランブルエッグを作ろうと思ったのだが、油がないことに気がついた。料理してないのがばれるので、今日中に油を買おうと思う。
だが、よく考えたらマーガリンを使えばよかったんじゃないだろうか。完全に失念していた。

遅延評価と順序付けの狭間で

ある関数Aと関数Bがあったとして、Aの後にBを実行したいとする。どうしたらよいだろうか。いわゆる手続き型言語であれば、Aの呼び出しの後にBの呼び出しを書けばよい。だが、Haskellではそれは全く意味を成さない。
何でかといえば、AとBの返り値のどちらが先に必要になるかは分からないので、どちらが先に評価されるかなどは知ったことではないのだ。でもそれだけだと不便で仕方がない。IO処理なんかだと、それでは困る。
じゃあどうすればよいだろうか。その答えの一つとして、例えばB(A())ということをする。 Bの中でAの返り値を使うのだ。そうすれば、必ずBの終了の前にAの評価が終わる。つまり、HaskellのIO処理ではそれを使っている。
この部分にモナドを使用するとより綺麗にかけるので、モナドを使用しているというのが現実。そして、例えばdoと書くとその後ろのブロックでは自動的に前に書いてある関数の返り値が後ろの関数に渡される。これはHaskellの中で手続き型のような記述を許しているように見えるが、単純にタイプ量を減らしているだけに過ぎない、ということは認識しておく必要がある。Haskellはどこまでも純粋であるべきなのだ。

というような感じで勉強していますが、どうでっしゃろ。