HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulefirst-class-families-0.8.1.0Haskell2010

Fcf.Utils

Miscellaneous families.

  • 10 types
  • 1 class
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
familytype family Stuck :: a
#

A stuck type that can be used like a type-level undefined.

classclass IsBool (b :: Bool) where
#

Methods

Instances2IsBool
  • IsBool 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Utils
  • IsBool 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Utils
datadata Case (a :: [Match j k]) (b :: j) (c :: k)
#

(Limited) equivalent of \case { .. } syntax. Supports matching of exact values (-->) and final matches for any value (Any) or for passing value to subcomputation (Else). Examples:

type BoolToNat = Case
  [ 'True  --> 0
  , 'False --> 1
  ]

type NatToBool = Case
  [ 0 --> 'False
  , Any   'True
  ]

type ZeroOneOrSucc = Case
  [ 0  --> 0
  , 1  --> 1
  , Else   ((+) 1)
  ]
Instances1Eval
  • type Eval (Case ms a) = Case_ ms aDefined in first-class-families-0.8.1.0 · Fcf.Utils
typetype (-->) = 'Match_
#

Match concrete type in Case.

typetype Is = 'Is_
#

Match on predicate being successful with type in Case.

typetype Else = 'Else_
#

Pass type being matched in Case to subcomputation. Should be used as a final branch.

From Data.Type.Bool

1 declaration
familytype family If (cond :: Bool) (tru :: k) (fls :: k) :: k where
#

Type-level If. If True a b ==> a; If False a b ==> b

Equations