Yo,
I don't know if this helps, but I can create arbitrary compilation times with very small code samples:
let sink (a,f) = f a
let base = ()
let finish () = ()
let step () = ()
let fold (a,f) g = g (a,f)
let step0 h (a,f) = fold (h a,f)
let f z = fold (base, finish) z
let a z = step0 step z
let () =
let () = f
a a a a
a a a a
a a a a
a a a a
a a a a
a a a
sink
in
();;
$> time ocamlc vararg.ml
real 1m9.372s
user 1m9.264s
sys 0m0.044s
Try
adding a few a's and see what that gives.
have fun,
Romain.
PS
I'm quite clueless about what's going on exactly. I just stumbled onto this tinkering around with MLton's fold vararg solutions.