first-class-families-0.7.0.0: First class type families

Safe HaskellSafe
LanguageHaskell2010

Fcf.Classes

Description

Overloaded functions.

Synopsis

Documentation

data Map :: (a -> Exp b) -> f a -> Exp (f b) Source #

Type-level fmap for type-level functors.

Example

Expand
>>> import Fcf.Data.Nat
>>> import qualified GHC.TypeLits as TL
>>> data AddMul :: Nat -> Nat -> Exp Nat
>>> type instance Eval (AddMul x y) = (x TL.+ y) TL.* (x TL.+ y)
>>> :kind! Eval (Map (AddMul 2) '[0, 1, 2, 3, 4])
Eval (Map (AddMul 2) '[0, 1, 2, 3, 4]) :: [Nat]
= '[4, 9, 16, 25, 36]
Instances
type Eval (Map f (a2 ': as) :: [b] -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f (a2 ': as) :: [b] -> Type) = Eval (f a2) ': Eval (Map f as)
type Eval (Map f ([] :: [a]) :: [b] -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f ([] :: [a]) :: [b] -> Type) = ([] :: [b])
type Eval (Map f (Just a3) :: Maybe a2 -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f (Just a3) :: Maybe a2 -> Type) = Just (Eval (f a3))
type Eval (Map f (Nothing :: Maybe a) :: Maybe b -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f (Nothing :: Maybe a) :: Maybe b -> Type) = (Nothing :: Maybe b)
type Eval (Map f (Right a3 :: Either a2 a1) :: Either a2 b -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f (Right a3 :: Either a2 a1) :: Either a2 b -> Type) = (Right (Eval (f a3)) :: Either a2 b)
type Eval (Map f (Left x :: Either a2 a1) :: Either a2 b -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f (Left x :: Either a2 a1) :: Either a2 b -> Type) = (Left x :: Either a2 b)
type Eval (Map f ((,) x a2) :: (k2, k1) -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f ((,) x a2) :: (k2, k1) -> Type) = (,) x (Eval (f a2))
type Eval (Map f ((,,) x y a2) :: (k2, k3, k1) -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f ((,,) x y a2) :: (k2, k3, k1) -> Type) = (,,) x y (Eval (f a2))
type Eval (Map f ((,,,) x y z a2) :: (k2, k3, k4, k1) -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f ((,,,) x y z a2) :: (k2, k3, k4, k1) -> Type) = (,,,) x y z (Eval (f a2))
type Eval (Map f ((,,,,) x y z w a2) :: (k2, k3, k4, k5, k1) -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Map f ((,,,,) x y z w a2) :: (k2, k3, k4, k5, k1) -> Type) = (,,,,) x y z w (Eval (f a2))

data Bimap :: (a -> Exp a') -> (b -> Exp b') -> f a b -> Exp (f a' b') Source #

Type-level bimap.

Instances
type Eval (Bimap f g (Right y :: Either a b1) :: Either a' b2 -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Bimap f g (Right y :: Either a b1) :: Either a' b2 -> Type) = (Right (Eval (g y)) :: Either a' b2)
type Eval (Bimap f g (Left x :: Either a1 b) :: Either a2 b' -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Bimap f g (Left x :: Either a1 b) :: Either a2 b' -> Type) = (Left (Eval (f x)) :: Either a2 b')
type Eval (Bimap f g ((,) x y) :: (k2, k1) -> Type) Source # 
Instance details

Defined in Fcf.Classes

type Eval (Bimap f g ((,) x y) :: (k2, k1) -> Type) = (,) (Eval (f x)) (Eval (g y))