lens-5.2.3: Lenses, Folds and Traversals
Copyright(C) 2012-2016 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
PortabilityTemplateHaskell
Safe HaskellTrustworthy
LanguageHaskell2010

Language.Haskell.TH.Lens

Description

Lenses, Prisms, and Traversals for working with Template Haskell.

Beware that the API offered in this module is subject to change, as it mirrors the API exposed by the template-haskell package, which frequently changes between different releases of GHC. An effort is made to identify the functions in this module which have different type signatures when compiled with different versions of template-haskell.

Synopsis

Traversals

class HasName t where Source #

Has a Name

Methods

name :: Lens' t Name Source #

Extract (or modify) the Name of something

Instances

Instances details
HasName Con Source #

On template-haskell-2.11.0.0 or later, if a GadtC or RecGadtC has multiple Names, the leftmost Name will be chosen.

Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' Con Name Source #

HasName Foreign Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' Foreign Name Source #

HasName InjectivityAnn Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' InjectivityAnn Name Source #

HasName Name Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' Name Name Source #

HasName RuleBndr Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' RuleBndr Name Source #

HasName TypeFamilyHead Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' TypeFamilyHead Name Source #

HasName (TyVarBndr_ flag) Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' (TyVarBndr_ flag) Name Source #

class HasTypes t where Source #

Contains some amount of Types inside

Methods

types :: Traversal' t Type Source #

Traverse all the types

Instances

Instances details
HasTypes Con Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' Con Type Source #

HasTypes Foreign Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' Foreign Type Source #

HasTypes TySynEqn Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' TySynEqn Type Source #

HasTypes Type Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' Type Type Source #

HasTypes t => HasTypes [t] Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' [t] Type Source #

class HasTypeVars t where Source #

Provides for the extraction of free type variables, and alpha renaming.

Methods

typeVarsEx :: Set Name -> Traversal' t Name Source #

When performing substitution into this traversal you're not allowed to substitute in a name that is bound internally or you'll violate the Traversal laws, when in doubt generate your names with newName.

Instances

Instances details
HasTypeVars Con Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' Con Name Source #

HasTypeVars Name Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' Name Name Source #

HasTypeVars Type Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' Type Name Source #

HasTypeVars (TyVarBndr_ flag) Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' (TyVarBndr_ flag) Name Source #

HasTypeVars t => HasTypeVars (Maybe t) Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' (Maybe t) Name Source #

HasTypeVars t => HasTypeVars [t] Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' [t] Name Source #

class SubstType t where Source #

Provides substitution for types

Methods

substType :: Map Name Type -> t -> t Source #

Perform substitution for types

Instances

Instances details
SubstType Type Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

substType :: Map Name Type -> Type -> Type Source #

SubstType t => SubstType [t] Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

substType :: Map Name Type -> [t] -> [t] Source #

typeVars :: HasTypeVars t => Traversal' t Name Source #

Traverse free type variables

substTypeVars :: HasTypeVars t => Map Name Name -> t -> t Source #

Substitute using a map of names in for free type variables

conFields :: Traversal' Con BangType Source #

Provides a Traversal of the types of each field of a constructor.

conNamedFields :: Traversal' Con VarBangType Source #

Traversal of the types of the named fields of a constructor.

Lenses

Loc Lenses

locFileName :: Lens' Loc String Source #

locPackage :: Lens' Loc String Source #

locModule :: Lens' Loc String Source #

locStart :: Lens' Loc CharPos Source #

locEnd :: Lens' Loc CharPos Source #

FunDep Lenses

funDepInputs :: Lens' FunDep [Name] Source #

funDepOutputs :: Lens' FunDep [Name] Source #

Match Lenses

matchPattern :: Lens' Match Pat Source #

matchBody :: Lens' Match Body Source #

Fixity Lenses

fixityDirection :: Lens' Fixity FixityDirection Source #

Clause Lenses

clausePattern :: Lens' Clause [Pat] Source #

clauseBody :: Lens' Clause Body Source #

clauseDecs :: Lens' Clause [Dec] Source #

FieldExp Lenses

fieldExpName :: Lens' FieldExp Name Source #

FieldPat Lenses

fieldPatName :: Lens' FieldPat Name Source #

fieldPatPattern :: Lens' FieldPat Pat Source #

TySynEqn Lenses

tySynEqnLHS :: Lens' TySynEqn Type Source #

tySynEqnPatterns :: Lens' TySynEqn [Type] Source #

tySynEqnResult :: Lens' TySynEqn Type Source #

InjectivityAnn Lenses

injectivityAnnOutput :: Lens' InjectivityAnn Name Source #

