OCamlで ('a -> 'a) -> 'a という型のY-combinatorを定義することは出来るのでしょうか。 let fix = fun f -> (fun x -> f (fun y -> x x y)) (fun x -> f (fun y -> x x y)) や let rec fix f = f(fun x -> fix f x) はどうしても、 (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b という型になってしまいます。(遅延評価をするHaskellでは問題なく書けるのですが) これだと,TAPLのP144にある,以下の相互再帰が型エラーで書けません。 let ff ieio = {iseven = (fun x -> if x=0 then true else ieio.isodd (x-1)); isodd = (fun x -> if x=0 then false else ieio.iseven (x-1))}