mediabus-0.3.0.1: src/Data/MediaBus/Basics/OrderedBy.hs
-- | Value level 'Ord'er. Sometimes values stored in e.g. 'Data.Set.Set's have
-- an 'Ord' instance, which does not represent the desired order. In that case
-- use this product type to pass a value along with the value to be for
-- comparison by the 'Eq' and 'Ord' instances.
module Data.MediaBus.Basics.OrderedBy ( OrderedBy(..) ) where
-- | A wrapper around a /payload/ value paired with a value to be used when /comparing/ that payload value.
data OrderedBy cmp a = MkOrderedBy
{ orderedByComparableValue :: cmp -- ^ Value to compare
, orderedByValue :: a -- ^ actual value
}
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