HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulefirst-class-families-0.8.1.0Haskell2010

Fcf.Class.Ord

Equality and ordering.

Note that equality doesn't really require a class, it can be defined uniformly as TyEq.

  • 6 types

Order

5 declarations
datadata Compare (b :: a) (c :: a) (d :: Ordering)
#

Type-level compare for totally ordered data types.

Example
Example1 expression
:kind! Eval (Compare "a" "b")Eval (Compare "a" "b") :: Ordering= LT
Example1 expression
:kind! Eval (Compare '[1, 2, 3] '[1, 2, 3])Eval (Compare '[1, 2, 3] '[1, 2, 3]) :: Ordering= EQ
Example1 expression
:kind! Eval (Compare '[1, 3] '[1, 2])Eval (Compare '[1, 3] '[1, 2]) :: Ordering= GT
Instances27Eval, …
datadata (<=) (b :: a) (c :: a) (d :: Bool)
#

"Smaller than or equal to". Type-level version of (<=).

Example
Example1 expression
:kind! Eval ("b" <= "a")Eval ("b" <= "a") :: Bool= False
Instances1Eval
  • type Eval (a2 <= b) = Compare a2 b ~/= 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ord
datadata (>=) (b :: a) (c :: a) (d :: Bool)
#

"Greater than or equal to". Type-level version of (>=).

Example
Example1 expression
:kind! Eval ("b" >= "a")Eval ("b" >= "a") :: Bool= True
Instances1Eval
  • type Eval (a2 >= b) = Compare a2 b ~/= 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ord
datadata (<) (b :: a) (c :: a) (d :: Bool)
#

"Smaller than". Type-level version of (<).

Example
Example1 expression
:kind! Eval ("a" < "b")Eval ("a" < "b") :: Bool= True
Instances1Eval
  • type Eval (a2 < b) = Compare a2 b ~== 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ord
datadata (>) (b :: a) (c :: a) (d :: Bool)
#

"Greater than". Type-level version of (>).

Example
Example1 expression
:kind! Eval ("b" > "a")Eval ("b" > "a") :: Bool= True
Instances1Eval
  • type Eval (a2 > b) = Compare a2 b ~== 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ord

Equality

1 declaration
datadata TyEq (c :: a) (d :: b) (e :: Bool)
#

Type equality.

Details

The base library also defines a similar (Type.Equality.==); it differs from TyEq in the following ways:

  • TyEq is heterogeneous: its arguments may have different kinds;

  • TyEq is reflexive: TyEq a a always reduces to True even if a is a variable.

Instances1Eval
  • type Eval (TyEq a b) = TyEqImpl a bDefined in first-class-families-0.8.1.0 · Fcf.Utils