One other thing I noticed when reading contify is the definition of partition.
Here is a faster one.
 
fun partition (l, p) =
   List.fold
   (l, {no = [], yes = []}, fn (x, {no, yes}) =>
    if p x
       then {no = no, yes = x :: yes}
    else {no = x :: no, yes = yes})
If order matters, then add a rev before calling it. 
I'm adding this to list.sig and list.sml (it used to be there, but got deleted
during some reorg).