((.).(.)) が書けなくなるように、Haskellの仕様を削ることを考えよう。


(.) が定義されるなら ((.).(.)) も定義できるんだから
まず (.) をPreludeから排除する必要がある。

しかし、ただPreludeから削除しただけでは
ユーザが勝手に定義するのは止められないから、
演算子の自由な定義も削る必要がある。

さらに、ユーザ定義演算子を禁止しても
d :: (b -> c) -> (a -> b) -> a -> c みたいな関数があれば
d d d と書けてしまうので、高階関数も仕様から削る必要がある。