ポイントフリースタイル的ななにか
はOCamlでは無理なのですよ。(例によって狭い世界では)みんな知ってるとは思うけど。なぜ無理かというと、let多相に制限があるからで、なぜ制限があるかというと副作用を許しているから。
# let filter x = List.filter ((<>) x);; (* これはまぁ大丈夫 *) val filter : 'a -> 'a list -> 'a list = <fun> # let ($) f g x = f (g x);; (* 関数合成 *) val ( $ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun> # let filter = List.filter $ (<>);; (* 無理だから! *) val filter : '_a -> '_a list -> '_a list = <fun>
じゃぁ、何が許されて何が無理なのよ?という話はまた今度。いま仕事中だし :P