モナド

ああ、だんだん、モナドが分からなくなってきた・・・
----
Haskellのdo記法と「<-」は、Concurrent Cleanで一意型を使ったときのletと「=」に似ている?
----
モナドを使うことのメリットは、以下の3つに要約できる?

  • 一つの値に複数の状態を混在させられる
  • 実行順序を一方向に限定できる
  • 実行結果をモナド内に閉じ込められる

で、Cleanの一意型は、以下のような特徴がある。

  • 実行順序を一方向に限定できる
  • 実行結果を参照透過性を壊さずに取り出すことができる

なので、Cleanでモナドを利用するメリットは、

  • 一つの値に複数の状態を混在させられる

という部分だと思うのだけれど、Haskellモナドは、他の要素も強く一体化していて、どのように切り出せばよいのか(あるいは、切り出す必要がないのか)が分からない。