[FAQ]Haskellには副作用があるのか、ないのか
「モナド遊び」を書き始めました。気長に書き進めていきます。 http://www.mew.org/~kazu/proj/monad/
2010-06-04 18:10:20モナドの話をするときに副作用への言及は不要だと思います。もし言及するなら、定義を明示していただけると嬉しいなぁ。それと記述対象の性質についてなのか、記述言語の性質なのかを是非区別してもらえると混乱しなくていいなぁ。と思います。
2010-06-04 19:09:55この本は、命令型言語プログラマーで、プログラミングHaskellを読んだぐらいの知識がある人が対象です。ですので、命令型言語プログラマーの言葉で書きます。
2010-06-04 22:08:10副作用は、参照透明性を破るものです。参照透明であれば、処理系が実行の順番を決められます。副作用がある場合は、プログラマーの記述が実行の順番です。
2010-06-04 22:09:51Simonの『変更可能な状態を読んだり書いたりするような何か』というのは表現する対象に関する言及ですよね。一方、『参照透明性を破るもの』の「参照透明性」というのは表現する側の言語に関する言及ですよね。
2010-06-04 22:46:35.@nobsun 表現という説明が命令プログラマーにはピンときません。僕はいつも動かしたときにどうか、について語っています。
2010-06-04 23:27:25「動かしたときにどうか」は表現の対象になるものであって、表現側ではありません。話者の意図に反して「参照透明性」というのは表現する側に関する言及になっています。QT @kazu_yamamoto 僕はいつも動かしたときにどうか、について語っています。
2010-06-04 23:51:10説明が悪いというのには同意します。その原因は、説明を求めている人に対してその人の言葉で説明していないことではなくて、Aの説明を聞いていると思っている人にBの説明をしているからだとおもうのです。
2010-06-05 00:17:07ずれがあるのは認識しているのですが、私自身の言及のなかでズレが認識できていません。それで上手く伝えられないのでしょうね。QT @ikegami__ @nobsun @kazu_yamamoto 「表現」と「意味論」と reasoning でずれた議論をしているようにみえる
2010-06-05 00:26:57@kazu_yamamoto すくなくとも「副作用を表す型は、IO と ST のみです」は、ぼくは、納得がいきません。State モナドや RWST モナド、Error モナドなど、挙げたらきりがないくらい、あります
2010-06-05 00:44:18モナドのなかで閉じた再代入はゆるされます。世界は IO で、ぼくらはほかにもモナドを知っている、Haskell の利点は、再代入をプログラマが制御できることである
2010-06-05 00:54:42参照透明性の定義は幾つかあって http://bit.ly/9x4cPh 、「副作用がないこと」という定義も一応はあるのだけど、この「副作用」は @kazu_yamamoto さんが「Haskellには入出力という副作用はある」と言っている「副作用」ではないと思うんだよなぁ。
2010-06-05 01:01:30Haskellには入出力という[現象を表現するの通常命令プログラマが命令型言語の持つ]副作用[という性質を利用して表現するのと同等の表現を行う手段]はある。
2010-06-05 01:14:37(続き) だからこそ、Haskellは参照透明ということになっているわけで。だけど、@kazu_yamamoto さんの「Haskellには入出力という副作用はある」と「副作用は、参照透明性を破るものです」を合わせると、Haskellは参照透明でないことになってしまって……
2010-06-05 01:19:28(続き) 「命令型プログラマにとって入出力は副作用」というのはまだ受け入れられるけど、Haskellが参照透明でないというのは流石にちょっと受け入れがたいです。 > @kazu_yamamoto
2010-06-05 01:23:25勝手な想像ですが、命令プログラマにとっては、入出力がある=副作用がある=参照透明性がない なので、「Haskellには副作用ない」「Haskellは参照透明である」は関数プログラマに取っては正しくとも命令プログラマに対する説明としては間違いということだと思う。
2010-06-05 01:28:45大前提「副作用とは参照透明性を破壊するもの」、小前提「入出力は参照透明性を破壊する」、結論「入出力は副作用」という構造?
2010-06-05 01:44:52同意 RT @nobsun: だとすると、大前提はそのまま認めるとしても、小前提は付帯条件なしでは認められないなぁ。
2010-06-05 01:52:55.@nobsun 私の意見は、「入出力がある=副作用がある」というときの副作用は命令型プログラマにとっての副作用で、「副作用がある=参照透明性がない」というときの副作用は関数型プログラマにとっての副作用なので、これをそのままつなげるのは変、という感じ。
2010-06-05 02:12:35kyokuron-ist : キョクロニストな bot 「いのちがあれば、お目にかかりましょう」: You can hear my tweets when I am still alive. I'd live a short.