int f(int n){ puts("hello");
return n +2; }
という関数があるとき
3
というデータと
f(1)
という関数適用の結果は同じ3を与える。
だけれどもf(1)は計算結果として3を与えるだけで、3というデータというわけではない。出自が違うしhelloと出力する分差がある。
なので3と同一視してしまうのはマズイ。
3:int
f(1):計算 int
と区別する。名称としても3の方は値(value)
f(1)の方は計算(computation)と呼ぶことにする。

モナドはこういう区別をとりあえず認められるかどうか。計算結果としてのデータと単なるデータを区別すると言うことが重要なんだがOK?これが認められればすぐ分かる