datatype ('a) list = Cons of 'a * ('a) list | Nil ; fun APPEND v3 = (fn v4 => (case v3 of Nil => v4 | (Cons (v2, v1)) => (Cons (v2, ((APPEND v1) v4))))) ; datatype ('a, 'b) prod = Pair of 'a * 'b ; fun PART v3 = (fn v4 => (fn v5 => (fn v6 => (case v4 of Nil => (Pair (v5, v6)) | (Cons (v2, v1)) => (if (v3 v2) then ((((PART v3) v1) (Cons (v2, v5))) v6) else ((((PART v3) v1) v5) (Cons (v2, v6)))))))) ; val PARTITION = (fn v1 => (fn v2 => ((((PART v1) v2) Nil) Nil))) ; fun QSORT v7 = (fn v8 => (case v8 of Nil => Nil | (Cons (v6, v5)) => let val v3 = ((PARTITION (fn v4 => ((v7 v4) v6))) v5) in (case v3 of (Pair (v2, v1)) => ((APPEND ((APPEND ((QSORT v7) v2)) (Cons (v6, Nil)))) ((QSORT v7) v1))) end )) ;