lift-type-0.1.1.1: Lift a type from a Typeable constraint to a Template Haskell type
Safe HaskellSafe-Inferred
LanguageHaskell2010

LiftType

Description

Template Haskell has a class Lift that allows you to promote values from Haskell-land into the land of metaprogramming - Q.

class Lift a where
    lift :: 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

Documentation

liftTypeQ :: forall t. Typeable t => Q Type Source #

liftType promoted to the Q monad.

Since: 0.1.0.0

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