osiire’s blog

ふしぎなそふとやさん

ポイントフリースタイル的ななにか

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