A Lift instance can have any of its values turned into a Template
Haskell expression. This is needed when a value used within a Template
Haskell quotation is bound outside the Oxford brackets ([| ... |] or
[|| ... ||]) but not at the top level. As an example:
add1 :: Int -> Code Q Int
add1 x = [|| x + 1 ||]Template Haskell has no way of knowing what value x will take on at
splice-time, so it requires the type of x to be an instance of Lift.
A Lift instance must satisfy $(lift x) ≡ x and $$(liftTyped x) ≡ x
for all x, where $(...) and $$(...) are Template Haskell splices.
It is additionally expected that lift x ≡ unTypeCode (liftTyped x).
Lift instances can be derived automatically by use of the -XDeriveLift
GHC language extension:
{-# LANGUAGE DeriveLift #-}
module Foo where
import Language.Haskell.TH.Syntax
data Bar a = Bar1 a (Bar a) | Bar2 String
deriving LiftRepresentation-polymorphic since template-haskell-2.16.0.0.
This is exposed both from the template-haskell-lift and template-haskell packages.
Consider importing it from the more stable template-haskell-lift if you don't need the full breadth of the template-haskell interface.
Instances108Lift, …
Lift VoidDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift IntegerDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NaturalDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ForeignSrcLangDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Int16Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Int32Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Int64Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Int8Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ExtensionDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Addr#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftProduces an Addr# literal from the NUL-terminated C-string starting at the given memory address.
Lift Char#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Double#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Float#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Int#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Word#Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift AnnLookupDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift AnnTargetDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift BangDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift BndrVisDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift BodyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift BytesDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift CallconvDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ClauseDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ConDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DecDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DecidedStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DerivClauseDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DerivStrategyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DocLocDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ExpDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift FamilyResultSigDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift FixityDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift FixityDirectionDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ForeignDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift FunDepDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift GuardDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift InfoDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift InjectivityAnnDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift InlineDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift LitDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift LocDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift MatchDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ModNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ModuleDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NameFlavourDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NameIsDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NameSpaceDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift NamespaceSpecifierDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift OccNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift OverlapDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PatDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PatSynArgsDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PatSynDirDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PhasesDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PkgNameDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift PragmaDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift RangeDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift RoleDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift RuleBndrDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift RuleMatchDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift SafetyDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift SourceStrictnessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift SourceUnpackednessDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift SpecificityDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift StmtDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift TyLitDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift TySynEqnDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift TypeDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift TypeFamilyHeadDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift BoolDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift CharDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift DoubleDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift FloatDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift IntDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift WordDefined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Word16Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Word32Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Word64Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift Word8Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift ()Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift (# #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftIntegral a => Lift (Ratio a)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift a => Lift (NonEmpty a)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift a => Lift (Maybe a)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift a => Lift (TyVarBndr a)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift a => Lift [a]Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift (TExp a)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b) => Lift (Either a b)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b) => Lift (a, b)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c) => Lift (a, b, c)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d) => Lift (a, b, c, d)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e) => Lift (a, b, c, d, e)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift (a, b, c, d, e, f)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift (a, b, c, d, e, f, g)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.LiftLift a => Lift (# a #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b) => Lift (# a, b #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b) => Lift (# a | b #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c) => Lift (# a, b, c #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c) => Lift (# a | b | c #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d) => Lift (# a, b, c, d #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d) => Lift (# a | b | c | d #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e) => Lift (# a, b, c, d, e #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e) => Lift (# a | b | c | d | e #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift (# a, b, c, d, e, f #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift (# a | b | c | d | e | f #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift (# a, b, c, d, e, f, g #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift (# a | b | c | d | e | f | g #)Defined in ghc-internal-10.0.0 · GHC.Internal.TH.Lift