type Comparison = fun (T, T) : Int fun naturalOrder>(a : T, b : T) : Int = a.compareTo(b) fun castingNaturalOrder(a : Object, b : Object) : Int = (a as Comparable).compareTo(b as Comparable) enum class ComparisonResult { LS; EQ; GR } type MatchableComparison = fun (T, T) : ComparisonResult fun asMatchableComparison(cmp : Comparison) : MatchableComparison = {(a, b) => val res = cmp(a, b) if (res == 0) return ComparisonResult.EQ if (res < 0) return ComparisonResult.LS return ComparisonResult.GR }