lens-4.17.1: 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

Contents

Description

Lenses, Prisms, and Traversals for working with 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
HasName Name Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' Name Name Source #

HasName InjectivityAnn Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' InjectivityAnn Name Source #

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 RuleBndr Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' RuleBndr Name Source #

HasName TyVarBndr Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' TyVarBndr Name Source #

HasName TypeFamilyHead Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

name :: Lens' TypeFamilyHead Name Source #

class HasTypes t where Source #

Contains some amount of Types inside

Methods

types :: Traversal' t Type Source #

Traverse all the types

Instances
HasTypes Type Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

types :: Traversal' Type Type Source #

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 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
HasTypeVars Type Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

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

HasTypeVars Name Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

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

HasTypeVars Con Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

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

HasTypeVars TyVarBndr Source # 
Instance details

Defined in Language.Haskell.TH.Lens

Methods

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

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

Defined in Language.Haskell.TH.Lens

Methods

typeVarsEx :: Set Name -> Traversal' [t] 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 #

class SubstType t where Source #

Provides substitution for types

Methods

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

Perform substitution for types

Instances
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

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 #

typeFamilyHeadTyVarBndrs :: Lens' TypeFamilyHead [TyVarBndr] 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' [TyVarBndr] [Con] Source #

_NewtypeD :: DataPrism' [TyVarBndr] Con Source #

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

_ClassD :: Prism' Dec (Cxt, Name, [TyVarBndr], [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 :: DataPrism' [Type] [Con] Source #

_NewtypeInstD :: DataPrism' [Type] Con Source #

_TySynInstD :: Prism' Dec (Name, TySynEqn) Source #

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

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

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

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

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

_OpenTypeFamilyD :: Prism' Dec TypeFamilyHead Source #

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

_PatSynSigD :: Prism' Dec (Name, PatSynType) 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 ([TyVarBndr], 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, [RuleBndr], Exp, Exp, Phases) Source #

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

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

_CompleteP :: Prism' Pragma ([Name], Maybe 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 [Exp] Source #

_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 [Stmt] Source #

_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 #

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 #

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 #

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, [Pat]) Source #

_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 ([TyVarBndr], 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 #

TyVarBndr Prisms

_PlainTV :: Prism' TyVarBndr Name Source #

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

FamilyResultSig Prisms

_NoSig :: Prism' FamilyResultSig () Source #

_KindSig :: Prism' FamilyResultSig Kind Source #

_TyVarSig :: Prism' FamilyResultSig TyVarBndr Source #

TyLit Prisms

_NumTyLit :: Prism' TyLit Integer Source #

_StrTyLit :: Prism' TyLit String Source #

Role Prisms

_InferR :: Prism' Role () Source #

DerivStrategy Prisms

_StockStrategy :: Prism' DerivStrategy () Source #

_AnyclassStrategy :: Prism' DerivStrategy () Source #

_NewtypeStrategy :: Prism' DerivStrategy () Source #