injectivityAnnInputs :: Lens' InjectivityAnn [Name] Source #

TypeFamilyHead Lenses

typeFamilyHeadName :: Lens' TypeFamilyHead Name Source #

typeFamilyHeadResultSig :: Lens' TypeFamilyHead FamilyResultSig Source #

typeFamilyHeadInjectivityAnn :: Lens' TypeFamilyHead (Maybe InjectivityAnn) Source #

Bang Lenses

bangSourceUnpackedness :: Lens' Bang SourceUnpackedness Source #

bangSourceStrictness :: Lens' Bang SourceStrictness Source #

DerivClause Lenses

derivClauseStrategy :: Lens' DerivClause (Maybe DerivStrategy) Source #

derivClauseCxt :: Lens' DerivClause Cxt Source #

Prisms

Info Prisms

_ClassI :: Prism' Info (Dec, [InstanceDec]) Source #

_ClassOpI :: Prism' Info (Name, Type, ParentName) Source #

_TyConI :: Prism' Info Dec Source #

_FamilyI :: Prism' Info (Dec, [InstanceDec]) Source #

_PrimTyConI :: Prism' Info (Name, Arity, Unlifted) Source #

_DataConI :: Prism' Info (Name, Type, ParentName) Source #

_VarI :: Prism' Info (Name, Type, Maybe Dec) Source #

_TyVarI :: Prism' Info (Name, Type) Source #

_PatSynI :: Prism' Info (Name, PatSynType) Source #

Dec Prisms

_FunD :: Prism' Dec (Name, [Clause]) Source #

_ValD :: Prism' Dec (Pat, Body, [Dec]) Source #

_DataD :: DataPrism' [TyVarBndrVis] [Con] Source #

_DataD :: Prism' Dec (Cxt, Name, [TyVarBndrUnit], Maybe Kind, [Con], [DerivClause]) -- template-haskell-2.12+
_DataD :: Prism' Dec (Cxt, Name, [Type],          Maybe Kind, [Con], Cxt)           -- Earlier versions

_NewtypeD :: DataPrism' [TyVarBndrVis] Con Source #

_NewtypeD :: Prism' Dec (Cxt, Name, [TyVarBndrUnit], Maybe Kind, Con, [DerivClause]) -- template-haskell-2.12+
_NewtypeD :: Prism' Dec (Cxt, Name, [Type],          Maybe Kind, Con, Cxt)           -- Earlier versions

_TySynD :: Prism' Dec (Name, [TyVarBndrVis], Type) Source #

_ClassD :: Prism' Dec (Cxt, Name, [TyVarBndrVis], [FunDep], [Dec]) Source #

_InstanceD :: Prism' Dec (Maybe Overlap, Cxt, Type, [Dec]) Source #

_SigD :: Prism' Dec (Name, Type) Source #

_ForeignD :: Prism' Dec Foreign Source #

_InfixD :: Prism' Dec (Fixity, Name) Source #

_PragmaD :: Prism' Dec Pragma Source #

_DataInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, [Con], [DerivClause]) Source #

_DataInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, [Con], [DerivClause]) -- template-haskell-2.15+
_DataInstD :: Prism' Dec (Cxt, Name, [Type],                Maybe Kind, [Con], [DerivClause]) -- template-haskell-2.12 through 2.14
_DataInstD :: Prism' Dec (Cxt, Name, [Type],                Maybe Kind, [Con], Cxt)           -- Earlier versions

_NewtypeInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, Con, [DerivClause]) Source #

_NewtypeInstD :: Prism' Dec (Cxt, Maybe [TyVarBndrUnit], Type, Maybe Kind, Con, [DerivClause]) -- template-haskell-2.15+
_NewtypeInstD :: Prism' Dec (Cxt, Name, [Type],                Maybe Kind, Con, [DerivClause]) -- template-haskell-2.12 through 2.14
_NewtypeInstD :: Prism' Dec (Cxt, Name, [Type],                Maybe Kind, Con, Cxt)           -- Earlier versions

_TySynInstD :: Prism' Dec TySynEqn Source #

_TySynInstD :: Prism' Dec TySynEqn             -- template-haskell-2.15+
_TySynInstD :: Prism' Dec (Name, TySynEqn)     -- template-haskell-2.9 through 2.14
_TySynInstD :: Prism' Dec (Name, [Type], Type) -- Earlier versions

_ClosedTypeFamilyD :: Prism' Dec (TypeFamilyHead, [TySynEqn]) Source #

_RoleAnnotD :: Prism' Dec (Name, [Role]) Source #

