-- | This module contains any objects relating to order theory module SubHask.Algebra.Ord where -- import Control.Monad import qualified Prelude as P import SubHask.Algebra import SubHask.Category import SubHask.Mutable import SubHask.SubType import SubHask.Internal.Prelude import SubHask.TemplateHaskell.Deriving import Debug.Trace -- newtype Swap a = Swap a -- deriving (Read,Show,P.Eq) -- -- instance P.Ord a => P.Ord (Swap a) where -- a <= b = b P.<= a -- -- newtype With a = With a -- deriving (Read,Show) -- instance Show a => Show (With a) -- instance Read a => Read (With a) -- instance NFData a => NFData (With a) -- deriveHierarchy ''With [ ''Enum, ''Boolean, ''Ring, ''Metric ] -- instance Eq a => P.Eq (With a) where -- (==) = undefined -- (/=) = undefined -- -- instance (P.Eq a, Ord a) => P.Ord (With a) where -- -- compare = undefined -- -- (<=) = undefined -- compare (With a1) (With a2) -- = trace "compare" $ P.EQ -- -- = if a1 == a2 -- -- then P.EQ -- -- else if a1 < a2 -- -- then P.LT -- -- else P.GT ------------- newtype WithPreludeOrd a = WithPreludeOrd { unWithPreludeOrd :: a } deriving Storable instance Show a => Show (WithPreludeOrd a) where show (WithPreludeOrd a) = show a -- | FIXME: for some reason, our deriving mechanism doesn't work on Show here; -- It causes's Set's show to enter an infinite loop deriveHierarchyFiltered ''WithPreludeOrd [ ''Eq_, ''Enum, ''Boolean, ''Ring, ''Metric ] [ ''Show ] instance Eq a => P.Eq (WithPreludeOrd a) where {-# INLINE (==) #-} a==b = a==b instance Ord a => P.Ord (WithPreludeOrd a) where {-# INLINE (<=) #-} a<=b = a<=b