module Acme.MiscOrder (
Contrarian(..),
LuckySortOrder(..),
Perverse(..),
Fiendish(..)
) where
import Control.Monad
import System.Random
import System.IO.Unsafe(unsafePerformIO)
reverseOrdering :: Ordering -> Ordering
reverseOrdering LT = GT
reverseOrdering EQ = EQ
reverseOrdering GT = LT
newtype Contrarian a = Contrarian a
instance Eq a => Eq (Contrarian a) where
(==) (Contrarian x) (Contrarian y) = (/=) x y
newtype LuckySortOrder a = LuckySortOrder a deriving (Eq)
instance Ord a => Ord (LuckySortOrder a) where
(<=) (LuckySortOrder x) (LuckySortOrder y) = True
newtype Fiendish a = Fiendish a deriving (Eq, Show)
instance Eq a => Ord (Fiendish a) where
compare x y
| x == y = EQ
| unsafePerformIO randomIO = LT
| otherwise = GT
newtype Perverse a = Perverse a
instance Eq (Perverse a) where
(==) _ _ = True
instance Ord (Perverse a) where
compare _ _ = EQ