_StandaloneDerivD :: Prism' Dec (Maybe DerivStrategy, Cxt, Type) Source #

_StandaloneDerivD :: Prism' Dec (Maybe DerivStrategy, Cxt, Type) -- template-haskell-2.12+
_StandaloneDerivD :: Prism' Dec                      (Cxt, Type) -- Earlier versions

_DefaultSigD :: Prism' Dec (Name, Type) Source #

_DataFamilyD :: Prism' Dec (Name, [TyVarBndrVis], Maybe Kind) Source #

_OpenTypeFamilyD :: Prism' Dec TypeFamilyHead Source #

_PatSynD :: Prism' Dec (Name, PatSynArgs, PatSynDir, Pat) Source #

_PatSynSigD :: Prism' Dec (Name, PatSynType) Source #

_ImplicitParamBindD :: Prism' Dec (String, Exp) Source #

_DefaultD :: Prism' Dec [Type] Source #

PatSynDir Prisms

_Unidir :: Prism' PatSynDir () Source #

_ImplBidir :: Prism' PatSynDir () Source #

_ExplBidir :: Prism' PatSynDir [Clause] Source #

PatSynArgs Prisms

_PrefixPatSyn :: Prism' PatSynArgs [Name] Source #

_InfixPatSyn :: Prism' PatSynArgs (Name, Name) Source #

_RecordPatSyn :: Prism' PatSynArgs [Name] Source #

Con Prisms

_NormalC :: Prism' Con (Name, [BangType]) Source #

_RecC :: Prism' Con (Name, [VarBangType]) Source #

_InfixC :: Prism' Con (BangType, Name, BangType) Source #

_ForallC :: Prism' Con ([TyVarBndrSpec], Cxt, Con) Source #

_GadtC :: Prism' Con ([Name], [BangType], Type) Source #

_RecGadtC :: Prism' Con ([Name], [VarBangType], Type) Source #

Overlap Prisms

_Overlapping :: Prism' Overlap () Source #

_Overlaps :: Prism' Overlap () Source #

_Incoherent :: Prism' Overlap () Source #

SourceUnpackedness Prisms

_NoSourceUnpackedness :: Prism' SourceUnpackedness () Source #

_SourceNoUnpack :: Prism' SourceUnpackedness () Source #

_SourceUnpack :: Prism' SourceUnpackedness () Source #

SourceStrictness Prisms

_NoSourceStrictness :: Prism' SourceStrictness () Source #

_SourceLazy :: Prism' SourceStrictness () Source #

_SourceStrict :: Prism' SourceStrictness () Source #

DecidedStrictness Prisms

_DecidedLazy :: Prism' DecidedStrictness () Source #

_DecidedStrict :: Prism' DecidedStrictness () Source #

_DecidedUnpack :: Prism' DecidedStrictness () Source #

Foreign Prisms

_ImportF :: Prism' Foreign (Callconv, Safety, String, Name, Type) Source #

_ExportF :: Prism' Foreign (Callconv, String, Name, Type) Source #

Callconv Prisms

_CCall :: Prism' Callconv () Source #

_StdCall :: Prism' Callconv () Source #

_CApi :: Prism' Callconv () Source #

_Prim :: Prism' Callconv () Source #

_JavaScript :: Prism' Callconv () Source #

Safety Prisms

_Unsafe :: Prism' Safety () Source #

_Safe :: Prism' Safety () Source #

Pragma Prisms

_InlineP :: Prism' Pragma (Name, Inline, RuleMatch, Phases) Source #

_SpecialiseP :: Prism' Pragma (Name, Type, Maybe Inline, Phases) Source #

_RuleP :: Prism' Pragma (String, Maybe [TyVarBndrUnit], [RuleBndr], Exp, Exp, Phases) Source #

_RuleP :: Prism' Pragma (String, Maybe [TyVarBndrUnit], [RuleBndr], Exp, Exp, Phases) -- template-haskell-2.15+
_RuleP :: Prism' Pragma (String,                        [RuleBndr], Exp, Exp, Phases) -- Earlier versions

_AnnP :: Prism' Pragma (AnnTarget, Exp) Source #

_LineP :: Prism' Pragma (Int, String) Source #

_CompleteP :: Prism' Pragma ([Name], Maybe Name) Source #

_OpaqueP :: Prism' Pragma Name Source #

Inline Prisms

_NoInline :: Prism' Inline () Source #

_Inline :: Prism' Inline () Source #

_Inlinable :: Prism' Inline () Source #

RuleMatch Prisms

