Data.TypeFun
Description
Emulation of type-level functions.
- class Kind (Domain fun) => TypeFun fun where
- type Domain fun
- type family App fun arg
- data Id dom = Id dom
- data Const dom val = Const dom
- data fun :-> fun' = fun :-> fun'
- data FunMap trans fun
- newtype WrappedApp fun arg = WrapApp (App fun arg)
- unwrapApp :: WrappedApp fun arg -> App fun arg
- type Universal fun = forall arg. Inhabitant (Domain fun) arg => WrappedApp fun arg
Type-level functions in general
class Kind (Domain fun) => TypeFun fun Source
Type-level functions are represented by types. TypeFun is the class of all type-level
function representations.
Associated Types
The domain of the type-level function as a subkind representation. Subkind handling is provided by the kinds package.
type family App fun arg Source
Application of type-level functions. App takes a function representation and an argument
and returns the corresponding result.
Construction of type-level functions
A type Id d represents the type-level identity function whose domain is represented
by d.
Constructors
| Id dom |
A type Const d v represents the constant type-level function whose domain is
represented by d, and whose result is v.
Constructors
| Const dom |
Constructors
| fun :-> fun' |
If t is a type of kind * -> *, and f is the representation of a
type-level function, FunMap t f represents the function \arg -> t (App f arg).
Utilities
newtype WrappedApp fun arg Source
A data type that is isomorphic to the type synonym family App.
unwrapApp :: WrappedApp fun arg -> App fun argSource
The inverse of WrapApp.
type Universal fun = forall arg. Inhabitant (Domain fun) arg => WrappedApp fun argSource
Turns a type-level function into the intersection of all its results.