Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Template Haskell has a class Lift
that allows you to promote values
from Haskell-land into the land of metaprogramming - Q
.
classLift
a wherelift
:: a ->Q
Exp
liftTyped
:: a ->Q
(TExp
a)
However, there wasn't a way to promote a *type* into a
.Q
Type
This library provides exactly that function. It requires a Typeable
constraint, but this is automatically satisfied by GHC.
Since: 0.1.0.0
Synopsis
- liftTypeQ :: forall t. Typeable t => Q Type
- typeRepToType :: SomeTypeRep -> Type
- liftType :: forall t. Typeable t => Type
Documentation
typeRepToType :: SomeTypeRep -> Type Source #
Promote a SomeTypeRep
into a Type
.
Since: 0.1.1.0
liftType :: forall t. Typeable t => Type Source #
Convert a type argument into a Template Haskell Type
.
Use with TypeApplications
.
Example:
>>> :set -XTypeApplications >>> liftType @Bool ConT GHC.Types.Bool >>> liftType @[Char] AppT (ConT GHC.Types.[]) (ConT GHC.Types.Char)
This works with data kinds, too.
>>> :set -XDataKinds >>> liftType @3 LitT (NumTyLit 3) >>> liftType @"hello" LitT (StrTyLit "hello") >>> liftType @'[Int, Char] AppT (AppT (PromotedT GHC.Types.:) (ConT GHC.Types.Int)) (AppT (AppT (PromotedT GHC.Types.:) (ConT GHC.Types.Char)) (PromotedT GHC.Types.[])) >>> liftType @'(Int, Char) AppT (AppT (PromotedT GHC.Tuple.(,)) (ConT GHC.Types.Int)) (ConT GHC.Types.Char)
Since: 0.1.0.0