HIMA3 開催のご案内

第3回 HIMA(Haskell Internet Meeting Anytime)を12月13日(日) 19:00〜22:00 に開催いたします.HIMAはHaskellプログラミングに興味をもつ人が,とりとめなく,おしゃべりをするという会です.一応のお題はありますが,Haskellの知識経験の有無深浅にかかわらず,興味のあるかたはご参加ください.もちろん,ROMあり,茶々ありです.今回は以下の要領で開催します.

  • 名称: HIMA 3
  • 日時: 2009年12月13日(日曜日) 19:00〜22:00
  • 場所: http://chaton.haskell.jp/hima/ (開始30分前にOPEN)
  • 幹事: nobsun
  • お題: 「副作用」
  • 動機: 「Haskellには副作用がないので並列プログラミングに適する」という宣伝がある一方で,命令プログラマによってくりかえされる質問に「Haskellには副作用がないのにどうしてゲームが書けるのか」というのがあります.これに納得のいく説明というのを聞いたことがない気がしています.どのような説明なら,質問者も回答者も納得できるでしょうか.

副作用(side-effect)をめぐって

Haskellプログラミングを始めようとしているプログラマに「Haskellには副作用があるのか」という質問をされると,「ある」と答えるHaskellerと「ない」と答えるHaskellerがいるらしい(私は「ない」と答える派).これでは,「いったいどっちが本当?」ということになる.すこし慎重な人は「Haskellには副作用はないけど,副作用を表現はできる」と答えるらしい.それでもやっぱり,「副作用を表現?それと副作用はどう違うの?結局,どっち?」ということになる.

この話の通じ難さは,質問者と回答者とが「副作用」という言葉の意味を共有していないことによる.質問者の考えている「副作用」と回答者の考えている「副作用」の意味の違いを明らかにしていないので,理解できないし,してもらえないように思う.

Haskellと副作用の関係は,どう説明すれば理解でき,人に伝えられるかを徒然に考えてみる.

Haskellには副作用がないのにどうしてゲームが書けるのか

こういう質問なら,おそらくは,「副作用=入出力」「入出力=ユーザのボタン操作,画面でのキャラクタの動きを表示」という前提である.Haskellでは入出力を表現できるし,ゲームを書ける.現にHaskellで書いたゲームはいくつも存在している.「入出力を表現できること」と「副作用があること」とを同じことだという前提を認めて歩み寄るなら,

Haskellには副作用がない」というのは間違いであって,「Haskellには副作用がある」のでゲームが書ける

という回答がなりたつ.「Haskell」に副作用はあるのかという問に「ある」と答えるHaskellerならこういう立場をとるだろう.

ただ,この答で質問者は納得できるだろうか.「純粋関数型言語Haskellには副作用はなく,並列プログラムの記述に最も適している」などという宣伝を散々聞かされたあとに,「Haskellには副作用はある」といわれて,ずッコケたりしないだろうか.あの宣伝はなんだったのか.看板に偽りがあったのか.
Haskellerしても,前提条件付きとはいえ「Haskellには副作用がある」という言い方に違和感を感じないだろうか.

Haskellには副作用がないのにどうして入出力が表現できるのか

質問者が質したかったのは,こちらではなかったのだろうか.

(つづきは後で書く…あるいはHIMA3へ)