_ConLike :: Prism' RuleMatch () Source #

_FunLike :: Prism' RuleMatch () Source #

Phases Prisms

_AllPhases :: Prism' Phases () Source #

_FromPhase :: Prism' Phases Int Source #

_BeforePhase :: Prism' Phases Int Source #

RuleBndr Prisms

_RuleVar :: Prism' RuleBndr Name Source #

_TypedRuleVar :: Prism' RuleBndr (Name, Type) Source #

AnnTarget Prisms

_TypeAnnotation :: Prism' AnnTarget Name Source #

_ValueAnnotation :: Prism' AnnTarget Name Source #

FunDep Prisms TODO make a lens

_FunDep :: Iso' FunDep ([Name], [Name]) Source #

FixityDirection Prisms

_InfixL :: Prism' FixityDirection () Source #

_InfixR :: Prism' FixityDirection () Source #

_InfixN :: Prism' FixityDirection () Source #

Exp Prisms

_VarE :: Prism' Exp Name Source #

_ConE :: Prism' Exp Name Source #

_LitE :: Prism' Exp Lit Source #

_AppE :: Prism' Exp (Exp, Exp) Source #

_AppTypeE :: Prism' Exp (Exp, Type) Source #

_InfixE :: Prism' Exp (Maybe Exp, Exp, Maybe Exp) Source #

_UInfixE :: Prism' Exp (Exp, Exp, Exp) Source #

_ParensE :: Prism' Exp Exp Source #

_LamE :: Prism' Exp ([Pat], Exp) Source #

_LamCaseE :: Prism' Exp [Match] Source #

_TupE :: Prism' Exp [Maybe Exp] Source #

_TupE :: Prism' Exp [Maybe Exp] -- template-haskell-2.16+
_TupE :: Prism' Exp [Exp]       -- Earlier versions

_UnboxedTupE :: Prism' Exp [Maybe Exp] Source #

_UnboxedTupE :: Prism' Exp [Maybe Exp] -- template-haskell-2.16+
_UnboxedTupE :: Prism' Exp [Exp]       -- Earlier versions

_UnboxedSumE :: Prism' Exp (Exp, SumAlt, SumArity) Source #

_CondE :: Prism' Exp (Exp, Exp, Exp) Source #

_MultiIfE :: Prism' Exp [(Guard, Exp)] Source #

_LetE :: Prism' Exp ([Dec], Exp) Source #

_CaseE :: Prism' Exp (Exp, [Match]) Source #

_DoE :: Prism' Exp (Maybe ModName, [Stmt]) Source #

_DoE :: Prism' Exp (Maybe ModName, [Stmt]) -- template-haskell-2.17+
_DoE :: Prism' Exp [Stmt]                  -- Earlier versions

_CompE :: Prism' Exp [Stmt] Source #

_ArithSeqE :: Prism' Exp Range Source #

_ListE :: Prism' Exp [Exp] Source #

_SigE :: Prism' Exp (Exp, Type) Source #

_RecConE :: Prism' Exp (Name, [FieldExp]) Source #

_RecUpdE :: Prism' Exp (Exp, [FieldExp]) Source #

_StaticE :: Prism' Exp Exp Source #

_LabelE :: Prism' Exp String Source #

_MDoE :: Prism' Exp (Maybe ModName, [Stmt]) Source #

_MDoE :: Prism' Exp (Maybe ModName, [Stmt]) -- template-haskell-2.17+
_MDoE :: Prism' Exp [Stmt]                  -- Earlier versions

_GetFieldE :: Prism' Exp (Exp, String) Source #

_ProjectionE :: Prism' Exp (NonEmpty String) Source #

_LamCasesE :: Prism' Exp [Clause] Source #

Body Prisms

_GuardedB :: Prism' Body [(Guard, Exp)] Source #

_NormalB :: Prism' Body Exp Source #

Guard Prisms

_NormalG :: Prism' Guard Exp Source #

_PatG :: Prism' Guard [Stmt] Source #

Stmt Prisms

_BindS :: Prism' Stmt (Pat, Exp) Source #

_LetS :: Prism' Stmt [Dec] Source #

_NoBindS :: Prism' Stmt Exp Source #

_ParS :: Prism' Stmt [[Stmt]] Source #

_RecS :: Prism' Stmt [Stmt] Source #

Range Prisms

_FromR :: Prism' Range Exp Source #

_FromThenR :: Prism' Range (Exp, Exp) Source #

_FromToR :: Prism' Range (Exp, Exp) Source #

_FromThenToR :: Prism' Range (Exp, Exp, Exp) Source #

