純粋関数型とオブジェクト指向

純粋関数型とオブジェクト指向はやっぱダメなんじゃないかと思うこの頃です。オブジェクト指向をなんと解釈するかによってなんとでもなるので、かみ合った議論がしにくいですが。
こう考えるのは、SICPの影響だと思うのですが、純粋関数型とオブジェクト指向は「状態」を扱う際のアプローチに根本的な違いがあって、根源的なところで整合性が取れないのではないかと思っています。つまり、オブジェクト指向では、状態をオブジェクトの内部に持ち、代入によって書き換えることで状態の変化を表現するのに対し、純粋関数型では、状態の推移をストリーム(遅延リスト)として表現して、代入の存在を認めていないことの折り合いがどうつくのか、つける必要があるのかが分からないのです。
Haskellモナドは、一見副作用があるっぽいですが、あれはそんな風に見える構文であるだけですし、Concurrent Cleanの一意性もそれは同じ。見た目をオブジェクト指向っぽくしても、それはただの見かけだけでしかないのではないかと思います。
ただ、もうちょっと考え中。

      • -

ただし、関数型とオブジェクト指向なら、特に相性の問題はないのではないかと。