{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE GeneralizedNewtypeDeriving #-}------------------------------------------------------------------------------- |-- Module : Data.Ord-- Copyright : (c) The University of Glasgow 2005-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : stable-- Portability : portable---- Orderings-------------------------------------------------------------------------------moduleData.Ord(Ord (..),Ordering (..),Down (..),comparing ,clamp ,)whereimportData.Bits (Bits ,FiniteBits ,complement )importForeign.Storable (Storable )importGHC.Ix (Ix )importGHC.Base importGHC.Enum (Bounded (..),Enum (..))importGHC.Float (Floating ,RealFloat )importGHC.Num importGHC.Read importGHC.Real (Fractional ,Real ,RealFrac )importGHC.Show -- $setup-- >>> import Prelude-- |-- > comparing p x y = compare (p x) (p y)---- Useful combinator for use in conjunction with the @xxxBy@ family-- of functions from "Data.List", for example:---- > ... sortBy (comparing fst) ...comparing ::(Ord a )=>(b ->a )->b ->b ->Ordering comparing :: forall a b. Ord a => (b -> a) -> b -> b -> Ordering comparing b -> a p b x b y =a -> a -> Ordering forall a. Ord a => a -> a -> Ordering compare (b -> a p b x )(b -> a p b y )-- |-- > clamp (low, high) a = min high (max a low)---- Function for ensuring the value @a@ is within the inclusive bounds given by-- @low@ and @high@. If it is, @a@ is returned unchanged. The result-- is otherwise @low@ if @a <= low@, or @high@ if @high <= a@.---- When clamp is used at Double and Float, it has NaN propagating semantics in-- its second argument. That is, @clamp (l,h) NaN = NaN@, but @clamp (NaN, NaN)-- x = x@.---- >>> clamp (0, 10) 2-- 2---- >>> clamp ('a', 'm') 'x'-- 'm'clamp ::(Ord a )=>(a ,a )->a ->a clamp :: forall a. Ord a => (a, a) -> a -> a clamp (a low ,a high )a a =a -> a -> a forall a. Ord a => a -> a -> a min a high (a -> a -> a forall a. Ord a => a -> a -> a max a a a low )-- | The 'Down' type allows you to reverse sort order conveniently. A value of type-- @'Down' a@ contains a value of type @a@ (represented as @'Down' a@).---- If @a@ has an @'Ord'@ instance associated with it then comparing two-- values thus wrapped will give you the opposite of their normal sort order.-- This is particularly useful when sorting in generalised list comprehensions,-- as in: @then sortWith by 'Down' x@.---- >>> compare True False-- GT---- >>> compare (Down True) (Down False)-- LT---- If @a@ has a @'Bounded'@ instance then the wrapped instance also respects-- the reversed ordering by exchanging the values of @'minBound'@ and-- @'maxBound'@.---- >>> minBound :: Int-- -9223372036854775808---- >>> minBound :: Down Int-- Down 9223372036854775807---- All other instances of @'Down' a@ behave as they do for @a@.---- @since 4.6.0.0newtypeDown a =Down {forall a. Down a -> a getDown ::a -- ^ @since 4.14.0.0}deriving(Down a -> Down a -> Bool (Down a -> Down a -> Bool) -> (Down a -> Down a -> Bool) -> Eq (Down a) forall a. Eq a => Down a -> Down a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: forall a. Eq a => Down a -> Down a -> Bool == :: Down a -> Down a -> Bool $c/= :: forall a. Eq a => Down a -> Down a -> Bool /= :: Down a -> Down a -> Bool Eq -- ^ @since 4.6.0.0,Integer -> Down a Down a -> Down a Down a -> Down a -> Down a (Down a -> Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Integer -> Down a) -> Num (Down a) forall a. Num a => Integer -> Down a forall a. Num a => Down a -> Down a forall a. Num a => Down a -> Down a -> Down a forall a. (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (Integer -> a) -> Num a $c+ :: forall a. Num a => Down a -> Down a -> Down a + :: Down a -> Down a -> Down a $c- :: forall a. Num a => Down a -> Down a -> Down a - :: Down a -> Down a -> Down a $c* :: forall a. Num a => Down a -> Down a -> Down a * :: Down a -> Down a -> Down a $cnegate :: forall a. Num a => Down a -> Down a negate :: Down a -> Down a $cabs :: forall a. Num a => Down a -> Down a abs :: Down a -> Down a $csignum :: forall a. Num a => Down a -> Down a signum :: Down a -> Down a $cfromInteger :: forall a. Num a => Integer -> Down a fromInteger :: Integer -> Down a Num -- ^ @since 4.11.0.0,NonEmpty (Down a) -> Down a Down a -> Down a -> Down a (Down a -> Down a -> Down a) -> (NonEmpty (Down a) -> Down a) -> (forall b. Integral b => b -> Down a -> Down a) -> Semigroup (Down a) forall b. Integral b => b -> Down a -> Down a forall a. Semigroup a => NonEmpty (Down a) -> Down a forall a. Semigroup a => Down a -> Down a -> Down a forall a b. (Semigroup a, Integral b) => b -> Down a -> Down a forall a. (a -> a -> a) -> (NonEmpty a -> a) -> (forall b. Integral b => b -> a -> a) -> Semigroup a $c<> :: forall a. Semigroup a => Down a -> Down a -> Down a <> :: Down a -> Down a -> Down a $csconcat :: forall a. Semigroup a => NonEmpty (Down a) -> Down a sconcat :: NonEmpty (Down a) -> Down a $cstimes :: forall a b. (Semigroup a, Integral b) => b -> Down a -> Down a stimes :: forall b. Integral b => b -> Down a -> Down a Semigroup -- ^ @since 4.11.0.0,Semigroup (Down a) Down a Semigroup (Down a) => Down a -> (Down a -> Down a -> Down a) -> ([Down a] -> Down a) -> Monoid (Down a) [Down a] -> Down a Down a -> Down a -> Down a forall a. Semigroup a => a -> (a -> a -> a) -> ([a] -> a) -> Monoid a forall a. Monoid a => Semigroup (Down a) forall a. Monoid a => Down a forall a. Monoid a => [Down a] -> Down a forall a. Monoid a => Down a -> Down a -> Down a $cmempty :: forall a. Monoid a => Down a mempty :: Down a $cmappend :: forall a. Monoid a => Down a -> Down a -> Down a mappend :: Down a -> Down a -> Down a $cmconcat :: forall a. Monoid a => [Down a] -> Down a mconcat :: [Down a] -> Down a Monoid -- ^ @since 4.11.0.0,Eq (Down a) Down a Eq (Down a) => (Down a -> Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> Down a -> (Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Bool) -> (Down a -> Maybe Int) -> (Down a -> Int) -> (Down a -> Bool) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int -> Down a) -> (Down a -> Int) -> Bits (Down a) Int -> Down a Down a -> Bool Down a -> Int Down a -> Maybe Int Down a -> Down a Down a -> Int -> Bool Down a -> Int -> Down a Down a -> Down a -> Down a forall a. Eq a => (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> a -> (Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> Bool) -> (a -> Maybe Int) -> (a -> Int) -> (a -> Bool) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int -> a) -> (a -> Int) -> Bits a forall a. Bits a => Eq (Down a) forall a. Bits a => Down a forall a. Bits a => Int -> Down a forall a. Bits a => Down a -> Bool forall a. Bits a => Down a -> Int forall a. Bits a => Down a -> Maybe Int forall a. Bits a => Down a -> Down a forall a. Bits a => Down a -> Int -> Bool forall a. Bits a => Down a -> Int -> Down a forall a. Bits a => Down a -> Down a -> Down a $c.&. :: forall a. Bits a => Down a -> Down a -> Down a .&. :: Down a -> Down a -> Down a $c.|. :: forall a. Bits a => Down a -> Down a -> Down a .|. :: Down a -> Down a -> Down a $cxor :: forall a. Bits a => Down a -> Down a -> Down a xor :: Down a -> Down a -> Down a $ccomplement :: forall a. Bits a => Down a -> Down a complement :: Down a -> Down a $cshift :: forall a. Bits a => Down a -> Int -> Down a shift :: Down a -> Int -> Down a $crotate :: forall a. Bits a => Down a -> Int -> Down a rotate :: Down a -> Int -> Down a $czeroBits :: forall a. Bits a => Down a zeroBits :: Down a $cbit :: forall a. Bits a => Int -> Down a bit :: Int -> Down a $csetBit :: forall a. Bits a => Down a -> Int -> Down a setBit :: Down a -> Int -> Down a $cclearBit :: forall a. Bits a => Down a -> Int -> Down a clearBit :: Down a -> Int -> Down a $ccomplementBit :: forall a. Bits a => Down a -> Int -> Down a complementBit :: Down a -> Int -> Down a $ctestBit :: forall a. Bits a => Down a -> Int -> Bool testBit :: Down a -> Int -> Bool $cbitSizeMaybe :: forall a. Bits a => Down a -> Maybe Int bitSizeMaybe :: Down a -> Maybe Int $cbitSize :: forall a. Bits a => Down a -> Int bitSize :: Down a -> Int $cisSigned :: forall a. Bits a => Down a -> Bool isSigned :: Down a -> Bool $cshiftL :: forall a. Bits a => Down a -> Int -> Down a shiftL :: Down a -> Int -> Down a $cunsafeShiftL :: forall a. Bits a => Down a -> Int -> Down a unsafeShiftL :: Down a -> Int -> Down a $cshiftR :: forall a. Bits a => Down a -> Int -> Down a shiftR :: Down a -> Int -> Down a $cunsafeShiftR :: forall a. Bits a => Down a -> Int -> Down a unsafeShiftR :: Down a -> Int -> Down a $crotateL :: forall a. Bits a => Down a -> Int -> Down a rotateL :: Down a -> Int -> Down a $crotateR :: forall a. Bits a => Down a -> Int -> Down a rotateR :: Down a -> Int -> Down a $cpopCount :: forall a. Bits a => Down a -> Int popCount :: Down a -> Int Bits -- ^ @since 4.14.0.0,Bits (Down a) Bits (Down a) => (Down a -> Int) -> (Down a -> Int) -> (Down a -> Int) -> FiniteBits (Down a) Down a -> Int forall a. FiniteBits a => Bits (Down a) forall a. FiniteBits a => Down a -> Int forall b. Bits b => (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b $cfiniteBitSize :: forall a. FiniteBits a => Down a -> Int finiteBitSize :: Down a -> Int $ccountLeadingZeros :: forall a. FiniteBits a => Down a -> Int countLeadingZeros :: Down a -> Int $ccountTrailingZeros :: forall a. FiniteBits a => Down a -> Int countTrailingZeros :: Down a -> Int FiniteBits -- ^ @since 4.14.0.0,Fractional (Down a) Down a Fractional (Down a) => Down a -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> (Down a -> Down a) -> Floating (Down a) Down a -> Down a Down a -> Down a -> Down a forall a. Floating a => Fractional (Down a) forall a. Floating a => Down a forall a. Floating a => Down a -> Down a forall a. Floating a => Down a -> Down a -> Down a forall a. Fractional a => a -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> Floating a $cpi :: forall a. Floating a => Down a pi :: Down a $cexp :: forall a. Floating a => Down a -> Down a exp :: Down a -> Down a $clog :: forall a. Floating a => Down a -> Down a log :: Down a -> Down a $csqrt :: forall a. Floating a => Down a -> Down a sqrt :: Down a -> Down a $c** :: forall a. Floating a => Down a -> Down a -> Down a ** :: Down a -> Down a -> Down a $clogBase :: forall a. Floating a => Down a -> Down a -> Down a logBase :: Down a -> Down a -> Down a $csin :: forall a. Floating a => Down a -> Down a sin :: Down a -> Down a $ccos :: forall a. Floating a => Down a -> Down a cos :: Down a -> Down a $ctan :: forall a. Floating a => Down a -> Down a tan :: Down a -> Down a $casin :: forall a. Floating a => Down a -> Down a asin :: Down a -> Down a $cacos :: forall a. Floating a => Down a -> Down a acos :: Down a -> Down a $catan :: forall a. Floating a => Down a -> Down a atan :: Down a -> Down a $csinh :: forall a. Floating a => Down a -> Down a sinh :: Down a -> Down a $ccosh :: forall a. Floating a => Down a -> Down a cosh :: Down a -> Down a $ctanh :: forall a. Floating a => Down a -> Down a tanh :: Down a -> Down a $casinh :: forall a. Floating a => Down a -> Down a asinh :: Down a -> Down a $cacosh :: forall a. Floating a => Down a -> Down a acosh :: Down a -> Down a $catanh :: forall a. Floating a => Down a -> Down a atanh :: Down a -> Down a $clog1p :: forall a. Floating a => Down a -> Down a log1p :: Down a -> Down a $cexpm1 :: forall a. Floating a => Down a -> Down a expm1 :: Down a -> Down a $clog1pexp :: forall a. Floating a => Down a -> Down a log1pexp :: Down a -> Down a $clog1mexp :: forall a. Floating a => Down a -> Down a log1mexp :: Down a -> Down a Floating -- ^ @since 4.14.0.0,Num (Down a) Num (Down a) => (Down a -> Down a -> Down a) -> (Down a -> Down a) -> (Rational -> Down a) -> Fractional (Down a) Rational -> Down a Down a -> Down a Down a -> Down a -> Down a forall a. Fractional a => Num (Down a) forall a. Fractional a => Rational -> Down a forall a. Fractional a => Down a -> Down a forall a. Fractional a => Down a -> Down a -> Down a forall a. Num a => (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a $c/ :: forall a. Fractional a => Down a -> Down a -> Down a / :: Down a -> Down a -> Down a $crecip :: forall a. Fractional a => Down a -> Down a recip :: Down a -> Down a $cfromRational :: forall a. Fractional a => Rational -> Down a fromRational :: Rational -> Down a Fractional -- ^ @since 4.14.0.0,Ord (Down a) Ord (Down a) => ((Down a, Down a) -> [Down a]) -> ((Down a, Down a) -> Down a -> Int) -> ((Down a, Down a) -> Down a -> Int) -> ((Down a, Down a) -> Down a -> Bool) -> ((Down a, Down a) -> Int) -> ((Down a, Down a) -> Int) -> Ix (Down a) (Down a, Down a) -> Int (Down a, Down a) -> [Down a] (Down a, Down a) -> Down a -> Bool (Down a, Down a) -> Down a -> Int forall a. Ord a => ((a, a) -> [a]) -> ((a, a) -> a -> Int) -> ((a, a) -> a -> Int) -> ((a, a) -> a -> Bool) -> ((a, a) -> Int) -> ((a, a) -> Int) -> Ix a forall a. Ix a => Ord (Down a) forall a. Ix a => (Down a, Down a) -> Int forall a. Ix a => (Down a, Down a) -> [Down a] forall a. Ix a => (Down a, Down a) -> Down a -> Bool forall a. Ix a => (Down a, Down a) -> Down a -> Int $crange :: forall a. Ix a => (Down a, Down a) -> [Down a] range :: (Down a, Down a) -> [Down a] $cindex :: forall a. Ix a => (Down a, Down a) -> Down a -> Int index :: (Down a, Down a) -> Down a -> Int $cunsafeIndex :: forall a. Ix a => (Down a, Down a) -> Down a -> Int unsafeIndex :: (Down a, Down a) -> Down a -> Int $cinRange :: forall a. Ix a => (Down a, Down a) -> Down a -> Bool inRange :: (Down a, Down a) -> Down a -> Bool $crangeSize :: forall a. Ix a => (Down a, Down a) -> Int rangeSize :: (Down a, Down a) -> Int $cunsafeRangeSize :: forall a. Ix a => (Down a, Down a) -> Int unsafeRangeSize :: (Down a, Down a) -> Int Ix -- ^ @since 4.14.0.0,Num (Down a) Ord (Down a) (Num (Down a), Ord (Down a)) => (Down a -> Rational) -> Real (Down a) Down a -> Rational forall a. (Num a, Ord a) => (a -> Rational) -> Real a forall a. Real a => Num (Down a) forall a. Real a => Ord (Down a) forall a. Real a => Down a -> Rational $ctoRational :: forall a. Real a => Down a -> Rational toRational :: Down a -> Rational Real -- ^ @since 4.14.0.0,Fractional (Down a) Real (Down a) (Real (Down a), Fractional (Down a)) => (forall b. Integral b => Down a -> (b, Down a)) -> (forall b. Integral b => Down a -> b) -> (forall b. Integral b => Down a -> b) -> (forall b. Integral b => Down a -> b) -> (forall b. Integral b => Down a -> b) -> RealFrac (Down a) forall b. Integral b => Down a -> b forall b. Integral b => Down a -> (b, Down a) forall a. (Real a, Fractional a) => (forall b. Integral b => a -> (b, a)) -> (forall b. Integral b => a -> b) -> (forall b. Integral b => a -> b) -> (forall b. Integral b => a -> b) -> (forall b. Integral b => a -> b) -> RealFrac a forall a. RealFrac a => Fractional (Down a) forall a. RealFrac a => Real (Down a) forall a b. (RealFrac a, Integral b) => Down a -> b forall a b. (RealFrac a, Integral b) => Down a -> (b, Down a) $cproperFraction :: forall a b. (RealFrac a, Integral b) => Down a -> (b, Down a) properFraction :: forall b. Integral b => Down a -> (b, Down a) $ctruncate :: forall a b. (RealFrac a, Integral b) => Down a -> b truncate :: forall b. Integral b => Down a -> b $cround :: forall a b. (RealFrac a, Integral b) => Down a -> b round :: forall b. Integral b => Down a -> b $cceiling :: forall a b. (RealFrac a, Integral b) => Down a -> b ceiling :: forall b. Integral b => Down a -> b $cfloor :: forall a b. (RealFrac a, Integral b) => Down a -> b floor :: forall b. Integral b => Down a -> b RealFrac -- ^ @since 4.14.0.0,Floating (Down a) RealFrac (Down a) (RealFrac (Down a), Floating (Down a)) => (Down a -> Integer) -> (Down a -> Int) -> (Down a -> (Int, Int)) -> (Down a -> (Integer, Int)) -> (Integer -> Int -> Down a) -> (Down a -> Int) -> (Down a -> Down a) -> (Int -> Down a -> Down a) -> (Down a -> Bool) -> (Down a -> Bool) -> (Down a -> Bool) -> (Down a -> Bool) -> (Down a -> Bool) -> (Down a -> Down a -> Down a) -> RealFloat (Down a) Int -> Down a -> Down a Integer -> Int -> Down a Down a -> Bool Down a -> Int Down a -> Integer Down a -> (Int, Int) Down a -> (Integer, Int) Down a -> Down a Down a -> Down a -> Down a forall a. RealFloat a => Floating (Down a) forall a. RealFloat a => RealFrac (Down a) forall a. RealFloat a => Int -> Down a -> Down a forall a. RealFloat a => Integer -> Int -> Down a forall a. RealFloat a => Down a -> Bool forall a. RealFloat a => Down a -> Int forall a. RealFloat a => Down a -> Integer forall a. RealFloat a => Down a -> (Int, Int) forall a. RealFloat a => Down a -> (Integer, Int) forall a. RealFloat a => Down a -> Down a forall a. RealFloat a => Down a -> Down a -> Down a forall a. (RealFrac a, Floating a) => (a -> Integer) -> (a -> Int) -> (a -> (Int, Int)) -> (a -> (Integer, Int)) -> (Integer -> Int -> a) -> (a -> Int) -> (a -> a) -> (Int -> a -> a) -> (a -> Bool) -> (a -> Bool) -> (a -> Bool) -> (a -> Bool) -> (a -> Bool) -> (a -> a -> a) -> RealFloat a $cfloatRadix :: forall a. RealFloat a => Down a -> Integer floatRadix :: Down a -> Integer $cfloatDigits :: forall a. RealFloat a => Down a -> Int floatDigits :: Down a -> Int $cfloatRange :: forall a. RealFloat a => Down a -> (Int, Int) floatRange :: Down a -> (Int, Int) $cdecodeFloat :: forall a. RealFloat a => Down a -> (Integer, Int) decodeFloat :: Down a -> (Integer, Int) $cencodeFloat :: forall a. RealFloat a => Integer -> Int -> Down a encodeFloat :: Integer -> Int -> Down a $cexponent :: forall a. RealFloat a => Down a -> Int exponent :: Down a -> Int $csignificand :: forall a. RealFloat a => Down a -> Down a significand :: Down a -> Down a $cscaleFloat :: forall a. RealFloat a => Int -> Down a -> Down a scaleFloat :: Int -> Down a -> Down a $cisNaN :: forall a. RealFloat a => Down a -> Bool isNaN :: Down a -> Bool $cisInfinite :: forall a. RealFloat a => Down a -> Bool isInfinite :: Down a -> Bool $cisDenormalized :: forall a. RealFloat a => Down a -> Bool isDenormalized :: Down a -> Bool $cisNegativeZero :: forall a. RealFloat a => Down a -> Bool isNegativeZero :: Down a -> Bool $cisIEEE :: forall a. RealFloat a => Down a -> Bool isIEEE :: Down a -> Bool $catan2 :: forall a. RealFloat a => Down a -> Down a -> Down a atan2 :: Down a -> Down a -> Down a RealFloat -- ^ @since 4.14.0.0,Ptr (Down a) -> IO (Down a) Ptr (Down a) -> Int -> IO (Down a) Ptr (Down a) -> Int -> Down a -> IO () Ptr (Down a) -> Down a -> IO () Down a -> Int (Down a -> Int) -> (Down a -> Int) -> (Ptr (Down a) -> Int -> IO (Down a)) -> (Ptr (Down a) -> Int -> Down a -> IO ()) -> (forall b. Ptr b -> Int -> IO (Down a)) -> (forall b. Ptr b -> Int -> Down a -> IO ()) -> (Ptr (Down a) -> IO (Down a)) -> (Ptr (Down a) -> Down a -> IO ()) -> Storable (Down a) forall b. Ptr b -> Int -> IO (Down a) forall b. Ptr b -> Int -> Down a -> IO () forall a. Storable a => Ptr (Down a) -> IO (Down a) forall a. Storable a => Ptr (Down a) -> Int -> IO (Down a) forall a. Storable a => Ptr (Down a) -> Int -> Down a -> IO () forall a. Storable a => Ptr (Down a) -> Down a -> IO () forall a. Storable a => Down a -> Int forall a b. Storable a => Ptr b -> Int -> IO (Down a) forall a b. Storable a => Ptr b -> Int -> Down a -> IO () forall a. (a -> Int) -> (a -> Int) -> (Ptr a -> Int -> IO a) -> (Ptr a -> Int -> a -> IO ()) -> (forall b. Ptr b -> Int -> IO a) -> (forall b. Ptr b -> Int -> a -> IO ()) -> (Ptr a -> IO a) -> (Ptr a -> a -> IO ()) -> Storable a $csizeOf :: forall a. Storable a => Down a -> Int sizeOf :: Down a -> Int $calignment :: forall a. Storable a => Down a -> Int alignment :: Down a -> Int $cpeekElemOff :: forall a. Storable a => Ptr (Down a) -> Int -> IO (Down a) peekElemOff :: Ptr (Down a) -> Int -> IO (Down a) $cpokeElemOff :: forall a. Storable a => Ptr (Down a) -> Int -> Down a -> IO () pokeElemOff :: Ptr (Down a) -> Int -> Down a -> IO () $cpeekByteOff :: forall a b. Storable a => Ptr b -> Int -> IO (Down a) peekByteOff :: forall b. Ptr b -> Int -> IO (Down a) $cpokeByteOff :: forall a b. Storable a => Ptr b -> Int -> Down a -> IO () pokeByteOff :: forall b. Ptr b -> Int -> Down a -> IO () $cpeek :: forall a. Storable a => Ptr (Down a) -> IO (Down a) peek :: Ptr (Down a) -> IO (Down a) $cpoke :: forall a. Storable a => Ptr (Down a) -> Down a -> IO () poke :: Ptr (Down a) -> Down a -> IO () Storable -- ^ @since 4.14.0.0)-- | This instance would be equivalent to the derived instances of the-- 'Down' newtype if the 'getDown' field were removed---- @since 4.7.0.0instance(Read a )=>Read (Down a )wherereadsPrec :: Int -> ReadS (Down a) readsPrec Int d =Bool -> ReadS (Down a) -> ReadS (Down a) forall a. Bool -> ReadS a -> ReadS a readParen (Int d Int -> Int -> Bool forall a. Ord a => a -> a -> Bool > Int 10)(ReadS (Down a) -> ReadS (Down a)) -> ReadS (Down a) -> ReadS (Down a) forall a b. (a -> b) -> a -> b $ \String r ->[(a -> Down a forall a. a -> Down a Down a x ,String t )|(String "Down",String s )<-ReadS String lex String r ,(a x ,String t )<-Int -> ReadS a forall a. Read a => Int -> ReadS a readsPrec Int 11String s ]-- | This instance would be equivalent to the derived instances of the-- 'Down' newtype if the 'getDown' field were removed---- @since 4.7.0.0instance(Show a )=>Show (Down a )whereshowsPrec :: Int -> Down a -> ShowS showsPrec Int d (Down a x )=Bool -> ShowS -> ShowS showParen (Int d Int -> Int -> Bool forall a. Ord a => a -> a -> Bool > Int 10)(ShowS -> ShowS) -> ShowS -> ShowS forall a b. (a -> b) -> a -> b $ String -> ShowS showString String "Down "ShowS -> ShowS -> ShowS forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> a -> ShowS forall a. Show a => Int -> a -> ShowS showsPrec Int 11a x -- | @since 4.6.0.0instanceOrd a =>Ord (Down a )wherecompare :: Down a -> Down a -> Ordering compare (Down a x )(Down a y )=a y a -> a -> Ordering forall a. Ord a => a -> a -> Ordering `compare` a x Down a x < :: Down a -> Down a -> Bool < Down a y =a y a -> a -> Bool forall a. Ord a => a -> a -> Bool < a x Down a x > :: Down a -> Down a -> Bool > Down a y =a y a -> a -> Bool forall a. Ord a => a -> a -> Bool > a x Down a x <= :: Down a -> Down a -> Bool <= Down a y =a y a -> a -> Bool forall a. Ord a => a -> a -> Bool <= a x Down a x >= :: Down a -> Down a -> Bool >= Down a y =a y a -> a -> Bool forall a. Ord a => a -> a -> Bool >= a x min :: Down a -> Down a -> Down a min (Down a x )(Down a y )=a -> Down a forall a. a -> Down a Down (a -> a -> a forall a. Ord a => a -> a -> a max a y a x )max :: Down a -> Down a -> Down a max (Down a x )(Down a y )=a -> Down a forall a. a -> Down a Down (a -> a -> a forall a. Ord a => a -> a -> a min a y a x )-- | Swaps @'minBound'@ and @'maxBound'@ of the underlying type.---- @since 4.14.0.0instanceBounded a =>Bounded (Down a )whereminBound :: Down a minBound =a -> Down a forall a. a -> Down a Down a forall a. Bounded a => a maxBound maxBound :: Down a maxBound =a -> Down a forall a. a -> Down a Down a forall a. Bounded a => a minBound -- | Swaps @'succ'@ and @'pred'@ of the underlying type.---- @since 4.18.0.0instance(Enum a ,Bounded a ,Eq a )=>Enum (Down a )wheresucc :: Down a -> Down a succ =(a -> a) -> Down a -> Down a forall a b. (a -> b) -> Down a -> Down b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap a -> a forall a. Enum a => a -> a pred pred :: Down a -> Down a pred =(a -> a) -> Down a -> Down a forall a b. (a -> b) -> Down a -> Down b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap a -> a forall a. Enum a => a -> a succ -- Here we use the fact that 'comparing (complement @Int)' behaves-- as an order-swapping `compare @Int`.fromEnum :: Down a -> Int fromEnum =Int -> Int forall a. Bits a => a -> a complement (Int -> Int) -> (Down a -> Int) -> Down a -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Int forall a. Enum a => a -> Int fromEnum (a -> Int) -> (Down a -> a) -> Down a -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c . Down a -> a forall a. Down a -> a getDown toEnum :: Int -> Down a toEnum =a -> Down a forall a. a -> Down a Down (a -> Down a) -> (Int -> a) -> Int -> Down a forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> a forall a. Enum a => Int -> a toEnum (Int -> a) -> (Int -> Int) -> Int -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . Int -> Int forall a. Bits a => a -> a complement enumFrom :: Down a -> [Down a] enumFrom (Down a x )|a x a -> a -> Bool forall a. Eq a => a -> a -> Bool == a forall a. Bounded a => a minBound =[a -> Down a forall a. a -> Down a Down a x ]-- We can't rely on 'enumFromThen _ (pred @a minBound)` behaving nicely,-- since 'enumFromThen _' might be strict and 'pred minBound' might throw|Bool otherwise =[a] -> [Down a] forall a b. Coercible a b => a -> b coerce ([a] -> [Down a]) -> [a] -> [Down a] forall a b. (a -> b) -> a -> b $ a -> a -> [a] forall a. Enum a => a -> a -> [a] enumFromThen a x (a -> a forall a. Enum a => a -> a pred a x )enumFromThen :: Down a -> Down a -> [Down a] enumFromThen (Down a x )(Down a y )=[a] -> [Down a] forall a b. Coercible a b => a -> b coerce ([a] -> [Down a]) -> [a] -> [Down a] forall a b. (a -> b) -> a -> b $ a -> a -> [a] forall a. Enum a => a -> a -> [a] enumFromThen a x a y -- | @since 4.11.0.0instanceFunctor Down wherefmap :: forall a b. (a -> b) -> Down a -> Down b fmap =(a -> b) -> Down a -> Down b forall a b. Coercible a b => a -> b coerce -- | @since 4.11.0.0instanceApplicative Down wherepure :: forall a. a -> Down a pure =a -> Down a forall a. a -> Down a Down <*> :: forall a b. Down (a -> b) -> Down a -> Down b (<*>) =Down (a -> b) -> Down a -> Down b forall a b. Coercible a b => a -> b coerce -- | @since 4.11.0.0instanceMonad Down whereDown a a >>= :: forall a b. Down a -> (a -> Down b) -> Down b >>= a -> Down b k =a -> Down b k a a