pqueue-1.4.3.0: src/Data/PQueue/Internals/Down.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE BangPatterns #-}
module Data.PQueue.Internals.Down where
import Control.DeepSeq (NFData(rnf))
import Data.Foldable (Foldable (..))
#if __GLASGOW_HASKELL__
import Data.Data (Data)
#endif
newtype Down a = Down { unDown :: a }
#if __GLASGOW_HASKELL__
deriving (Eq, Data)
#else
deriving (Eq)
#endif
instance NFData a => NFData (Down a) where
rnf (Down a) = rnf a
instance Ord a => Ord (Down a) where
Down a `compare` Down b = b `compare` a
Down a <= Down b = b <= a
Down a >= Down b = b >= a
Down a < Down b = b < a
Down a > Down b = b > a
instance Functor Down where
fmap f (Down a) = Down (f a)
instance Foldable Down where
foldr f z (Down a) = a `f` z
foldl f z (Down a) = z `f` a
foldr' f !z (Down a) = a `f` z
foldl' f !z (Down a) = z `f` a