>>953
そうなんですか? fibまで貰った時点で多相じゃないような。

let rec は関数宣言にしか使えないので、
let rec f n = ... もしくは let rec f = fun n -> ... みたいな
形でしか宣言できないという説はどうでしょうか?

# let rec fib = (fun n -> match n with 0 -> 0 | 1 -> 1 | _ -> (fib (n - 1)) + (fib (n - 2)));;
当然OK

# let rec fib = (fun x -> x) (fun n -> match n with 0 -> 0 | 1 -> 1 | _ -> (fib (n - 1)) + (fib (n - 2)));;
右辺の第一項は 'a -> 'a 第二項は int -> int なので右辺は int -> int になりますが明示的でないのでNG

あのエラーメッセージはどうかと思いますが。