IOのメモ
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/haskell_io.htmlを読んでのメモ。
関数型みたいに関数が第一級の対象だと、「関数そのもの」と「関数を適用すること」が区別されてる。fとf(x)は別物。「関数そのもの」を直接指定するにはlambdaを使えばよい。
それと同様に、「動作(そのもの)」と「動作の実行」を区別することが考えられる。副作用が許されないような計算モデルの場合、副作用を「動作の実行」に追いやって、コードでは、副作用を抜いた「動作」のみ扱うことが可能になるので、区別できるのは有用。
Haskellでの「動作」の型は例えば、
IO Char -- 1文字入力 IO() -- 出力
とか。
それに対して、「動作の実行」は、『「動作」を変数mainに束縛すること』で実現される。
mainはエントリポイントなので、「動作の実行」を実現するにはこれしかないみたい。
ここまでで、IOがモナドでなければいけないということは特にないように見える。どう関連してくるのかは不明。