List Sort
¥abstract class List {
¥  abstract Object getFirst();   
¥  abstract List getRest();
¥  abstract List insert(Object e);
¥  abstract List sort();
¥  abstract String toStringHelp();
¥  abstract List sort();
¥}
¥
¥class Empty extends List {
¥  static Empty ONLY = new Empty(); // singleton pattern
¥  private Empty() {}
¥  Object getFirst() { throw new IllegalArgumentException(
¥   "first requires a non Empty List");
¥  }
¥  List getRest() { throw new IllegalArgumentException(
¥   "rest requires a non Empty List");
¥  }
¥  List sort() { return Empty.ONLY; }
¥  List insert(Object e) { return new Cons(e,Empty.ONLY); }
¥  public String toString() { return "()"; }
¥  String toStringHelp() { return ""; }
¥}