Lit Prisms

_CharL :: Prism' Lit Char Source #

_StringL :: Prism' Lit String Source #

_IntegerL :: Prism' Lit Integer Source #

_RationalL :: Prism' Lit Rational Source #

_IntPrimL :: Prism' Lit Integer Source #

_WordPrimL :: Prism' Lit Integer Source #

_FloatPrimL :: Prism' Lit Rational Source #

_DoublePrimL :: Prism' Lit Rational Source #

_StringPrimL :: Prism' Lit [Word8] Source #

_BytesPrimL :: Prism' Lit Bytes Source #

Pat Prisms

_LitP :: Prism' Pat Lit Source #

_VarP :: Prism' Pat Name Source #

_TupP :: Prism' Pat [Pat] Source #

_UnboxedSumP :: Prism' Pat (Pat, SumAlt, SumArity) Source #

_ConP :: Prism' Pat (Name, [Type], [Pat]) Source #

_ConP :: Prism' Pat (Name, [Type], [Pat]) -- template-haskell-2.18+
_ConP :: Prism' Pat (Name,         [Pat]) -- Earlier versions

_InfixP :: Prism' Pat (Pat, Name, Pat) Source #

_UInfixP :: Prism' Pat (Pat, Name, Pat) Source #

_ParensP :: Prism' Pat Pat Source #

_TildeP :: Prism' Pat Pat Source #

_BangP :: Prism' Pat Pat Source #

_AsP :: Prism' Pat (Name, Pat) Source #

_WildP :: Prism' Pat () Source #

_RecP :: Prism' Pat (Name, [FieldPat]) Source #

_ListP :: Prism' Pat [Pat] Source #

_SigP :: Prism' Pat (Pat, Type) Source #

_ViewP :: Prism' Pat (Exp, Pat) Source #

Type Prisms

_ForallT :: Prism' Type ([TyVarBndrSpec], Cxt, Type) Source #

_AppT :: Prism' Type (Type, Type) Source #

_SigT :: Prism' Type (Type, Kind) Source #

_VarT :: Prism' Type Name Source #

_ConT :: Prism' Type Name Source #

_PromotedT :: Prism' Type Name Source #

_TupleT :: Prism' Type Int Source #

_UnboxedSumT :: Prism' Type SumArity Source #

_ArrowT :: Prism' Type () Source #

_ListT :: Prism' Type () Source #

_StarT :: Prism' Type () Source #

_LitT :: Prism' Type TyLit Source #

_InfixT :: Prism' Type (Type, Name, Type) Source #

_UInfixT :: Prism' Type (Type, Name, Type) Source #

_ParensT :: Prism' Type Type Source #

_AppKindT :: Prism' Type (Type, Kind) Source #

_ImplicitParamT :: Prism' Type (String, Type) Source #

_ForallVisT :: Prism' Type ([TyVarBndrUnit], Type) Source #

_PromotedInfixT :: Prism' Type (Type, Name, Type) Source #

_PromotedUInfixT :: Prism' Type (Type, Name, Type) Source #

Specificity Prisms

_SpecifiedSpec :: Prism' Specificity () Source #

_InferredSpec :: Prism' Specificity () Source #

TyVarBndr Prisms

_PlainTV :: Prism' (TyVarBndr flag) (Name, flag) Source #

_PlainTV :: Prism' (TyVarBndr flag) (Name, flag) -- template-haskell-2.17+
_PlainTV :: Prism'  TyVarBndr        Name        -- Earlier versions

_KindedTV :: Prism' (TyVarBndr flag) (Name, flag, Kind) Source #

_KindedTV :: Prism' (TyVarBndr flag) (Name, flag, Kind) -- template-haskell-2.17+
_KindedTV :: Prism'  TyVarBndr       (Name,       Kind) -- Earlier versions

FamilyResultSig Prisms

_NoSig :: Prism' FamilyResultSig () Source #

_KindSig :: Prism' FamilyResultSig Kind Source #

_TyVarSig :: Prism' FamilyResultSig TyVarBndrUnit Source #

TyLit Prisms

_NumTyLit :: Prism' TyLit Integer Source #

_StrTyLit :: Prism' TyLit String Source #

_CharTyLit :: Prism' TyLit Char Source #

Role Prisms

_InferR :: Prism' Role () Source #

DerivStrategy Prisms

_StockStrategy :: Prism' DerivStrategy () Source #

_AnyclassStrategy :: Prism' DerivStrategy () Source #

_NewtypeStrategy :: Prism' DerivStrategy () Source #