I understood that MLton was mostly about performance. It does whole program optimisation and is prepared (or does?) monomorphise just about everything, and applies all of your functors at compile time, so that you've got something more like C++ templates but well-typed.
> SML/NJ's heap2exec was a bit clunky compared to the others.
Unlike the others, SML/NJ implements call/cc, so it's going to need to do something funkier.
SMLofNJ.Cont.callcc
> val it = fn : ('a ?.Cont.cont -> 'a) -> 'a