19/05/04 09:12:23.39 S+NYX3By.net
>>972
関数型言語のスレの方が良い気がするけど。。。
感覚的で良ければ。
圏論では変数も引数のない関数と見なすので、例えばgetLineみたいな副作用のある関数も一種の変数(外部からの入力が入っている変数)と見なします。
n = 1 ― 変数であり、引数なしの関数
入力
↓
getLine ― 副作用関数であり、入力が入っている変数
ただ、入力を通常の値と同じにすると参照透明性が破れるので、IO Stringの様に別の型にして、>>=からしか値が取り出せない様にします。
(逆に通常の型にIOを付けたい場合はreturnを使います)
そうする事で、副作用のある関数は普通の関数も使えるけど、逆は無い事が保証されます。
ぶっちゃけ、純粋関数型言語にも副作用はあると言えますが
(無いと主張するなら虚数の掛け算みたいな感覚。実数に対して90度の回転みたいに、虚空からの値の変数への束縛。
ただしその変数は常に部分適用で見た目が隠されている。みたいな)、
参照透明性が破られることは無い。と言うのが純粋関数型言語の特徴ですね。