HORIZON HASKELLDocslts/ghc-10.0.x8174fa42026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8174fa4 · 2026-10-11

Moduleghc-internal-10.0.0Haskell2010

GHC.Internal.Data.Ord

Orderings

  • 2 types
  • 1 class
  • 2 values
classclass Eq a => Ord a where
#

The Ord class is used for totally ordered datatypes.

Instances of Ord can be derived for any user-defined datatype whose constituent types are in Ord. The declared order of the constructors in the data declaration determines the ordering in derived Ord instances. The Ordering datatype allows a single comparison to determine the precise ordering of two objects.

Ord, as defined by the Haskell report, implements a total order and has the following properties:

Comparability

x <= y || y <= x

=

True

Transitivity

if

x <= y && y <= z

=

True

, then

x <= z

=

True

Reflexivity

x <= x

=

True

Antisymmetry

if

x <= y && y <= x

=

True

, then

x == y

=

True

The following operator interactions are expected to hold:

  1. x >= y = y <= x

  2. x < y = x <= y && x /= y

  3. x > y = y < x

  4. x < y = compare x y == LT

  5. x > y = compare x y == GT

  6. x == y = compare x y == EQ

  7. min x y == if x <= y then x else y = True

  8. max x y == if x >= y then x else y = True

Note that (7.) and (8.) do not require min and max to return either of their arguments. The result is merely required to equal one of the arguments in terms of (==). Users who expect a stronger guarantee are advised to write their own min and/or max functions.

