1 type Ordering = 2 | Less 3 | Equal 4 | Greater 5 6 class Compare = 7 def compare (other : Self) : Ordering 8 9 def (>) (rhs : Self) = 10 let result = compare rhs 11 result == Ordering/Greater 12 13 def (>=) (rhs : Self) = 14 let result = compare rhs 15 result <> Ordering/Less 16 17 def (<) (rhs : Self) = 18 let result = compare rhs 19 result == Ordering/Less 20 21 def (<=) (rhs : Self) = 22 let result = compare rhs 23 result <> Ordering/Greater 24 25 is Comparable 26 27 type (T1, T2) u v where T1 : Comparable 28 T2 : Comparable 29 def compare (other : Self) = when 30 u > other.u -> Ordering/Greater 31 u < other.u -> Ordering/Less 32 v > other.v -> Ordering/Greater 33 v < other.v -> Ordering/Less 34 else -> Ordering/Equal 35 36 is Compare 37 38 type String 39 def compare (other : String) : Ordering = 40 let min_length = length.min other.length 41 for i = 0 until min_length do 42 let l = self[i] 43 let r = other[i] 44 if l > r then 45 return Ordering/Greater 46 else if l < r then 47 return Ordering/Less 48 when 49 length > other.length -> Ordering/Greater 50 length < other.length -> Ordering/Less 51 else -> Ordering/Equal 52 53 is Compare 54