Comparable mixin

interface ComparableMixin[A: Comparable[A] #read] is Comparable[A]
  fun compare(that: box->A): Compare

  fun lt(that: box->A): Bool =>
    compare(that) is Less

  fun le(that: box->A): Bool =>
    let c = compare(that)
    (c is Less) or (c is Equal)

  fun gt(that: box->A): Bool =>
    compare(that) is Greater

  fun ge(that: box->A): Bool =>
    let c = compare(that)
    (c is Greater) or (c is Equal)

  fun eq(that: box->A): Bool =>
    compare(that) is Equal

  fun ne(that: box->A): Bool =>
    not eq(that)