The nuance of the above distinction is not always fully internalized by developers, and in the past (tracing back to the Haskell 1.4 Report) the specification for Ord asserted the stronger property that (min x y, max x y) = (x, y) or (y, x), or in other words, that min and max will return one of their arguments, using argument order as the tie-breaker if the arguments are equal by comparison. A few list and Data.Foldable.Foldable functions have behavior that is best understood with this assumption in mind: all variations of minimumBy and maximumBy (which can't use min and max in their implementations) are written such that minimumBy compare and maximumBy compare are respectively equivalent to minimum and maximum (which do use min and max) only if min and max adhere to this tie-breaking convention. Otherwise, if there are multiple least or largest elements in a container, minimum and maximum may not return the same one that minimumBy compare and maximumBy compare do (though they should return something that is equal). (This is relevant for types with non-extensional equality, like Data.Semigroup.Arg, but also in cases where the precise reference held matters for memory-management reasons.) Unless there is a reason to deviate, it is less confusing for implementors of Ord to respect this same convention (as the default definitions of min and max do).

Minimal complete definition: either compare or <=. Using compare can be more efficient for complex types.

Methods

Instances235Ord, …
  • Ord VoidDefined in ghc-internal-10.0.0 · GHC.Internal.Base
  • Ord BigNatDefined in ghc-internal-10.0.0 · GHC.Internal.Bignum.BigNat
  • Ord IntegerDefined in ghc-internal-10.0.0 · GHC.Internal.Bignum.Integer
  • Ord NaturalDefined in ghc-internal-10.0.0 · GHC.Internal.Bignum.Natural
  • Ord ByteOrderDefined in ghc-internal-10.0.0 · GHC.Internal.ByteOrder
  • Ord ClosureTypeDefined in ghc-internal-10.0.0 · GHC.Internal.ClosureTypes
  • Ord BlockReasonDefined in ghc-internal-10.0.0 · GHC.Internal.Conc.Sync
  • Ord ThreadIdDefined in ghc-internal-10.0.0 · GHC.Internal.Conc.Sync
  • Ord ThreadStatusDefined in ghc-internal-10.0.0 · GHC.Internal.Conc.Sync
  • Ord AllDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord AnyDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord SomeTypeRepDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Typeable.Internal
  • Ord UniqueDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Unique
  • Ord VersionDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Version
  • Ord TimeoutKeyDefined in ghc-internal-10.0.0 · GHC.Internal.Event.TimeOut
  • Ord UniqueDefined in ghc-internal-10.0.0 · GHC.Internal.Event.Unique
  • Ord ErrorCallDefined in ghc-internal-10.0.0 · GHC.Internal.Exception
  • Ord ArithExceptionDefined in ghc-internal-10.0.0 · GHC.Internal.Exception.Type
  • Ord FingerprintDefined in ghc-internal-10.0.0 · GHC.Internal.Fingerprint.Type
  • Ord CBoolDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CCharDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CClockDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CDoubleDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CFloatDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CIntDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CIntMaxDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CIntPtrDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CLLongDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CLongDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CPtrdiffDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CSCharDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CSUSecondsDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CShortDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CSigAtomicDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CSizeDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CTimeDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUCharDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUIntDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUIntMaxDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUIntPtrDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CULLongDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CULongDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUSecondsDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CUShortDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord CWcharDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.Types
  • Ord IntPtrDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.Ptr
  • Ord WordPtrDefined in ghc-internal-10.0.0 · GHC.Internal.Foreign.Ptr
  • Ord AssociativityDefined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord DecidedStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord FixityDefined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord SourceStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord SourceUnpackednessDefined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord PrimTypeDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.Closures
  • Ord TsoFlagsDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.Closures
  • Ord WhatNextDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.Closures
  • Ord WhyBlockedDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.Closures
  • Ord HalfWordDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.InfoTable.Types
  • Ord CostCentreDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.ProfInfo.Types
  • Ord CostCentreStackDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.ProfInfo.Types
  • Ord IndexTableDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.ProfInfo.Types
  • Ord StgTSOProfInfoDefined in ghc-internal-10.0.0 · GHC.Internal.Heap.ProfInfo.Types
  • Ord SeekModeDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Device
  • Ord ArrayExceptionDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Exception
  • Ord AsyncExceptionDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Exception
  • Ord ExitCodeDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Exception
  • Ord BufferModeDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Handle.Types
  • Ord NewlineDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Handle.Types
  • Ord NewlineModeDefined in ghc-internal-10.0.0 · GHC.Internal.IO.Handle.Types
  • Ord IOModeDefined in ghc-internal-10.0.0 · GHC.Internal.IO.IOMode
  • Ord Int16Defined in ghc-internal-10.0.0 · GHC.Internal.Int
  • Ord Int32Defined in ghc-internal-10.0.0 · GHC.Internal.Int
  • Ord Int64Defined in ghc-internal-10.0.0 · GHC.Internal.Int
  • Ord Int8Defined in ghc-internal-10.0.0 · GHC.Internal.Int
  • Ord ExtensionDefined in ghc-internal-10.0.0 · GHC.Internal.LanguageExtensions
  • Ord ByteOffsetDefined in ghc-internal-10.0.0 · GHC.Internal.Stack.Constants
  • Ord WordOffsetDefined in ghc-internal-10.0.0 · GHC.Internal.Stack.Constants
  • Ord ByteOffsetDefined in ghc-internal-10.0.0 · GHC.Internal.Stack.ConstantsProf
  • Ord WordOffsetDefined in ghc-internal-10.0.0 · GHC.Internal.Stack.ConstantsProf
  • Ord CBlkCntDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CBlkSizeDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CCcDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CClockIdDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CDevDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CFsBlkCntDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CFsFilCntDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CGidDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CIdDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CInoDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CKeyDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CModeDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CNfdsDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CNlinkDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord COffDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CPidDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CRLimDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CSocklenDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CSpeedDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CSsizeDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CTcflagDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CTimerDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord CUidDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord FdDefined in ghc-internal-10.0.0 · GHC.Internal.System.Posix.Types
  • Ord AnnLookupDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord AnnTargetDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord BangDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord BndrVisDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord BodyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord BytesDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord CallconvDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ClauseDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ConDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord DecDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord DecidedStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord DerivClauseDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord DerivStrategyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord DocLocDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ExpDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord FamilyResultSigDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord FixityDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord FixityDirectionDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ForeignDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord FunDepDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord GuardDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord InfoDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord InjectivityAnnDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord InlineDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord LitDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord LocDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord MatchDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ModNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ModuleDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord ModuleInfoDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord NameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord NameFlavourDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord NameSpaceDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord NamespaceSpecifierDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord OccNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord OverlapDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PatDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PatSynArgsDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PatSynDirDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PhasesDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PkgNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord PragmaDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord RangeDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord RoleDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord RuleBndrDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord RuleMatchDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord SafetyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord SourceStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord SourceUnpackednessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord SpecificityDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord StmtDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord TyLitDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord TySynEqnDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord TypeDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord TypeFamilyHeadDefined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord SomeCharDefined in ghc-internal-10.0.0 · GHC.Internal.TypeLits
  • Ord SomeSymbolDefined in ghc-internal-10.0.0 · GHC.Internal.TypeLits
  • Ord SomeNatDefined in ghc-internal-10.0.0 · GHC.Internal.TypeNats
  • Ord BoolDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord CharDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord DoubleDefined in ghc-internal-10.0.0 · GHC.Internal.Classes

    IEEE 754 Double-precision type includes not only numbers, but also positive and negative infinities and a special element called NaN (which can be quiet or signal).

    IEEE 754-2008, section 5.11 requires that if at least one of arguments of <=, <, >, >= is NaN then the result of the comparison is False, and instance Ord Double complies with this requirement. This violates the reflexivity: both NaN <= NaN and NaN >= NaN are False.

    IEEE 754-2008, section 5.10 defines totalOrder predicate. Unfortunately, compare on Doubles violates the IEEE standard and does not define a total order. More specifically, both compare NaN x and compare x NaN always return GT.

    Thus, users must be extremely cautious when using instance Ord Double. For instance, one should avoid ordered containers with keys represented by Double, because data loss and corruption may happen. An IEEE-compliant compare is available in fp-ieee package as TotallyOrdered newtype.

    Moving further, the behaviour of min and max with regards to NaN is also non-compliant. IEEE 754-2008, section 5.3.1 defines that quiet NaN should be treated as a missing data by minNum and maxNum functions, for example, minNum(NaN, 1) = minNum(1, NaN) = 1. Some languages such as Java deviate from the standard implementing minNum(NaN, 1) = minNum(1, NaN) = NaN. However, min / max in base are even worse: min NaN 1 is 1, but min 1 NaN is NaN.

    IEEE 754-2008 compliant min / max can be found in ieee754 package under minNum / maxNum names. Implementations compliant with minimumNumber / maximumNumber from a newer IEEE 754-2019, section 9.6 are available from fp-ieee package.

  • Ord FloatDefined in ghc-internal-10.0.0 · GHC.Internal.Classes

    See instance Ord Double for discussion of deviations from IEEE 754 standard.

  • Ord IntDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord OrderingDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord TyConDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord WordDefined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord GeneralCategoryDefined in ghc-internal-10.0.0 · GHC.Internal.Unicode
  • Ord Word16Defined in ghc-internal-10.0.0 · GHC.Internal.Word
  • Ord Word32Defined in ghc-internal-10.0.0 · GHC.Internal.Word
  • Ord Word64Defined in ghc-internal-10.0.0 · GHC.Internal.Word
  • Ord Word8Defined in ghc-internal-10.0.0 · GHC.Internal.Word
  • Ord ()Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord (ConstPtr a)Defined in ghc-internal-10.0.0 · GHC.Internal.Foreign.C.ConstPtr
  • Ord (ForeignPtr a)Defined in ghc-internal-10.0.0 · GHC.Internal.ForeignPtr
  • Ord (FunPtr a)Defined in ghc-internal-10.0.0 · GHC.Internal.Ptr
  • Ord (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.Ptr
  • Ord (SChar c)Defined in ghc-internal-10.0.0 · GHC.Internal.TypeLits
  • Ord (SSymbol s)Defined in ghc-internal-10.0.0 · GHC.Internal.TypeLits
  • Ord (SNat n)Defined in ghc-internal-10.0.0 · GHC.Internal.TypeNats
  • Ord a => Ord (NonEmpty a)Defined in ghc-internal-10.0.0 · GHC.Internal.Base
  • Ord a => Ord (Identity a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Functor.Identity
  • Ord a => Ord (First a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Monoid
  • Ord a => Ord (Last a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Monoid
  • Ord a => Ord (Down a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Ord
  • Ord a => Ord (Dual a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord a => Ord (Product a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord a => Ord (Sum a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord a => Ord (ZipList a)Defined in ghc-internal-10.0.0 · GHC.Internal.Functor.ZipList
  • Ord a => Ord (Maybe a)Defined in ghc-internal-10.0.0 · GHC.Internal.Maybe
  • Ord a => Ord (a)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord a => Ord [a]Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord flag => Ord (TyVarBndr flag)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Syntax
  • Ord p => Ord (Par1 p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Integral a => Ord (Ratio a)Defined in ghc-internal-10.0.0 · GHC.Internal.Real
  • Ord (Proxy s)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Proxy
  • Ord (TypeRep a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Typeable.Internal
  • Ord (U1 p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (V1 p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • (Ord a, Ord b) => Ord (Either a b)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Either
  • (Ord a, Ord b) => Ord (a, b)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ix i, Ord e) => Ord (Array i e)Defined in ghc-internal-10.0.0 · GHC.Internal.Arr
  • Ord (Coercion a b)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Type.Coercion
  • Ord (URec Char p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (URec Double p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (URec Float p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (URec Int p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (URec Word p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (URec (Ptr ()) p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (a :~: b)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Type.Equality
  • Ord (f a) => Ord (Ap f a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Monoid
  • Ord (f a) => Ord (Alt f a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.Internal
  • Ord (f p) => Ord (Rec1 f p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord a => Ord (Const a b)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Functor.Const
  • (Ord a, Ord b, Ord c) => Ord (a, b, c)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Generic1 f, Ord (Rep1 f a)) => Ord (Generically1 f a)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (a :~~: b)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Type.Equality
  • Ord c => Ord (K1 i c p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • (Ord (f p), Ord (g p)) => Ord ((:*:) f g p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • (Ord (f p), Ord (g p)) => Ord ((:+:) f g p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • Ord (f (g p)) => Ord ((:.:) f g p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • Ord (f p) => Ord (M1 i c f p)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics
  • (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord (a, b, c, d, e, f)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord (a, b, c, d, e, f, g)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord (a, b, c, d, e, f, g, h)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i) => Ord (a, b, c, d, e, f, g, h, i)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j) => Ord (a, b, c, d, e, f, g, h, i, j)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k) => Ord (a, b, c, d, e, f, g, h, i, j, k)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l) => Ord (a, b, c, d, e, f, g, h, i, j, k, l)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
  • (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n, Ord o) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)Defined in ghc-internal-10.0.0 · GHC.Internal.Classes
datadata Ordering
#
Instances12Bounded, Enum, Eq, Data, Ord, Read, …
newtypenewtype Down a
#

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.

Example1 expression
compare True FalseGT
Example1 expression
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.

Example1 expression
minBound :: Int-9223372036854775808
Example1 expression
minBound :: Down IntDown 9223372036854775807

All other instances of Down a behave as they do for a.

Constructors

Instances30Monad, Functor, MonadFix, Applicative, Foldable, Traversable, …
valuecomparing :: Ord a => (b -> a) -> b -> b -> Ordering
#
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) ...
valueclamp :: Ord a => (a, a) -> a -> a
#
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.

Example1 expression
clamp (0, 10) 22
Example1 expression
clamp ('a', 'm') 'x''m'