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.