th-to-exp-0.0.1.0: 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 #

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 #

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

Instances

ToExp Bool # 

Methods

toExp :: Bool -> Exp #

ToExp Char # 

Methods

toExp :: Char -> Exp #

ToExp Int # 

Methods

toExp :: Int -> Exp #

ToExp Integer # 

Methods

toExp :: Integer -> Exp #

ToExp Ordering # 

Methods

toExp :: Ordering -> Exp #

ToExp Word8 # 

Methods

toExp :: Word8 -> Exp #

ToExp Exp # 

Methods

toExp :: Exp -> Exp #

ToExp Match # 

Methods

toExp :: Match -> Exp #

ToExp Clause # 

Methods

toExp :: Clause -> Exp #

ToExp Pat # 

Methods

toExp :: Pat -> Exp #

ToExp Type # 

Methods

toExp :: Type -> Exp #

ToExp Dec # 

Methods

toExp :: Dec -> Exp #

ToExp Name # 

Methods

toExp :: Name -> Exp #

ToExp FunDep # 

Methods

toExp :: FunDep -> Exp #

ToExp TyVarBndr # 

Methods

toExp :: TyVarBndr -> Exp #

ToExp InjectivityAnn # 

Methods

toExp :: InjectivityAnn -> Exp #

ToExp Overlap # 

Methods

toExp :: Overlap -> Exp #

ToExp () # 

Methods

toExp :: () -> Exp #

ToExp Extension # 

Methods

toExp :: Extension -> Exp #

ToExp ModName # 

Methods

toExp :: ModName -> Exp #

ToExp PkgName # 

Methods

toExp :: PkgName -> Exp #

ToExp Module # 

Methods

toExp :: Module -> Exp #

ToExp OccName # 

Methods

toExp :: OccName -> Exp #

ToExp NameFlavour # 

Methods

toExp :: NameFlavour -> Exp #

ToExp NameSpace # 

Methods

toExp :: NameSpace -> Exp #

ToExp Info # 

Methods

toExp :: Info -> Exp #

ToExp ModuleInfo # 

Methods

toExp :: ModuleInfo -> Exp #

ToExp Fixity # 

Methods

toExp :: Fixity -> Exp #

ToExp FixityDirection # 

Methods

toExp :: FixityDirection -> Exp #

ToExp Lit # 

Methods

toExp :: Lit -> Exp #

ToExp Body # 

Methods

toExp :: Body -> Exp #

ToExp Guard # 

Methods

toExp :: Guard -> Exp #

ToExp Stmt # 

Methods

toExp :: Stmt -> Exp #

ToExp Range # 

Methods

toExp :: Range -> Exp #

ToExp TypeFamilyHead # 

Methods

toExp :: TypeFamilyHead -> Exp #

ToExp TySynEqn # 

Methods

toExp :: TySynEqn -> Exp #

ToExp Foreign # 

Methods

toExp :: Foreign -> Exp #

ToExp Callconv # 

Methods

toExp :: Callconv -> Exp #

ToExp Safety # 

Methods

toExp :: Safety -> Exp #

ToExp Pragma # 

Methods

toExp :: Pragma -> Exp #

ToExp Inline # 

Methods

toExp :: Inline -> Exp #

ToExp RuleMatch # 

Methods

toExp :: RuleMatch -> Exp #

ToExp Phases # 

Methods

toExp :: Phases -> Exp #

ToExp RuleBndr # 

Methods

toExp :: RuleBndr -> Exp #

ToExp AnnTarget # 

Methods

toExp :: AnnTarget -> Exp #

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

Methods

toExp :: Con -> Exp #

ToExp Bang # 

Methods

toExp :: Bang -> Exp #

ToExp FamilyResultSig # 

Methods

toExp :: FamilyResultSig -> Exp #

ToExp TyLit # 

Methods

toExp :: TyLit -> Exp #

ToExp Role # 

Methods

toExp :: Role -> Exp #

ToExp AnnLookup # 

Methods

toExp :: AnnLookup -> Exp #

ToExp a => ToExp [a] #

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

Methods

toExp :: [a] -> Exp #

ToExp a => ToExp (Maybe a) # 

Methods

toExp :: Maybe a -> Exp #

ToExp a => ToExp (Ratio a) # 

Methods

toExp :: Ratio a -> Exp #

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

Methods

toExp :: Either a b -> Exp #

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

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

Methods

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

toExpIntegral #

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)