I'm not sure that it's the source of the issue, but is this exponential behaviour caused by the unification algorithm? Nicolas Braud-Santoni a écrit : >On 25/01/2014 19:39, Matej Kosik wrote: >> Hi, >> >> I am using ocaml 4.01.0. >> >> I have noticed the following strange behavior: >> [...] >> >> I would like to ask: is this is a known phenomenon? >> ------------------------------------------------------------------- >> The context: >> >> I have started to apply the advice given here: >> https://sympa.inria.fr/sympa/arc/caml-list/2013-11/msg00207.html >> That way I've got terms with which ocaml{c,opt} struggles. > >Hi, > >It is a well-known problem that type inference is exponential-type[0] >This worst-case behaviour is triggered when you have deeply nested -> >in >the types. > >For an example, consider : > >let f x y = y x x in >let g x = f (f x) in >let h x = g (g x) in >let h x = h (h x) in >let h x = h (h x) in >h;; (* This actually causes a stack overflow *) > > >Unfortunately, there isn't (as far as I know) a silver bullet. >Avoiding deep nesting of combinators mights be a solution, though. >I usually also helps with readability. > >Regards, >Nicolas > >[0] under ETH, probably, but I don't currently remember. -- Simon