module Isort; data Nat = Zero | S(Nat); def Bool leq(Nat x, Nat y) = case x { Zero => True; S(xP) => case y { Zero => False; S(yP) => leq(xP, yP); }; }; def List insert(ord)(Nat x, List ys) = case ys { Nil => Cons(x,Nil); Cons(y,ysP) => case ord(x,y) { True => Cons(x, Cons(y, ysP)); False => Cons(y, insert(x,ysP)); }; }; def List sort(ord)(List ys) = case ys { Nil => Nil; Cons(y, ysP) => insert(ord)(y, sort(ysP)); }; def List start(List ys) = sort(leq)(ys); { }