Excerpts from loup.vaillant's message of Tue Feb 26 15:34:37 +0100 2008: > 2008/2/26, Damien Doligez : > > The restriction is documented in section 7.3 of the reference manual, > > and it's here to make recursive definitions work correctly under > > eager evaluation. > > OK, I got it. By the way, replacing "couple" by "couple ()" does the trick: > > # let loop f a = > let rec couple () = f (a, snd (couple ())) in > fst (couple ());; > val loop : ('a * 'b -> 'c * 'b) -> 'a -> 'c = > > Now, I have yet to figure out the purpose of this so called "fixpoint > operator" (and if the above will work at all :-). A picture can helps... +---------+ a>-| |->c | x | b>-| |->b +---------+ +---------+ a>-| |->c | y | +->-| |->-+ | +---------+ | +--------b--------+ loop x = y Regards, -- Nicolas Pouillard aka Ertai