th-to-exp-0.0.1.1: Provides a way to persist data from compile-time to runtime.

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.TH.ToExp

Description

This module provides the ToExp class, which can be used to convert values into Template Haskell Exp values that represent expressions that evaluate to the original values. This makes it possible to persist/reify values between compile-time and runtime.

Synopsis

Documentation

class ToExp a where Source #

Converts arbitrary values to Template Haskell Exp values, which can be used in splices to reconstruct the original value. This is useful to persist a compile-time value to a runtime one.

>>> toExp (Just 1)
AppE (ConE GHC.Base.Just) (LitE (IntegerL 1))

This class can be automatically derived for types with a Generic instance.

Methods

toExp :: a -> Exp Source #

toExp :: (Generic a, GToExp (Rep a)) => a -> Exp Source #

Instances

ToExp Bool Source # 

Methods

toExp :: Bool -> Exp Source #

ToExp Char Source # 

Methods

toExp :: Char -> Exp Source #

ToExp Int Source # 

Methods

toExp :: Int -> Exp Source #

ToExp Integer Source # 

Methods

toExp :: Integer -> Exp Source #

ToExp Ordering Source # 

Methods

toExp :: Ordering -> Exp Source #

ToExp Word8 Source # 

Methods

toExp :: Word8 -> Exp Source #

ToExp Exp Source # 

Methods

toExp :: Exp -> Exp Source #

ToExp Match Source # 

Methods

toExp :: Match -> Exp Source #

ToExp Clause Source # 

Methods

toExp :: Clause -> Exp Source #

ToExp Pat Source # 

Methods

toExp :: Pat -> Exp Source #

ToExp Type Source # 

Methods

toExp :: Type -> Exp Source #

ToExp Dec Source # 

Methods

toExp :: Dec -> Exp Source #

ToExp Name Source # 

Methods

toExp :: Name -> Exp Source #

ToExp FunDep Source # 

Methods

toExp :: FunDep -> Exp Source #

ToExp TyVarBndr Source # 

Methods

toExp :: TyVarBndr -> Exp Source #

ToExp InjectivityAnn Source # 
ToExp Overlap Source # 

Methods

toExp :: Overlap -> Exp Source #

ToExp () Source # 

Methods

toExp :: () -> Exp Source #

ToExp Extension Source # 

Methods

toExp :: Extension -> Exp Source #

ToExp ModName Source # 

Methods

toExp :: ModName -> Exp Source #

ToExp PkgName Source # 

Methods

toExp :: PkgName -> Exp Source #

ToExp Module Source # 

Methods

toExp :: Module -> Exp Source #

ToExp OccName Source # 

Methods

toExp :: OccName -> Exp Source #

ToExp NameFlavour Source # 
ToExp NameSpace Source # 

Methods

toExp :: NameSpace -> Exp Source #

ToExp Info Source # 

Methods

toExp :: Info -> Exp Source #

ToExp ModuleInfo Source # 

Methods

toExp :: ModuleInfo -> Exp Source #

ToExp Fixity Source # 

Methods

toExp :: Fixity -> Exp Source #

ToExp FixityDirection Source # 
ToExp Lit Source # 

Methods

toExp :: Lit -> Exp Source #

ToExp Body Source # 

Methods

toExp :: Body -> Exp Source #

ToExp Guard Source # 

Methods

toExp :: Guard -> Exp Source #

ToExp Stmt Source # 

Methods

toExp :: Stmt -> Exp Source #

ToExp Range Source # 

Methods

toExp :: Range -> Exp Source #

ToExp TypeFamilyHead Source # 
ToExp TySynEqn Source # 

Methods

toExp :: TySynEqn -> Exp Source #

ToExp Foreign Source # 

Methods

toExp :: Foreign -> Exp Source #

ToExp Callconv Source # 

Methods

toExp :: Callconv -> Exp Source #

ToExp Safety Source # 

Methods

toExp :: Safety -> Exp Source #

ToExp Pragma Source # 

Methods

toExp :: Pragma -> Exp Source #

ToExp Inline Source # 

Methods

toExp :: Inline -> Exp Source #

ToExp RuleMatch Source # 

Methods

toExp :: RuleMatch -> Exp Source #

ToExp Phases Source # 

Methods

toExp :: Phases -> Exp Source #

ToExp RuleBndr Source # 

Methods

toExp :: RuleBndr -> Exp Source #

ToExp AnnTarget Source # 

Methods

toExp :: AnnTarget -> Exp Source #

ToExp SourceUnpackedness Source # 
ToExp SourceStrictness Source # 
ToExp DecidedStrictness Source # 
ToExp Con Source # 

Methods

toExp :: Con -> Exp Source #

ToExp Bang Source # 

Methods

toExp :: Bang -> Exp Source #

ToExp FamilyResultSig Source # 
ToExp TyLit Source # 

Methods

toExp :: TyLit -> Exp Source #

ToExp Role Source # 

Methods

toExp :: Role -> Exp Source #

ToExp AnnLookup Source # 

Methods

toExp :: AnnLookup -> Exp Source #

ToExp a => ToExp [a] Source #

produces expressions that use ListE instead of AppE and : to make them prettier

Methods

toExp :: [a] -> Exp Source #

ToExp a => ToExp (Maybe a) Source # 

Methods

toExp :: Maybe a -> Exp Source #

ToExp a => ToExp (Ratio a) Source # 

Methods

toExp :: Ratio a -> Exp Source #

(ToExp a, ToExp b) => ToExp (Either a b) Source # 

Methods

toExp :: Either a b -> Exp Source #

(ToExp a, ToExp b) => ToExp (a, b) Source # 

Methods

toExp :: (a, b) -> Exp Source #

(ToExp a, ToExp b, ToExp c) => ToExp (a, b, c) Source # 

Methods

toExp :: (a, b, c) -> Exp Source #

(ToExp a, ToExp b, ToExp c, ToExp d) => ToExp (a, b, c, d) Source # 

Methods

toExp :: (a, b, c, d) -> Exp Source #

(ToExp a, ToExp b, ToExp c, ToExp d, ToExp e) => ToExp (a, b, c, d, e) Source # 

Methods

toExp :: (a, b, c, d, e) -> Exp Source #

(ToExp a, ToExp b, ToExp c, ToExp d, ToExp e, ToExp f) => ToExp (a, b, c, d, e, f) Source # 

Methods

toExp :: (a, b, c, d, e, f) -> Exp Source #

(ToExp a, ToExp b, ToExp c, ToExp d, ToExp e, ToExp f, ToExp g) => ToExp (a, b, c, d, e, f, g) Source # 

Methods

toExp :: (a, b, c, d, e, f, g) -> Exp Source #

toExpIntegral Source #

Arguments

:: Integral a 
=> Type

the Template Haskell Type representing the type of a

-> a

the value to be converted to an Exp

-> Exp 

An implementation of toExp that can be used for types with an Integral instance.

>>> toExpIntegral (ConT ''Int) 3
SigE (LitE (IntegerL 3)) (ConT GHC.Types.Int)