関数型言語とオブジェクト指向リターンズ

 関数型言語とオブジェクト指向,およびOCamlの"O"についてを読んで、関数型言語オブジェクト指向について、また考えた。
 これを読んでまず思ったのは、「結局、状態はどうやって表現するの?」という事だった。ちょっと前にオブジェクト指向は副作用がどうのという話には関係ないとか自分で書いておきながらこれだ。頭が悪いにもほどがある。
 状態を表現するには、状態を保存するオブジェクトを作っておいて、それを更新したものを返せば良い。例えば、テキストエディタなら、(let1 new-textbuffer (edit-text-buffer old-textbuffer keystroke)...みたいな感じ。こうすると、edit-text-bufferの中では破壊的代入を使わないで済む。ただ、この例でも一番外側では破壊的代入が起こっているけれど。これはまぁ、仕方がない。
 いろいろ考えると、結局、副作用は必要だとしか思えない。ただ、必要な副作用と不要な副作用があって、不要な副作用はバグを招くかもしれないからやめときましょう、と。