Maybe

先日([id:lethevert:20051119:p5])、↓のように書いたが、

悩んだのは(というか、いつも悩むのは)、例外処理をどうしようかということ。nextとprevはタプルで真偽値を返して、それ以外はabortにしたけれど、どうするのが使いやすいのだろう?

こういうことをするために、Haskellでは、Maybeモナドがあるらしい。
Concurrent Cleanのライブラリには、StdLibにStdMaybe.dclを発見した。

::  Maybe x
    =   Just x
    |   Nothing

でも、IOがモナドでないCleanしか知らないので、なんでHaskellでは、Maybeがモナドなの?と思ったのだけれど・・・
http://www.sampou.org/haskell/a-a-monads/html/meet.html
これを見て、合点がいった。
というか、pp4dの処理系を書いていたときに、あれこれと悩んでいたことが、これでかなりの部分解決するのではないかと思った。今のpp4dのコードは、エラー処理のために、guardとcaseがあふれ返っているからだ。
しかし、Concurrent Cleanは、do記法を持っていない(はず)ので、モナドhaskellのように簡潔に書くことができるのか? (もしかしたら、do記法は、私が思っているほど簡潔な表記ではないかも?)