signature CML_UTIL = sig val apply : ('a -> 'b) -> 'a -> 'b end; structure U :> CML_UTIL = struct fun apply f x = let val result = ref (fn () => raise Match) val _ = RunCML.doit ((fn () => let val r = f x in result := (fn () => r) end), NONE) in (!result) () end end;