On 04/28/2011 06:06 AM, rixed@happyleptic.org wrote: > Although "let rec f = f" is unsound and rejected as expected, > why is "let rec f : unit -> unit = f" also rejected, since it seams > trivially equivalent to "let rec f () : unit = f ()" (which is > accepted) ? Eta-conversion (transforming "let f = f into let f () = f ()") is unsound in the general case. Indeed, take for example: let f () = print_string "titi"; function () -> print_string "toto" Is "let g = f ()" equivalent to "let g () = f () ()" ? No. So, no eta-expansion is ever performed using only type information. Fabrice