{-# htermination (maxOrdering :: Ordering -> Ordering -> Ordering) #-} import qualified Prelude data MyBool = MyTrue | MyFalse data List a = Cons a (List a) | Nil data Ordering = LT | EQ | GT ; 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; max0 x y MyTrue = x; otherwise :: MyBool; otherwise = MyTrue; max1 x y MyTrue = y; max1 x y MyFalse = max0 x y otherwise; max2 x y = max1 x y (ltEsOrdering x y); maxOrdering :: Ordering -> Ordering -> Ordering maxOrdering x y = max2 x y;