mediabus-0.3.0.0: src/Data/MediaBus/Basics/OrderedBy.hs
-- | Value level 'Ord'er. Sometimes values are stored in e.g. 'Data.Set.Set's
-- and the default 'Ord' instance isn't what we want. In that case it would be
-- great to pass the comparison as an explicit function.
module Data.MediaBus.Basics.OrderedBy ( OrderedBy(..) ) where
-- | A wrapper around a value (to be compared) and a function to the value that
-- shall be compared against.
data OrderedBy cmp a = MkOrderedBy
{ orderedByComparableValue :: cmp
, orderedByValue :: a
}
instance Eq cmp => Eq (OrderedBy cmp a) where
MkOrderedBy cmpa _ == MkOrderedBy cmpb _ = cmpa == cmpb
instance Ord cmp => Ord (OrderedBy cmp a) where
MkOrderedBy cmpa _ `compare` MkOrderedBy cmpb _ = cmpa `compare` cmpb