{-# htermination (compareOrdering :: Ordering -> Ordering -> Ordering) #-} import qualified Prelude data MyBool = MyTrue | MyFalse data List a = Cons a (List a) | Nil data Ordering = LT | EQ | GT ; compare0 x y MyTrue = GT; otherwise :: MyBool; otherwise = MyTrue; compare1 x y MyTrue = LT; compare1 x y MyFalse = compare0 x y otherwise; ltEsOrdering :: Ordering -> Ordering -> MyBool ltEsOrdering LT LT = MyTrue; ltEsOrdering LT EQ = MyTrue; ltEsOrdering LT GT = MyTrue; ltEsOrdering EQ LT = MyFalse; ltEsOrdering EQ EQ = MyTrue; ltEsOrdering EQ GT = MyTrue; ltEsOrdering GT LT = MyFalse; ltEsOrdering GT EQ = MyFalse; ltEsOrdering GT GT = MyTrue; compare2 x y MyTrue = EQ; compare2 x y MyFalse = compare1 x y (ltEsOrdering x y); esEsOrdering :: Ordering -> Ordering -> MyBool esEsOrdering LT LT = MyTrue; esEsOrdering LT EQ = MyFalse; esEsOrdering LT GT = MyFalse; esEsOrdering EQ LT = MyFalse; esEsOrdering EQ EQ = MyTrue; esEsOrdering EQ GT = MyFalse; esEsOrdering GT LT = MyFalse; esEsOrdering GT EQ = MyFalse; esEsOrdering GT GT = MyTrue; compare3 x y = compare2 x y (esEsOrdering x y); compareOrdering :: Ordering -> Ordering -> Ordering compareOrdering x y = compare3 x y;