th-utilities-0.1.0.0: Collection of useful functions for use with Template Haskell

Safe HaskellNone
LanguageHaskell2010

TH.Utilities

Description

Miscellaneous Template Haskell utilities, added as needed by packages in the th-utilities repo and elsewhere.

Synopsis

Documentation

unAppsT :: Type -> [Type] Source

Breaks a type application like A b c into [A, b, c]. In other words, it descends leftwards down AppT constructors, and yields a list of the results.

typeToNamedCon :: Type -> Maybe (Name, [Type]) Source

Given a Type, returns a Just value if it's a named type constructor applied to arguments. This value contains the name of the type and a list of arguments.

expectTyCon1 :: Name -> Type -> Q Type Source

Expect the provided type to be an application of a regular type to one argument, otherwise fail with a message. This will also work if the name is a promoted data constructor (PromotedT).

expectTyCon2 :: Name -> Type -> Q (Type, Type) Source

Expect the provided type to be an application of a regular type to two arguments, otherwise fail with a message. This will also work if the name is a promoted data constructor (PromotedT).

proxyE :: TypeQ -> ExpQ Source

Given a type, construct the expression (Proxy :: Proxy ty).

dequalify :: Name -> Name Source

Construct a plain name (mkName) based on the given name. This is useful for cases where TH doesn't expect a unique name.

freeVarsT :: Type -> [Name] Source

Get the free type variables of a Type.

data ExpLifter Source

Hack to enable putting expressions inside lift-ed TH data. For example, you could do

    main = print $(lift [ExpLifter [e| 1 + 1 |],  ExpLifter [e| 2 |]])

Without ExpLifter, lift tends to just generate code involving data construction. With ExpLifter, you can put more complicated expression into this construction.

Constructors

ExpLifter ExpQ 

Instances