fun merge(xs,[]) = xs | merge([],ys) = ys | merge(x::xs,y::ys) = if x < y then x::merge(xs,y::ys) else y::merge(x::xs,ys); fun msort([]) = [] | msort([x]) = [x] | msort(lst) = let fun loop([],a,b) = merge(msort(a),msort(b)) | loop(x::xs,a,b) = loop(xs,b,x::a) in loop(lst,[],[]) end;