[FAQ]Haskellには副作用があるのか、ないのか
.@masahiro_sakai 小前提の付帯条件は例えば「C言語で書けば」ということで、まさにそういうこと http://twitter.com/masahiro_sakai/status/15430153545
2010-06-05 05:42:44そうではなくて、用語を正確に使って説明しているはずなのにわかりにくい、というのが問題なんです。正確な言葉を使っても、不正確な用語を使った説明の方がわかりやすい、と思わせてしまうようなわかりにくい説明をしているのが問題なんです。
2010-06-05 06:03:27@nobsun @ikegami__ 用語の正確さとわかりやすさは、関係はあるけれど、一致しているわけではなさそう。一致しているほうが望ましいでしょうけれど。
2010-06-05 06:33:23たぶん、Haskellに副作用がある、と主張したい理由は、Haskellって副作用ないとかいってるけど入出力のための裏技でモナドってのがあるんだぜ、という誤解をとくためだと思う。
2010-06-05 06:44:56Haskellには副作用がある、という説明は、そういう誤解をする人に対して、あなたが考えているような意味なら副作用はある、といってるんですよね、きっと。
2010-06-05 06:47:56まあ、だから、モナドを知りたかったら副作用とか入出力とか眠いこといってないで抽象化のための便利な道具のひとつとして素直に見てごらん、というふうに導入したいだけのとことなのではないかと。
2010-06-05 06:53:51という立場なので「副作用」という用語は正確な定義に基づくものではなく一般にHaskellを使わない人が「Haskellは…」という文脈で語るときに出てきがちな意味で使ってるよ、ということは陽に示したほうがいいと思う。
2010-06-05 06:56:58.@hyuki 自分にとって新しいことについて「あっ。わかった」と思うのは、そこからいろいろなことが首尾一貫して説明できると直感する瞬間なんだろうと思います。首尾一貫を確保するのは正確な用語使いが必要条件だと思います。十分条件ではないので、足りない分をなんとかしたいと思っています
2010-06-05 07:08:37C だって、表現している時点で終わって、動かさないなら、副作用はないですね。と昔言って、何か返事をもらった気もしますが、納得できなかったような気もします。 @nobsun プログラム(算譜)は何かを表現していますよね
2010-06-05 12:59:33.@masahiro_sakai Haskell のすべてが参照透明であるのであれば、IORef/STRef をどう説明しますか?
2010-06-05 13:06:32タイプ A の実行順序は処理系が決めます。どの順番で実行しても結果は同じだからです。(実行順によってはエラーを引き起こす場合は除く。) Haskell では、遅延評価という評価戦略で実行順序を決めます。
2010-06-05 13:13:27命令型言語プログラマーは、タイプBの関数を副作用があると表現することがあります。副作用をこの意味で使うなら、Haskell にも副作用があります。
2010-06-05 13:16:27このような関数はHaskellには存在しません。putStr は値を返す以外の仕事はしません。@kazu_yamamoto http://twitter.com/kazu_yamamoto/status/15464860314
2010-06-05 14:27:39@nobsun いや、IO () を値を返すというのはさすがにvoidでもaxレジスタには値が入っているというくらいの無茶ぶりでしょう。定義ではなく作用に注目するのがアクションというやつではないかな。
2010-06-05 14:45:21@arton putStr は 文字列に作用して IO () という値を返すというのはなんの無茶もないですよね。
2010-06-05 14:52:01.@nobsun putStr は IO () という値を返す以外に何もしないんですか? すると、プリントされる文字は誰がやった仕事ですか?
2010-06-05 14:52:19