type-combinators-0.1.2.1: A collection of data types for type-level programming

CopyrightCopyright (C) 2015 Kyle Carter
LicenseBSD3
MaintainerKyle Carter <kylcarte@indiana.edu>
Stabilityexperimental
PortabilityRankNTypes
Safe HaskellNone
LanguageHaskell2010

Type.Family.Maybe

Description

Convenient type families for working with type-level Maybes.

Synopsis

Documentation

type family MaybeC mc :: Constraint Source

Take a Maybe Constraint to a Constraint.

Equations

MaybeC Nothing = ØC 
MaybeC (Just c) = c 

type family f <$> a :: Maybe l infixr 4 Source

Map over a type-level Maybe.

Equations

f <$> Nothing = Nothing 
f <$> (Just a) = Just (f a) 

type family f <&> a :: Maybe l infixl 5 Source

Equations

Nothing <&> a = Nothing 
(Just f) <&> a = Just (f a) 

type family f <*> a :: Maybe l infixr 4 Source

Equations

Nothing <*> a = Nothing 
f <*> Nothing = Nothing 
(Just f) <*> (Just a) = Just (f a) 

type family a <|> b :: Maybe k infixr 4 Source

Equations

Nothing <|> a = a 
a <|> Nothing = a 
(Just a) <|> (Just b) = Just a 

type family FromJust m :: k Source

Equations

FromJust (Just a) = a 

type family a == b :: Bool infix 4

A type family to compute Boolean equality. Instances are provided only for open kinds, such as * and function kinds. Instances are also provided for datatypes exported from base. A poly-kinded instance is not provided, as a recursive definition for algebraic kinds is generally more useful.

Instances

type (==) Bool a b = EqBool a b 
type (==) Ordering a b = EqOrdering a b 
type (==) * a b = EqStar a b 
type (==) () a b = EqUnit a b 
type (==) N x y = NatEq x y 
type (==) [k] a b = EqList k a b 
type (==) (Maybe k) a b = EqMaybe k a b 
type (==) (k -> k1) a b = EqArrow k k1 a b 
type (==) (Either k k1) a b = EqEither k k1 a b 
type (==) ((,) k k1) a b = Eq2 k k1 a b 
type (==) ((,,) k k1 k2) a b = Eq3 k k1 k2 a b 
type (==) ((,,,) k k1 k2 k3) a b = Eq4 k k1 k2 k3 a b 
type (==) ((,,,,) k k1 k2 k3 k4) a b = Eq5 k k1 k2 k3 k4 a b 
type (==) ((,,,,,) k k1 k2 k3 k4 k5) a b = Eq6 k k1 k2 k3 k4 k5 a b 
type (==) ((,,,,,,) k k1 k2 k3 k4 k5 k6) a b = Eq7 k k1 k2 k3 k4 k5 k6 a b 
type (==) ((,,,,,,,) k k1 k2 k3 k4 k5 k6 k7) a b = Eq8 k k1 k2 k3 k4 k5 k6 k7 a b 
type (==) ((,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8) a b = Eq9 k k1 k2 k3 k4 k5 k6 k7 k8 a b 
type (==) ((,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9) a b = Eq10 k k1 k2 k3 k4 k5 k6 k7 k8 k9 a b 
type (==) ((,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10) a b = Eq11 k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 a b 
type (==) ((,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11) a b = Eq12 k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 a b 
type (==) ((,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12) a b = Eq13 k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 a b 
type (==) ((,,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13) a b = Eq14 k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 a b 
type (==) ((,,,,,,,,,,,,,,) k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14) a b = Eq15 k k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 a b