haskell-tools-ast 0.1.2.1 → 0.1.3.0
raw patch · 32 files changed
+1994/−1350 lines, 32 filesdep +mtldep +template-haskelldep −structural-traversalPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: mtl, template-haskell
Dependencies removed: structural-traversal
API changes (from Hackage documentation)
- Language.Haskell.Tools.AST: Alt :: Ann Pattern a -> Ann (CaseRhs' expr) a -> AnnMaybe LocalBinds a -> Alt' expr a
- Language.Haskell.Tools.AST: AmbiguousNameInfo :: [[Name]] -> Bool -> RdrName -> SrcSpan -> SemanticInfo n
- Language.Haskell.Tools.AST: Ann :: annot -> elem annot -> Ann elem annot
- Language.Haskell.Tools.AST: AnnList :: a -> [Ann e a] -> AnnList e a
- Language.Haskell.Tools.AST: AnnMaybe :: a -> Maybe (Ann e a) -> AnnMaybe e a
- Language.Haskell.Tools.AST: AnnPragma :: Ann AnnotationSubject a -> Ann Expr a -> TopLevelPragma a
- Language.Haskell.Tools.AST: App :: Ann Expr a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: AppCmd :: Ann Cmd a -> Ann Expr a -> Cmd a
- Language.Haskell.Tools.AST: AppPat :: Ann Name a -> AnnList Pattern a -> Pattern a
- Language.Haskell.Tools.AST: ArrowApp :: Ann Expr a -> Ann ArrowAppl a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: ArrowAppCmd :: Ann Expr a -> Ann ArrowAppl a -> Ann Expr a -> Cmd a
- Language.Haskell.Tools.AST: ArrowFormCmd :: Ann Expr a -> AnnList Cmd a -> Cmd a
- Language.Haskell.Tools.AST: AsPat :: Ann Name a -> Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: AssocLeft :: Assoc a
- Language.Haskell.Tools.AST: AssocNone :: Assoc a
- Language.Haskell.Tools.AST: AssocRight :: Assoc a
- Language.Haskell.Tools.AST: BacktickOp :: Ann SimpleName a -> Operator a
- Language.Haskell.Tools.AST: BangPat :: Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: BidirectionalPatSyn :: Ann Pattern a -> AnnMaybe PatSynWhere a -> PatSynRhs a
- Language.Haskell.Tools.AST: BindStmt :: Ann Pattern a -> Ann expr a -> Stmt' expr a
- Language.Haskell.Tools.AST: BracketExpr :: Ann Bracket a -> Expr a
- Language.Haskell.Tools.AST: CApi :: CallConv a
- Language.Haskell.Tools.AST: CCall :: CallConv a
- Language.Haskell.Tools.AST: CPlusPlus :: CallConv a
- Language.Haskell.Tools.AST: Case :: Ann Expr a -> AnnList Alt a -> Expr a
- Language.Haskell.Tools.AST: CaseCmd :: Ann Expr a -> AnnList CmdAlt a -> Cmd a
- Language.Haskell.Tools.AST: CharLit :: Char -> Literal a
- Language.Haskell.Tools.AST: ClassAssert :: Ann Name a -> AnnList Type a -> Assertion a
- Language.Haskell.Tools.AST: ClassBody :: AnnList ClassElement a -> ClassBody a
- Language.Haskell.Tools.AST: ClassDecl :: AnnMaybe Context a -> Ann DeclHead a -> AnnMaybe FunDeps a -> AnnMaybe ClassBody a -> Decl a
- Language.Haskell.Tools.AST: ClosedTypeFamilyDecl :: Ann DeclHead a -> AnnMaybe KindConstraint a -> AnnList TypeEqn a -> Decl a
- Language.Haskell.Tools.AST: ClsDef :: Ann ValueBind a -> ClassElement a
- Language.Haskell.Tools.AST: ClsDefSig :: Ann Name a -> Ann Type a -> ClassElement a
- Language.Haskell.Tools.AST: ClsMinimal :: Ann MinimalFormula a -> ClassElement a
- Language.Haskell.Tools.AST: ClsPatSig :: Ann PatternTypeSignature a -> ClassElement a
- Language.Haskell.Tools.AST: ClsSig :: Ann TypeSignature a -> ClassElement a
- Language.Haskell.Tools.AST: ClsTypeDef :: Ann DeclHead a -> Ann Type a -> ClassElement a
- Language.Haskell.Tools.AST: ClsTypeFam :: Ann TypeFamily a -> ClassElement a
- Language.Haskell.Tools.AST: CompStmt :: Ann Stmt a -> CompStmt a
- Language.Haskell.Tools.AST: ConDecl :: Ann Name a -> AnnList Type a -> ConDecl a
- Language.Haskell.Tools.AST: ConlikeAnnot :: ConlikeAnnot a
- Language.Haskell.Tools.AST: ContextMulti :: AnnList Assertion a -> Context a
- Language.Haskell.Tools.AST: ContextOne :: Ann Assertion a -> Context a
- Language.Haskell.Tools.AST: CorePragma :: Ann StringNode a -> ExprPragma a
- Language.Haskell.Tools.AST: DHApp :: Ann DeclHead a -> Ann TyVar a -> DeclHead a
- Language.Haskell.Tools.AST: DHInfix :: Ann TyVar a -> Ann Operator a -> Ann TyVar a -> DeclHead a
- Language.Haskell.Tools.AST: DHParen :: Ann DeclHead a -> DeclHead a
- Language.Haskell.Tools.AST: DataDecl :: Ann DataOrNewtypeKeyword a -> AnnMaybe Context a -> Ann DeclHead a -> AnnList ConDecl a -> AnnMaybe Deriving a -> Decl a
- Language.Haskell.Tools.AST: DataFamily :: Ann DeclHead a -> AnnMaybe KindConstraint a -> TypeFamily a
- Language.Haskell.Tools.AST: DataInstDecl :: Ann DataOrNewtypeKeyword a -> Ann InstanceRule a -> AnnList ConDecl a -> AnnMaybe Deriving a -> Decl a
- Language.Haskell.Tools.AST: DataKeyword :: DataOrNewtypeKeyword a
- Language.Haskell.Tools.AST: DeclExport :: Ann IESpec a -> ExportSpec a
- Language.Haskell.Tools.AST: DeclHead :: Ann Name a -> DeclHead a
- Language.Haskell.Tools.AST: DeclsBracket :: AnnList Decl a -> Bracket a
- Language.Haskell.Tools.AST: DefaultDecl :: AnnList Type a -> Decl a
- Language.Haskell.Tools.AST: DeprPragma :: AnnList Name a -> Ann StringNode a -> TopLevelPragma a
- Language.Haskell.Tools.AST: DerivDecl :: AnnMaybe OverlapPragma a -> Ann InstanceRule a -> Decl a
- Language.Haskell.Tools.AST: DerivingOne :: Ann InstanceHead a -> Deriving a
- Language.Haskell.Tools.AST: Derivings :: AnnList InstanceHead a -> Deriving a
- Language.Haskell.Tools.AST: DisableOverlap :: OverlapPragma a
- Language.Haskell.Tools.AST: Do :: Ann DoKind a -> AnnList Stmt a -> Expr a
- Language.Haskell.Tools.AST: DoCmd :: AnnList (Stmt' Cmd) a -> Cmd a
- Language.Haskell.Tools.AST: DoKeyword :: DoKind a
- Language.Haskell.Tools.AST: DotNet :: CallConv a
- Language.Haskell.Tools.AST: EnableOverlap :: OverlapPragma a
- Language.Haskell.Tools.AST: Enum :: Ann Expr a -> AnnMaybe Expr a -> AnnMaybe Expr a -> Expr a
- Language.Haskell.Tools.AST: ExplTypeApp :: Ann Expr a -> Ann Type a -> Expr a
- Language.Haskell.Tools.AST: ExportSpecList :: AnnList ExportSpec a -> ExportSpecList a
- Language.Haskell.Tools.AST: ExprBracket :: Ann Expr a -> Bracket a
- Language.Haskell.Tools.AST: ExprPragma :: Ann ExprPragma a -> Expr a
- Language.Haskell.Tools.AST: ExprStmt :: Ann expr a -> Stmt' expr a
- Language.Haskell.Tools.AST: FieldDecl :: AnnList Name a -> Ann Type a -> FieldDecl a
- Language.Haskell.Tools.AST: FieldPun :: Ann Name a -> FieldUpdate a
- Language.Haskell.Tools.AST: FieldPunPattern :: Ann Name a -> PatternField a
- Language.Haskell.Tools.AST: FieldWildcard :: FieldUpdate a
- Language.Haskell.Tools.AST: FieldWildcardPattern :: PatternField a
- Language.Haskell.Tools.AST: FixityDecl :: Ann FixitySignature a -> Decl a
- Language.Haskell.Tools.AST: FixitySignature :: Ann Assoc a -> Ann Precedence a -> AnnList Operator a -> FixitySignature a
- Language.Haskell.Tools.AST: ForeignExport :: Ann CallConv a -> Ann Name a -> Ann Type a -> Decl a
- Language.Haskell.Tools.AST: ForeignImport :: Ann CallConv a -> AnnMaybe Safety a -> Ann Name a -> Ann Type a -> Decl a
- Language.Haskell.Tools.AST: FracLit :: Rational -> Literal a
- Language.Haskell.Tools.AST: FunBind :: AnnList Match a -> ValueBind a
- Language.Haskell.Tools.AST: FunDep :: AnnList Name a -> AnnList Name a -> FunDep a
- Language.Haskell.Tools.AST: FunDeps :: AnnList FunDep a -> FunDeps a
- Language.Haskell.Tools.AST: GDataDecl :: Ann DataOrNewtypeKeyword a -> AnnMaybe Context a -> Ann DeclHead a -> AnnMaybe KindConstraint a -> AnnList GadtConDecl a -> AnnMaybe Deriving a -> Decl a
- Language.Haskell.Tools.AST: GDataInstDecl :: Ann DataOrNewtypeKeyword a -> Ann InstanceRule a -> AnnMaybe KindConstraint a -> AnnList GadtConDecl a -> Decl a
- Language.Haskell.Tools.AST: GadtConDecl :: AnnList Name a -> Ann GadtConType a -> GadtConDecl a
- Language.Haskell.Tools.AST: GadtNamedField :: Ann Name a -> Ann Type a -> GadtField a
- Language.Haskell.Tools.AST: GadtNormalField :: Ann Type a -> GadtField a
- Language.Haskell.Tools.AST: GadtNormalType :: Ann Type a -> GadtConType a
- Language.Haskell.Tools.AST: GadtRecordType :: AnnList FieldDecl a -> Ann Type a -> GadtConType a
- Language.Haskell.Tools.AST: GeneratedPragma :: Ann SourceRange a -> ExprPragma a
- Language.Haskell.Tools.AST: GroupStmt :: AnnMaybe Expr a -> AnnMaybe Expr a -> CompStmt a
- Language.Haskell.Tools.AST: GuardBind :: Ann Pattern a -> Ann Expr a -> RhsGuard a
- Language.Haskell.Tools.AST: GuardCheck :: Ann Expr a -> RhsGuard a
- Language.Haskell.Tools.AST: GuardLet :: AnnList LocalBind a -> RhsGuard a
- Language.Haskell.Tools.AST: GuardedCaseRhs :: AnnList RhsGuard a -> Ann expr a -> GuardedCaseRhs' expr a
- Language.Haskell.Tools.AST: GuardedCaseRhss :: AnnList (GuardedCaseRhs' expr) a -> CaseRhs' expr a
- Language.Haskell.Tools.AST: GuardedRhs :: AnnList RhsGuard a -> Ann Expr a -> GuardedRhs a
- Language.Haskell.Tools.AST: GuardedRhss :: AnnList GuardedRhs a -> Rhs a
- Language.Haskell.Tools.AST: IESpec :: Ann Name a -> AnnMaybe SubSpec a -> IESpec a
- Language.Haskell.Tools.AST: IdSplice :: Ann Name a -> Splice a
- Language.Haskell.Tools.AST: If :: Ann Expr a -> Ann Expr a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: IfCmd :: Ann Expr a -> Ann Cmd a -> Ann Cmd a -> Cmd a
- Language.Haskell.Tools.AST: ImportDecl :: AnnMaybe ImportSource a -> AnnMaybe ImportQualified a -> AnnMaybe ImportSafe a -> AnnMaybe StringNode a -> Ann SimpleName a -> AnnMaybe ImportRenaming a -> AnnMaybe ImportSpec a -> ImportDecl a
- Language.Haskell.Tools.AST: ImportInfo :: Module -> [n] -> [n] -> SemanticInfo n
- Language.Haskell.Tools.AST: ImportQualified :: ImportQualified a
- Language.Haskell.Tools.AST: ImportRenaming :: Ann SimpleName a -> ImportRenaming a
- Language.Haskell.Tools.AST: ImportSafe :: ImportSafe a
- Language.Haskell.Tools.AST: ImportSource :: ImportSource a
- Language.Haskell.Tools.AST: ImportSpecHiding :: AnnList IESpec a -> ImportSpec a
- Language.Haskell.Tools.AST: ImportSpecList :: AnnList IESpec a -> ImportSpec a
- Language.Haskell.Tools.AST: IncoherentOverlap :: OverlapPragma a
- Language.Haskell.Tools.AST: InfixApp :: Ann Expr a -> Ann Operator a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: InfixAssert :: Ann Type a -> Ann Operator a -> Ann Type a -> Assertion a
- Language.Haskell.Tools.AST: InfixCmd :: Ann Cmd a -> Ann Name a -> Ann Cmd a -> Cmd a
- Language.Haskell.Tools.AST: InfixConDecl :: Ann Type a -> Ann Operator a -> Ann Type a -> ConDecl a
- Language.Haskell.Tools.AST: InfixLhs :: Ann Pattern a -> Ann Operator a -> Ann Pattern a -> AnnList Pattern a -> MatchLhs a
- Language.Haskell.Tools.AST: InfixPat :: Ann Pattern a -> Ann Operator a -> Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: InfixPatSyn :: Ann Name a -> Ann Operator a -> Ann Name a -> PatSynLhs a
- Language.Haskell.Tools.AST: InjectivityAnn :: Ann Name a -> AnnList Name a -> InjectivityAnn a
- Language.Haskell.Tools.AST: InlinablePragma :: AnnMaybe PhaseControl a -> Ann Name a -> TopLevelPragma a
- Language.Haskell.Tools.AST: InlinePragma :: AnnMaybe ConlikeAnnot a -> AnnMaybe PhaseControl a -> Ann Name a -> TopLevelPragma a
- Language.Haskell.Tools.AST: InstBody :: AnnList InstBodyDecl a -> InstBody a
- Language.Haskell.Tools.AST: InstBodyDataDecl :: Ann DataOrNewtypeKeyword a -> Ann InstanceRule a -> AnnList ConDecl a -> AnnMaybe Deriving a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstBodyGadtDataDecl :: Ann DataOrNewtypeKeyword a -> Ann InstanceRule a -> AnnMaybe Kind a -> AnnList GadtConDecl a -> AnnMaybe Deriving a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstBodyNormalDecl :: Ann ValueBind a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstBodyPatSyn :: Ann PatternSynonym a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstBodyTypeDecl :: Ann TypeEqn a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstBodyTypeSig :: Ann TypeSignature a -> InstBodyDecl a
- Language.Haskell.Tools.AST: InstDecl :: AnnMaybe OverlapPragma a -> Ann InstanceRule a -> AnnMaybe InstBody a -> Decl a
- Language.Haskell.Tools.AST: InstanceHeadApp :: Ann InstanceHead a -> Ann Type a -> InstanceHead a
- Language.Haskell.Tools.AST: InstanceHeadCon :: Ann Name a -> InstanceHead a
- Language.Haskell.Tools.AST: InstanceHeadInfix :: Ann Type a -> Ann Name a -> InstanceHead a
- Language.Haskell.Tools.AST: InstanceHeadParen :: Ann InstanceHead a -> InstanceHead a
- Language.Haskell.Tools.AST: InstanceParen :: Ann InstanceRule a -> InstanceRule a
- Language.Haskell.Tools.AST: InstanceRule :: AnnMaybe (AnnList TyVar) a -> AnnMaybe Context a -> Ann InstanceHead a -> InstanceRule a
- Language.Haskell.Tools.AST: IntLit :: Integer -> Literal a
- Language.Haskell.Tools.AST: Interruptible :: Safety a
- Language.Haskell.Tools.AST: IrrPat :: Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: JavaScript :: CallConv a
- Language.Haskell.Tools.AST: Js :: CallConv a
- Language.Haskell.Tools.AST: Jvm :: CallConv a
- Language.Haskell.Tools.AST: KindApp :: Ann Kind a -> Ann Kind a -> Kind a
- Language.Haskell.Tools.AST: KindConstraint :: Ann Kind a -> KindConstraint a
- Language.Haskell.Tools.AST: KindFn :: Ann Kind a -> Ann Kind a -> Kind a
- Language.Haskell.Tools.AST: KindList :: Ann Kind a -> Kind a
- Language.Haskell.Tools.AST: KindParen :: Ann Kind a -> Kind a
- Language.Haskell.Tools.AST: KindPromoted :: Ann (Promoted Kind) a -> Kind a
- Language.Haskell.Tools.AST: KindStar :: Kind a
- Language.Haskell.Tools.AST: KindUnbox :: Kind a
- Language.Haskell.Tools.AST: KindVar :: Ann Name a -> Kind a
- Language.Haskell.Tools.AST: LamCase :: AnnList Alt a -> Expr a
- Language.Haskell.Tools.AST: Lambda :: AnnList Pattern a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: LambdaCmd :: AnnList Pattern a -> Ann Cmd a -> Cmd a
- Language.Haskell.Tools.AST: LanguageExtension :: String -> LanguageExtension a
- Language.Haskell.Tools.AST: LanguagePragma :: AnnList LanguageExtension a -> FilePragma a
- Language.Haskell.Tools.AST: LeftAppl :: ArrowAppl a
- Language.Haskell.Tools.AST: LeftHighApp :: ArrowAppl a
- Language.Haskell.Tools.AST: LeftSection :: Ann Expr a -> Ann Operator a -> Expr a
- Language.Haskell.Tools.AST: Let :: AnnList LocalBind a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: LetCmd :: AnnList LocalBind a -> Ann Cmd a -> Cmd a
- Language.Haskell.Tools.AST: LetStmt :: AnnList LocalBind a -> Stmt' expr a
- Language.Haskell.Tools.AST: LineNumber :: Int -> LineNumber a
- Language.Haskell.Tools.AST: LinePragma :: Ann LineNumber a -> AnnMaybe StringNode a -> TopLevelPragma a
- Language.Haskell.Tools.AST: List :: AnnList Expr a -> Expr a
- Language.Haskell.Tools.AST: ListComp :: Ann Expr a -> AnnList ListCompBody a -> Expr a
- Language.Haskell.Tools.AST: ListCompBody :: AnnList CompStmt a -> ListCompBody a
- Language.Haskell.Tools.AST: ListPat :: AnnList Pattern a -> Pattern a
- Language.Haskell.Tools.AST: ListPos :: String -> String -> String -> Bool -> SrcLoc -> SpanInfo
- Language.Haskell.Tools.AST: Lit :: Ann Literal a -> Expr a
- Language.Haskell.Tools.AST: LitPat :: Ann Literal a -> Pattern a
- Language.Haskell.Tools.AST: LocalBinds :: AnnList LocalBind a -> LocalBinds a
- Language.Haskell.Tools.AST: LocalFixity :: Ann FixitySignature a -> LocalBind a
- Language.Haskell.Tools.AST: LocalSignature :: Ann TypeSignature a -> LocalBind a
- Language.Haskell.Tools.AST: LocalValBind :: Ann ValueBind a -> LocalBind a
- Language.Haskell.Tools.AST: MDoKeyword :: DoKind a
- Language.Haskell.Tools.AST: Match :: Ann MatchLhs a -> Ann Rhs a -> AnnMaybe LocalBinds a -> Match a
- Language.Haskell.Tools.AST: MinimalAnd :: AnnList MinimalFormula a -> MinimalFormula a
- Language.Haskell.Tools.AST: MinimalName :: Ann Name a -> MinimalFormula a
- Language.Haskell.Tools.AST: MinimalOr :: AnnList MinimalFormula a -> MinimalFormula a
- Language.Haskell.Tools.AST: MinimalParen :: Ann MinimalFormula a -> MinimalFormula a
- Language.Haskell.Tools.AST: Missing :: TupSecElem a
- Language.Haskell.Tools.AST: Module :: AnnList FilePragma a -> AnnMaybe ModuleHead a -> AnnList ImportDecl a -> AnnList Decl a -> Module a
- Language.Haskell.Tools.AST: ModuleAnnotation :: AnnotationSubject a
- Language.Haskell.Tools.AST: ModuleDeprecatedPragma :: AnnList StringNode a -> ModulePragma a
- Language.Haskell.Tools.AST: ModuleExport :: Ann SimpleName a -> ExportSpec a
- Language.Haskell.Tools.AST: ModuleHead :: Ann SimpleName a -> AnnMaybe ExportSpecList a -> AnnMaybe ModulePragma a -> ModuleHead a
- Language.Haskell.Tools.AST: ModuleInfo :: Module -> [n] -> SemanticInfo n
- Language.Haskell.Tools.AST: ModuleWarningPragma :: AnnList StringNode a -> ModulePragma a
- Language.Haskell.Tools.AST: MultiIf :: AnnList GuardedCaseRhs a -> Expr a
- Language.Haskell.Tools.AST: NPlusKPat :: Ann Name a -> Ann Literal a -> Pattern a
- Language.Haskell.Tools.AST: NameAnnotation :: Ann Name a -> AnnotationSubject a
- Language.Haskell.Tools.AST: NameInfo :: [[Name]] -> Bool -> n -> SemanticInfo n
- Language.Haskell.Tools.AST: NewtypeKeyword :: DataOrNewtypeKeyword a
- Language.Haskell.Tools.AST: NoInlinePragma :: AnnMaybe ConlikeAnnot a -> AnnMaybe PhaseControl a -> Ann Name a -> TopLevelPragma a
- Language.Haskell.Tools.AST: NoOrdSrcSpan :: FastString -> OrdSrcSpan
- Language.Haskell.Tools.AST: NoSemanticInfo :: SemanticInfo n
- Language.Haskell.Tools.AST: NodeInfo :: sema -> src -> NodeInfo sema src
- Language.Haskell.Tools.AST: NodeSpan :: SrcSpan -> SpanInfo
- Language.Haskell.Tools.AST: Nominal :: Role a
- Language.Haskell.Tools.AST: NormalFieldPattern :: Ann Name a -> Ann Pattern a -> PatternField a
- Language.Haskell.Tools.AST: NormalFieldUpdate :: Ann Name a -> Ann Expr a -> FieldUpdate a
- Language.Haskell.Tools.AST: NormalLhs :: Ann Name a -> AnnList Pattern a -> MatchLhs a
- Language.Haskell.Tools.AST: NormalName :: Ann SimpleName a -> Name a
- Language.Haskell.Tools.AST: NormalOp :: Ann SimpleName a -> Operator a
- Language.Haskell.Tools.AST: NormalPatSyn :: Ann Name a -> AnnList Name a -> PatSynLhs a
- Language.Haskell.Tools.AST: Number :: Integer -> Number a
- Language.Haskell.Tools.AST: OneDirectionalPatSyn :: Ann Pattern a -> PatSynRhs a
- Language.Haskell.Tools.AST: OptionalPos :: String -> String -> SrcLoc -> SpanInfo
- Language.Haskell.Tools.AST: OptionsPragma :: Ann StringNode a -> FilePragma a
- Language.Haskell.Tools.AST: OrdSrcSpan :: RealSrcSpan -> OrdSrcSpan
- Language.Haskell.Tools.AST: Overlappable :: OverlapPragma a
- Language.Haskell.Tools.AST: Overlapping :: OverlapPragma a
- Language.Haskell.Tools.AST: Overlaps :: OverlapPragma a
- Language.Haskell.Tools.AST: ParArrPat :: AnnList Pattern a -> Pattern a
- Language.Haskell.Tools.AST: ParArray :: AnnList Expr a -> Expr a
- Language.Haskell.Tools.AST: ParArrayComp :: Ann Expr a -> AnnList ListCompBody a -> Expr a
- Language.Haskell.Tools.AST: ParArrayEnum :: Ann Expr a -> AnnMaybe Expr a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: Paren :: Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: ParenCmd :: Ann Cmd a -> Cmd a
- Language.Haskell.Tools.AST: ParenName :: Ann SimpleName a -> Name a
- Language.Haskell.Tools.AST: ParenPat :: Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: ParenSplice :: Ann Expr a -> Splice a
- Language.Haskell.Tools.AST: PatSynWhere :: AnnList Match a -> PatSynWhere a
- Language.Haskell.Tools.AST: PatTypeSigDecl :: Ann PatternTypeSignature a -> Decl a
- Language.Haskell.Tools.AST: PatternBracket :: Ann Pattern a -> Bracket a
- Language.Haskell.Tools.AST: PatternSynonym :: Ann PatSynLhs a -> Ann PatSynRhs a -> PatternSynonym a
- Language.Haskell.Tools.AST: PatternSynonymDecl :: Ann PatternSynonym a -> Decl a
- Language.Haskell.Tools.AST: PatternTypeSignature :: Ann Name a -> Ann Type a -> PatternTypeSignature a
- Language.Haskell.Tools.AST: Phantom :: Role a
- Language.Haskell.Tools.AST: PhaseControl :: AnnMaybe PhaseInvert a -> Ann PhaseNumber a -> PhaseControl a
- Language.Haskell.Tools.AST: PhaseInvert :: PhaseInvert a
- Language.Haskell.Tools.AST: PhaseNumber :: Integer -> PhaseNumber a
- Language.Haskell.Tools.AST: PragmaDecl :: Ann TopLevelPragma a -> Decl a
- Language.Haskell.Tools.AST: Precedence :: Int -> Precedence a
- Language.Haskell.Tools.AST: PrefixApp :: Ann Operator a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: Present :: Ann Expr a -> TupSecElem a
- Language.Haskell.Tools.AST: PrimCharLit :: Char -> Literal a
- Language.Haskell.Tools.AST: PrimDoubleLit :: Rational -> Literal a
- Language.Haskell.Tools.AST: PrimFloatLit :: Rational -> Literal a
- Language.Haskell.Tools.AST: PrimIntLit :: Integer -> Literal a
- Language.Haskell.Tools.AST: PrimStringLit :: String -> Literal a
- Language.Haskell.Tools.AST: PrimWordLit :: Integer -> Literal a
- Language.Haskell.Tools.AST: Proc :: Ann Pattern a -> Ann Cmd a -> Expr a
- Language.Haskell.Tools.AST: PromotedCon :: Ann Name a -> Promoted t a
- Language.Haskell.Tools.AST: PromotedInt :: Integer -> Promoted t a
- Language.Haskell.Tools.AST: PromotedList :: AnnList t a -> Promoted t a
- Language.Haskell.Tools.AST: PromotedString :: String -> Promoted t a
- Language.Haskell.Tools.AST: PromotedTuple :: AnnList t a -> Promoted t a
- Language.Haskell.Tools.AST: PromotedUnit :: Promoted t a
- Language.Haskell.Tools.AST: QQString :: String -> QQString a
- Language.Haskell.Tools.AST: QuasiQuote :: Ann Name a -> Ann QQString a -> QuasiQuote a
- Language.Haskell.Tools.AST: QuasiQuoteExpr :: Ann QuasiQuote a -> Expr a
- Language.Haskell.Tools.AST: QuasiQuotePat :: Ann QuasiQuote a -> Pattern a
- Language.Haskell.Tools.AST: RecCon :: Ann Name a -> AnnList FieldUpdate a -> Expr a
- Language.Haskell.Tools.AST: RecPat :: Ann Name a -> AnnList PatternField a -> Pattern a
- Language.Haskell.Tools.AST: RecStmt :: AnnList (Stmt' expr) a -> Stmt' expr a
- Language.Haskell.Tools.AST: RecUpdate :: Ann Expr a -> AnnList FieldUpdate a -> Expr a
- Language.Haskell.Tools.AST: RecordDecl :: Ann Name a -> AnnList FieldDecl a -> ConDecl a
- Language.Haskell.Tools.AST: RecordPatSyn :: Ann Name a -> AnnList Name a -> PatSynLhs a
- Language.Haskell.Tools.AST: Representational :: Role a
- Language.Haskell.Tools.AST: RightAppl :: ArrowAppl a
- Language.Haskell.Tools.AST: RightHighApp :: ArrowAppl a
- Language.Haskell.Tools.AST: RightSection :: Ann Operator a -> Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: RoleDecl :: Ann SimpleName a -> AnnList Role a -> Decl a
- Language.Haskell.Tools.AST: Rule :: Ann StringNode a -> AnnMaybe PhaseControl a -> AnnList TyVar a -> Ann Expr a -> Ann Expr a -> Rule a
- Language.Haskell.Tools.AST: RulePragma :: AnnList Rule a -> TopLevelPragma a
- Language.Haskell.Tools.AST: Safe :: Safety a
- Language.Haskell.Tools.AST: SccPragma :: Ann StringNode a -> ExprPragma a
- Language.Haskell.Tools.AST: ScopeInfo :: [[Name]] -> SemanticInfo n
- Language.Haskell.Tools.AST: SimpleBind :: Ann Pattern a -> Ann Rhs a -> AnnMaybe LocalBinds a -> ValueBind a
- Language.Haskell.Tools.AST: SimpleName :: AnnList UnqualName a -> Ann UnqualName a -> SimpleName a
- Language.Haskell.Tools.AST: SourceRange :: Ann StringNode a -> Ann Number a -> Ann Number a -> Ann Number a -> Ann Number a -> SourceRange a
- Language.Haskell.Tools.AST: SpecializeInstance :: Ann Type a -> InstBodyDecl a
- Language.Haskell.Tools.AST: SpecializePragma :: AnnMaybe PhaseControl a -> Ann Name a -> AnnList Type a -> TopLevelPragma a
- Language.Haskell.Tools.AST: Splice :: Ann Splice a -> Expr a
- Language.Haskell.Tools.AST: SpliceDecl :: Ann Splice a -> Decl a
- Language.Haskell.Tools.AST: SplicePat :: Ann Splice a -> Pattern a
- Language.Haskell.Tools.AST: StaticPtr :: Ann Expr a -> Expr a
- Language.Haskell.Tools.AST: StdCall :: CallConv a
- Language.Haskell.Tools.AST: StringLit :: String -> Literal a
- Language.Haskell.Tools.AST: StringNode :: String -> StringNode a
- Language.Haskell.Tools.AST: SubSpecAll :: SubSpec a
- Language.Haskell.Tools.AST: SubSpecList :: AnnList Name a -> SubSpec a
- Language.Haskell.Tools.AST: ThenStmt :: Ann Expr a -> AnnMaybe Expr a -> CompStmt a
- Language.Haskell.Tools.AST: ThreadSafe :: Safety a
- Language.Haskell.Tools.AST: Tuple :: AnnList Expr a -> Expr a
- Language.Haskell.Tools.AST: TuplePat :: AnnList Pattern a -> Pattern a
- Language.Haskell.Tools.AST: TupleSection :: AnnList TupSecElem a -> Expr a
- Language.Haskell.Tools.AST: TyApp :: Ann Type a -> Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyBang :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyCtx :: Ann Context a -> Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyForall :: AnnList TyVar a -> Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyFun :: Ann Type a -> Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyInfix :: Ann Type a -> Ann Operator a -> Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyKinded :: Ann Type a -> Ann Kind a -> Type a
- Language.Haskell.Tools.AST: TyLazy :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyList :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyNamedWildc :: Ann Name a -> Type a
- Language.Haskell.Tools.AST: TyNoUnpack :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyParArray :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyParen :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyPromoted :: Ann (Promoted Type) a -> Type a
- Language.Haskell.Tools.AST: TyQuasiQuote :: QuasiQuote a -> Type a
- Language.Haskell.Tools.AST: TySplice :: Splice a -> Type a
- Language.Haskell.Tools.AST: TyTuple :: AnnList Type a -> Type a
- Language.Haskell.Tools.AST: TyUnbTuple :: AnnList Type a -> Type a
- Language.Haskell.Tools.AST: TyUnpack :: Ann Type a -> Type a
- Language.Haskell.Tools.AST: TyVar :: Ann Name a -> Type a
- Language.Haskell.Tools.AST: TyVarDecl :: Ann Name a -> AnnMaybe KindConstraint a -> TyVar a
- Language.Haskell.Tools.AST: TyWildcard :: Type a
- Language.Haskell.Tools.AST: TypeAnnotation :: Ann Name a -> AnnotationSubject a
- Language.Haskell.Tools.AST: TypeBracket :: Ann Type a -> Bracket a
- Language.Haskell.Tools.AST: TypeDecl :: Ann DeclHead a -> Ann Type a -> Decl a
- Language.Haskell.Tools.AST: TypeEqn :: Ann Type a -> Ann Type a -> TypeEqn a
- Language.Haskell.Tools.AST: TypeFamily :: Ann DeclHead a -> AnnMaybe TypeFamilySpec a -> TypeFamily a
- Language.Haskell.Tools.AST: TypeFamilyDecl :: Ann TypeFamily a -> Decl a
- Language.Haskell.Tools.AST: TypeFamilyInjectivity :: Ann InjectivityAnn a -> TypeFamilySpec a
- Language.Haskell.Tools.AST: TypeFamilyKind :: Ann KindConstraint a -> TypeFamilySpec a
- Language.Haskell.Tools.AST: TypeInstDecl :: Ann InstanceRule a -> Ann Type a -> Decl a
- Language.Haskell.Tools.AST: TypeKeyword :: TypeKeyword a
- Language.Haskell.Tools.AST: TypeNamespace :: TypeNamespace a
- Language.Haskell.Tools.AST: TypeQuote :: Ann Name a -> Expr a
- Language.Haskell.Tools.AST: TypeSig :: Ann Expr a -> Ann Type a -> Expr a
- Language.Haskell.Tools.AST: TypeSigDecl :: Ann TypeSignature a -> Decl a
- Language.Haskell.Tools.AST: TypeSigPat :: Ann Pattern a -> Ann Type a -> Pattern a
- Language.Haskell.Tools.AST: TypeSignature :: AnnList Name a -> Ann Type a -> TypeSignature a
- Language.Haskell.Tools.AST: UnboxTuplePat :: AnnList Pattern a -> Pattern a
- Language.Haskell.Tools.AST: UnboxedTupSec :: AnnList TupSecElem a -> Expr a
- Language.Haskell.Tools.AST: UnboxedTuple :: AnnList Expr a -> Expr a
- Language.Haskell.Tools.AST: UnguardedCaseRhs :: Ann expr a -> CaseRhs' expr a
- Language.Haskell.Tools.AST: UnguardedRhs :: Ann Expr a -> Rhs a
- Language.Haskell.Tools.AST: UnqualName :: String -> UnqualName a
- Language.Haskell.Tools.AST: Unsafe :: Safety a
- Language.Haskell.Tools.AST: ValueBinding :: Ann ValueBind a -> Decl a
- Language.Haskell.Tools.AST: Var :: Ann Name a -> Expr a
- Language.Haskell.Tools.AST: VarPat :: Ann Name a -> Pattern a
- Language.Haskell.Tools.AST: VarQuote :: Ann Name a -> Expr a
- Language.Haskell.Tools.AST: ViewPat :: Ann Expr a -> Ann Pattern a -> Pattern a
- Language.Haskell.Tools.AST: WarningPragma :: AnnList Name a -> Ann StringNode a -> TopLevelPragma a
- Language.Haskell.Tools.AST: WildPat :: Pattern a
- Language.Haskell.Tools.AST: [_allDerived] :: Deriving a -> AnnList InstanceHead a
- Language.Haskell.Tools.AST: [_altBinds] :: Alt' expr a -> AnnMaybe LocalBinds a
- Language.Haskell.Tools.AST: [_altPattern] :: Alt' expr a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_altRhs] :: Alt' expr a -> Ann (CaseRhs' expr) a
- Language.Haskell.Tools.AST: [_ambiguousLocation] :: SemanticInfo n -> SrcSpan
- Language.Haskell.Tools.AST: [_ambiguousName] :: SemanticInfo n -> RdrName
- Language.Haskell.Tools.AST: [_annListAnnot] :: AnnList e a -> a
- Language.Haskell.Tools.AST: [_annListElems] :: AnnList e a -> [Ann e a]
- Language.Haskell.Tools.AST: [_annMaybeAnnot] :: AnnMaybe e a -> a
- Language.Haskell.Tools.AST: [_annMaybe] :: AnnMaybe e a -> Maybe (Ann e a)
- Language.Haskell.Tools.AST: [_annotateExpr] :: TopLevelPragma a -> Ann Expr a
- Language.Haskell.Tools.AST: [_annotateName] :: AnnotationSubject a -> Ann Name a
- Language.Haskell.Tools.AST: [_annotationSubject] :: TopLevelPragma a -> Ann AnnotationSubject a
- Language.Haskell.Tools.AST: [_annotation] :: Ann elem annot -> annot
- Language.Haskell.Tools.AST: [_arrowAppl] :: Expr a -> Ann ArrowAppl a
- Language.Haskell.Tools.AST: [_assertClsName] :: Assertion a -> Ann Name a
- Language.Haskell.Tools.AST: [_assertLhs] :: Assertion a -> Ann Type a
- Language.Haskell.Tools.AST: [_assertOp] :: Assertion a -> Ann Operator a
- Language.Haskell.Tools.AST: [_assertRhs] :: Assertion a -> Ann Type a
- Language.Haskell.Tools.AST: [_assertTypes] :: Assertion a -> AnnList Type a
- Language.Haskell.Tools.AST: [_availableNames] :: SemanticInfo n -> [n]
- Language.Haskell.Tools.AST: [_bracketDecl] :: Bracket a -> AnnList Decl a
- Language.Haskell.Tools.AST: [_bracketExpr] :: Bracket a -> Ann Expr a
- Language.Haskell.Tools.AST: [_bracketPattern] :: Bracket a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_bracketType] :: Bracket a -> Ann Type a
- Language.Haskell.Tools.AST: [_bracket] :: Expr a -> Ann Bracket a
- Language.Haskell.Tools.AST: [_byExpr] :: CompStmt a -> AnnMaybe Expr a
- Language.Haskell.Tools.AST: [_caseGuardExpr] :: GuardedCaseRhs' expr a -> Ann expr a
- Language.Haskell.Tools.AST: [_caseGuardStmts] :: GuardedCaseRhs' expr a -> AnnList RhsGuard a
- Language.Haskell.Tools.AST: [_cbElements] :: ClassBody a -> AnnList ClassElement a
- Language.Haskell.Tools.AST: [_ceBind] :: ClassElement a -> Ann ValueBind a
- Language.Haskell.Tools.AST: [_ceHead] :: ClassElement a -> Ann DeclHead a
- Language.Haskell.Tools.AST: [_ceKind] :: ClassElement a -> Ann Type a
- Language.Haskell.Tools.AST: [_ceName] :: ClassElement a -> Ann Name a
- Language.Haskell.Tools.AST: [_cePatSig] :: ClassElement a -> Ann PatternTypeSignature a
- Language.Haskell.Tools.AST: [_ceTypeFam] :: ClassElement a -> Ann TypeFamily a
- Language.Haskell.Tools.AST: [_ceTypeSig] :: ClassElement a -> Ann TypeSignature a
- Language.Haskell.Tools.AST: [_ceType] :: ClassElement a -> Ann Type a
- Language.Haskell.Tools.AST: [_charLitValue] :: Literal a -> Char
- Language.Haskell.Tools.AST: [_cmdAlts] :: Cmd a -> AnnList CmdAlt a
- Language.Haskell.Tools.AST: [_cmdApplied] :: Cmd a -> Ann Expr a
- Language.Haskell.Tools.AST: [_cmdArrowOp] :: Cmd a -> Ann ArrowAppl a
- Language.Haskell.Tools.AST: [_cmdBindings] :: Cmd a -> AnnList Pattern a
- Language.Haskell.Tools.AST: [_cmdBinds] :: Cmd a -> AnnList LocalBind a
- Language.Haskell.Tools.AST: [_cmdElse] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_cmdExpr] :: Cmd a -> Ann Expr a
- Language.Haskell.Tools.AST: [_cmdInnerCmd] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_cmdInnerCmds] :: Cmd a -> AnnList Cmd a
- Language.Haskell.Tools.AST: [_cmdInner] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_cmdLeftCmd] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_cmdLhs] :: Cmd a -> Ann Expr a
- Language.Haskell.Tools.AST: [_cmdOperator] :: Cmd a -> Ann Name a
- Language.Haskell.Tools.AST: [_cmdRhs] :: Cmd a -> Ann Expr a
- Language.Haskell.Tools.AST: [_cmdRightCmd] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_cmdStmtBinds] :: Stmt' expr a -> AnnList (Stmt' expr) a
- Language.Haskell.Tools.AST: [_cmdStmts] :: Cmd a -> AnnList (Stmt' Cmd) a
- Language.Haskell.Tools.AST: [_cmdThen] :: Cmd a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_compBody] :: Expr a -> AnnList ListCompBody a
- Language.Haskell.Tools.AST: [_compExpr] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_compStmt] :: CompStmt a -> Ann Stmt a
- Language.Haskell.Tools.AST: [_compStmts] :: ListCompBody a -> AnnList CompStmt a
- Language.Haskell.Tools.AST: [_conDeclArgs] :: ConDecl a -> AnnList Type a
- Language.Haskell.Tools.AST: [_conDeclFields] :: ConDecl a -> AnnList FieldDecl a
- Language.Haskell.Tools.AST: [_conDeclLhs] :: ConDecl a -> Ann Type a
- Language.Haskell.Tools.AST: [_conDeclName] :: ConDecl a -> Ann Name a
- Language.Haskell.Tools.AST: [_conDeclOp] :: ConDecl a -> Ann Operator a
- Language.Haskell.Tools.AST: [_conDeclRhs] :: ConDecl a -> Ann Type a
- Language.Haskell.Tools.AST: [_contextAssertion] :: Context a -> Ann Assertion a
- Language.Haskell.Tools.AST: [_contextAssertions] :: Context a -> AnnList Assertion a
- Language.Haskell.Tools.AST: [_declAssignedType] :: Decl a -> Ann Type a
- Language.Haskell.Tools.AST: [_declBody] :: Decl a -> AnnMaybe ClassBody a
- Language.Haskell.Tools.AST: [_declCallConv] :: Decl a -> Ann CallConv a
- Language.Haskell.Tools.AST: [_declCons] :: Decl a -> AnnList ConDecl a
- Language.Haskell.Tools.AST: [_declCtx] :: Decl a -> AnnMaybe Context a
- Language.Haskell.Tools.AST: [_declDecl] :: Decl a -> AnnList TypeEqn a
- Language.Haskell.Tools.AST: [_declDeriving] :: Decl a -> AnnMaybe Deriving a
- Language.Haskell.Tools.AST: [_declFixity] :: Decl a -> Ann FixitySignature a
- Language.Haskell.Tools.AST: [_declFunDeps] :: Decl a -> AnnMaybe FunDeps a
- Language.Haskell.Tools.AST: [_declGadt] :: Decl a -> AnnList GadtConDecl a
- Language.Haskell.Tools.AST: [_declHead] :: Decl a -> Ann DeclHead a
- Language.Haskell.Tools.AST: [_declInstDecl] :: Decl a -> AnnMaybe InstBody a
- Language.Haskell.Tools.AST: [_declInstRule] :: Decl a -> Ann InstanceRule a
- Language.Haskell.Tools.AST: [_declInstance] :: Decl a -> Ann InstanceRule a
- Language.Haskell.Tools.AST: [_declKind] :: Decl a -> AnnMaybe KindConstraint a
- Language.Haskell.Tools.AST: [_declName] :: Decl a -> Ann Name a
- Language.Haskell.Tools.AST: [_declNewtype] :: Decl a -> Ann DataOrNewtypeKeyword a
- Language.Haskell.Tools.AST: [_declOverlap] :: Decl a -> AnnMaybe OverlapPragma a
- Language.Haskell.Tools.AST: [_declPatSyn] :: Decl a -> Ann PatternSynonym a
- Language.Haskell.Tools.AST: [_declPatTypeSig] :: Decl a -> Ann PatternTypeSignature a
- Language.Haskell.Tools.AST: [_declPragma] :: Decl a -> Ann TopLevelPragma a
- Language.Haskell.Tools.AST: [_declRoleType] :: Decl a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_declRoles] :: Decl a -> AnnList Role a
- Language.Haskell.Tools.AST: [_declSafety] :: Decl a -> AnnMaybe Safety a
- Language.Haskell.Tools.AST: [_declSplice] :: Decl a -> Ann Splice a
- Language.Haskell.Tools.AST: [_declTypeFamily] :: Decl a -> Ann TypeFamily a
- Language.Haskell.Tools.AST: [_declTypeSig] :: Decl a -> Ann TypeSignature a
- Language.Haskell.Tools.AST: [_declType] :: Decl a -> Ann Type a
- Language.Haskell.Tools.AST: [_declTypes] :: Decl a -> AnnList Type a
- Language.Haskell.Tools.AST: [_declValBind] :: Decl a -> Ann ValueBind a
- Language.Haskell.Tools.AST: [_defModuleName] :: SemanticInfo n -> Module
- Language.Haskell.Tools.AST: [_dhAppFun] :: DeclHead a -> Ann DeclHead a
- Language.Haskell.Tools.AST: [_dhAppOperand] :: DeclHead a -> Ann TyVar a
- Language.Haskell.Tools.AST: [_dhBody] :: DeclHead a -> Ann DeclHead a
- Language.Haskell.Tools.AST: [_dhLeft] :: DeclHead a -> Ann TyVar a
- Language.Haskell.Tools.AST: [_dhName] :: DeclHead a -> Ann Name a
- Language.Haskell.Tools.AST: [_dhOperator] :: DeclHead a -> Ann Operator a
- Language.Haskell.Tools.AST: [_dhRight] :: DeclHead a -> Ann TyVar a
- Language.Haskell.Tools.AST: [_doKind] :: Expr a -> Ann DoKind a
- Language.Haskell.Tools.AST: [_element] :: Ann elem annot -> elem annot
- Language.Haskell.Tools.AST: [_enumFrom] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_enumThen] :: Expr a -> AnnMaybe Expr a
- Language.Haskell.Tools.AST: [_enumToFix] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_enumTo] :: Expr a -> AnnMaybe Expr a
- Language.Haskell.Tools.AST: [_espExports] :: ExportSpecList a -> AnnList ExportSpec a
- Language.Haskell.Tools.AST: [_essList] :: SubSpec a -> AnnList Name a
- Language.Haskell.Tools.AST: [_exportDecl] :: ExportSpec a -> Ann IESpec a
- Language.Haskell.Tools.AST: [_exportModuleName] :: ExportSpec a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_exprAlts] :: Expr a -> AnnList Alt a
- Language.Haskell.Tools.AST: [_exprArg] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprBindings] :: Expr a -> AnnList Pattern a
- Language.Haskell.Tools.AST: [_exprCase] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprCond] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprElse] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprFunBind] :: Expr a -> AnnList LocalBind a
- Language.Haskell.Tools.AST: [_exprFun] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprIfAlts] :: Expr a -> AnnList GuardedCaseRhs a
- Language.Haskell.Tools.AST: [_exprInner] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprLhs] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprLit] :: Expr a -> Ann Literal a
- Language.Haskell.Tools.AST: [_exprName] :: Expr a -> Ann Name a
- Language.Haskell.Tools.AST: [_exprOperator] :: Expr a -> Ann Operator a
- Language.Haskell.Tools.AST: [_exprPragma] :: Expr a -> Ann ExprPragma a
- Language.Haskell.Tools.AST: [_exprQQ] :: Expr a -> Ann QuasiQuote a
- Language.Haskell.Tools.AST: [_exprRecFields] :: Expr a -> AnnList FieldUpdate a
- Language.Haskell.Tools.AST: [_exprRecName] :: Expr a -> Ann Name a
- Language.Haskell.Tools.AST: [_exprRhs] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprSig] :: Expr a -> Ann Type a
- Language.Haskell.Tools.AST: [_exprStmts] :: Expr a -> AnnList Stmt a
- Language.Haskell.Tools.AST: [_exprThen] :: Expr a -> Ann Expr a
- Language.Haskell.Tools.AST: [_exprType] :: Expr a -> Ann Type a
- Language.Haskell.Tools.AST: [_fieldName] :: FieldUpdate a -> Ann Name a
- Language.Haskell.Tools.AST: [_fieldNames] :: FieldDecl a -> AnnList Name a
- Language.Haskell.Tools.AST: [_fieldPatternName] :: PatternField a -> Ann Name a
- Language.Haskell.Tools.AST: [_fieldPattern] :: PatternField a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_fieldType] :: FieldDecl a -> Ann Type a
- Language.Haskell.Tools.AST: [_fieldUpdateName] :: FieldUpdate a -> Ann Name a
- Language.Haskell.Tools.AST: [_fieldValue] :: FieldUpdate a -> Ann Expr a
- Language.Haskell.Tools.AST: [_filePragmas] :: Module a -> AnnList FilePragma a
- Language.Haskell.Tools.AST: [_fixityAssoc] :: FixitySignature a -> Ann Assoc a
- Language.Haskell.Tools.AST: [_fixityOperators] :: FixitySignature a -> AnnList Operator a
- Language.Haskell.Tools.AST: [_fixityPrecedence] :: FixitySignature a -> Ann Precedence a
- Language.Haskell.Tools.AST: [_floatLitValue] :: Literal a -> Rational
- Language.Haskell.Tools.AST: [_fracLitValue] :: Literal a -> Rational
- Language.Haskell.Tools.AST: [_funBindMatches] :: ValueBind a -> AnnList Match a
- Language.Haskell.Tools.AST: [_funDepLhs] :: FunDep a -> AnnList Name a
- Language.Haskell.Tools.AST: [_funDepRhs] :: FunDep a -> AnnList Name a
- Language.Haskell.Tools.AST: [_funDeps] :: FunDeps a -> AnnList FunDep a
- Language.Haskell.Tools.AST: [_gadtConNames] :: GadtConDecl a -> AnnList Name a
- Language.Haskell.Tools.AST: [_gadtConNormalType] :: GadtConType a -> Ann Type a
- Language.Haskell.Tools.AST: [_gadtConRecordFields] :: GadtConType a -> AnnList FieldDecl a
- Language.Haskell.Tools.AST: [_gadtConResultType] :: GadtConType a -> Ann Type a
- Language.Haskell.Tools.AST: [_gadtConType] :: GadtConDecl a -> Ann GadtConType a
- Language.Haskell.Tools.AST: [_gadtFieldName] :: GadtField a -> Ann Name a
- Language.Haskell.Tools.AST: [_gadtFieldType] :: GadtField a -> Ann Type a
- Language.Haskell.Tools.AST: [_guardBinds] :: RhsGuard a -> AnnList LocalBind a
- Language.Haskell.Tools.AST: [_guardCheck] :: RhsGuard a -> Ann Expr a
- Language.Haskell.Tools.AST: [_guardExpr] :: GuardedRhs a -> Ann Expr a
- Language.Haskell.Tools.AST: [_guardPat] :: RhsGuard a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_guardRhs] :: RhsGuard a -> Ann Expr a
- Language.Haskell.Tools.AST: [_guardStmts] :: GuardedRhs a -> AnnList RhsGuard a
- Language.Haskell.Tools.AST: [_ieName] :: IESpec a -> Ann Name a
- Language.Haskell.Tools.AST: [_ieSubspec] :: IESpec a -> AnnMaybe SubSpec a
- Language.Haskell.Tools.AST: [_ihConName] :: InstanceHead a -> Ann Name a
- Language.Haskell.Tools.AST: [_ihFun] :: InstanceHead a -> Ann InstanceHead a
- Language.Haskell.Tools.AST: [_ihHead] :: InstanceHead a -> Ann InstanceHead a
- Language.Haskell.Tools.AST: [_ihLeftOp] :: InstanceHead a -> Ann Type a
- Language.Haskell.Tools.AST: [_ihOperator] :: InstanceHead a -> Ann Name a
- Language.Haskell.Tools.AST: [_ihType] :: InstanceHead a -> Ann Type a
- Language.Haskell.Tools.AST: [_importAs] :: ImportDecl a -> AnnMaybe ImportRenaming a
- Language.Haskell.Tools.AST: [_importModule] :: ImportDecl a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_importPkg] :: ImportDecl a -> AnnMaybe StringNode a
- Language.Haskell.Tools.AST: [_importQualified] :: ImportDecl a -> AnnMaybe ImportQualified a
- Language.Haskell.Tools.AST: [_importRename] :: ImportRenaming a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_importSafe] :: ImportDecl a -> AnnMaybe ImportSafe a
- Language.Haskell.Tools.AST: [_importSource] :: ImportDecl a -> AnnMaybe ImportSource a
- Language.Haskell.Tools.AST: [_importSpecHiding] :: ImportSpec a -> AnnList IESpec a
- Language.Haskell.Tools.AST: [_importSpecList] :: ImportSpec a -> AnnList IESpec a
- Language.Haskell.Tools.AST: [_importSpec] :: ImportDecl a -> AnnMaybe ImportSpec a
- Language.Haskell.Tools.AST: [_importedModule] :: SemanticInfo n -> Module
- Language.Haskell.Tools.AST: [_importedNames] :: SemanticInfo n -> [n]
- Language.Haskell.Tools.AST: [_injAnnDeps] :: InjectivityAnn a -> AnnList Name a
- Language.Haskell.Tools.AST: [_injAnnRes] :: InjectivityAnn a -> Ann Name a
- Language.Haskell.Tools.AST: [_inlinableDef] :: TopLevelPragma a -> Ann Name a
- Language.Haskell.Tools.AST: [_inlineDef] :: TopLevelPragma a -> Ann Name a
- Language.Haskell.Tools.AST: [_innerExpr] :: Expr a -> Ann Splice a
- Language.Haskell.Tools.AST: [_instBodyDataCons] :: InstBodyDecl a -> AnnList ConDecl a
- Language.Haskell.Tools.AST: [_instBodyDataKind] :: InstBodyDecl a -> AnnMaybe Kind a
- Language.Haskell.Tools.AST: [_instBodyDataNew] :: InstBodyDecl a -> Ann DataOrNewtypeKeyword a
- Language.Haskell.Tools.AST: [_instBodyDeclFunbind] :: InstBodyDecl a -> Ann ValueBind a
- Language.Haskell.Tools.AST: [_instBodyDecls] :: InstBody a -> AnnList InstBodyDecl a
- Language.Haskell.Tools.AST: [_instBodyDerivings] :: InstBodyDecl a -> AnnMaybe Deriving a
- Language.Haskell.Tools.AST: [_instBodyGadtCons] :: InstBodyDecl a -> AnnList GadtConDecl a
- Language.Haskell.Tools.AST: [_instBodyLhsType] :: InstBodyDecl a -> Ann InstanceRule a
- Language.Haskell.Tools.AST: [_instBodyPatSyn] :: InstBodyDecl a -> Ann PatternSynonym a
- Language.Haskell.Tools.AST: [_instBodyTypeEqn] :: InstBodyDecl a -> Ann TypeEqn a
- Language.Haskell.Tools.AST: [_instBodyTypeSig] :: InstBodyDecl a -> Ann TypeSignature a
- Language.Haskell.Tools.AST: [_intLitValue] :: Literal a -> Integer
- Language.Haskell.Tools.AST: [_irCtx] :: InstanceRule a -> AnnMaybe Context a
- Language.Haskell.Tools.AST: [_irHead] :: InstanceRule a -> Ann InstanceHead a
- Language.Haskell.Tools.AST: [_irRule] :: InstanceRule a -> Ann InstanceRule a
- Language.Haskell.Tools.AST: [_irVars] :: InstanceRule a -> AnnMaybe (AnnList TyVar) a
- Language.Haskell.Tools.AST: [_isDefined] :: SemanticInfo n -> Bool
- Language.Haskell.Tools.AST: [_kindAppArg] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindAppFun] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindConstr] :: KindConstraint a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindElem] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindLeft] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindParen] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindPromoted] :: Kind a -> Ann (Promoted Kind) a
- Language.Haskell.Tools.AST: [_kindRight] :: Kind a -> Ann Kind a
- Language.Haskell.Tools.AST: [_kindVar] :: Kind a -> Ann Name a
- Language.Haskell.Tools.AST: [_langExt] :: LanguageExtension a -> String
- Language.Haskell.Tools.AST: [_lineNumber] :: LineNumber a -> Int
- Language.Haskell.Tools.AST: [_listAfter] :: SpanInfo -> String
- Language.Haskell.Tools.AST: [_listBefore] :: SpanInfo -> String
- Language.Haskell.Tools.AST: [_listDefaultSep] :: SpanInfo -> String
- Language.Haskell.Tools.AST: [_listElems] :: Expr a -> AnnList Expr a
- Language.Haskell.Tools.AST: [_listIndented] :: SpanInfo -> Bool
- Language.Haskell.Tools.AST: [_listPos] :: SpanInfo -> SrcLoc
- Language.Haskell.Tools.AST: [_localBinds] :: LocalBinds a -> AnnList LocalBind a
- Language.Haskell.Tools.AST: [_localFixity] :: LocalBind a -> Ann FixitySignature a
- Language.Haskell.Tools.AST: [_localSig] :: LocalBind a -> Ann TypeSignature a
- Language.Haskell.Tools.AST: [_localVal] :: LocalBind a -> Ann ValueBind a
- Language.Haskell.Tools.AST: [_lpPragmas] :: FilePragma a -> AnnList LanguageExtension a
- Language.Haskell.Tools.AST: [_matchBinds] :: Match a -> AnnMaybe LocalBinds a
- Language.Haskell.Tools.AST: [_matchLhsArgs] :: MatchLhs a -> AnnList Pattern a
- Language.Haskell.Tools.AST: [_matchLhsLhs] :: MatchLhs a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_matchLhsName] :: MatchLhs a -> Ann Name a
- Language.Haskell.Tools.AST: [_matchLhsOperator] :: MatchLhs a -> Ann Operator a
- Language.Haskell.Tools.AST: [_matchLhsRhs] :: MatchLhs a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_matchLhs] :: Match a -> Ann MatchLhs a
- Language.Haskell.Tools.AST: [_matchRhs] :: Match a -> Ann Rhs a
- Language.Haskell.Tools.AST: [_mhExports] :: ModuleHead a -> AnnMaybe ExportSpecList a
- Language.Haskell.Tools.AST: [_mhName] :: ModuleHead a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_mhPragma] :: ModuleHead a -> AnnMaybe ModulePragma a
- Language.Haskell.Tools.AST: [_minimalAnds] :: MinimalFormula a -> AnnList MinimalFormula a
- Language.Haskell.Tools.AST: [_minimalInner] :: MinimalFormula a -> Ann MinimalFormula a
- Language.Haskell.Tools.AST: [_minimalName] :: MinimalFormula a -> Ann Name a
- Language.Haskell.Tools.AST: [_minimalOrs] :: MinimalFormula a -> AnnList MinimalFormula a
- Language.Haskell.Tools.AST: [_modDecl] :: Module a -> AnnList Decl a
- Language.Haskell.Tools.AST: [_modDeprecatedPragma] :: ModulePragma a -> AnnList StringNode a
- Language.Haskell.Tools.AST: [_modHead] :: Module a -> AnnMaybe ModuleHead a
- Language.Haskell.Tools.AST: [_modImports] :: Module a -> AnnList ImportDecl a
- Language.Haskell.Tools.AST: [_modWarningStr] :: ModulePragma a -> AnnList StringNode a
- Language.Haskell.Tools.AST: [_nameInfo] :: SemanticInfo n -> n
- Language.Haskell.Tools.AST: [_noInlineDef] :: TopLevelPragma a -> Ann Name a
- Language.Haskell.Tools.AST: [_nodeSpan] :: SpanInfo -> SrcSpan
- Language.Haskell.Tools.AST: [_numberInteger] :: Number a -> Integer
- Language.Haskell.Tools.AST: [_oneDerived] :: Deriving a -> Ann InstanceHead a
- Language.Haskell.Tools.AST: [_opStr] :: FilePragma a -> Ann StringNode a
- Language.Haskell.Tools.AST: [_operatorName] :: Operator a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_optionalAfter] :: SpanInfo -> String
- Language.Haskell.Tools.AST: [_optionalBefore] :: SpanInfo -> String
- Language.Haskell.Tools.AST: [_optionalPos] :: SpanInfo -> SrcLoc
- Language.Haskell.Tools.AST: [_patArgs] :: PatSynLhs a -> AnnList Name a
- Language.Haskell.Tools.AST: [_patLhs] :: PatternSynonym a -> Ann PatSynLhs a
- Language.Haskell.Tools.AST: [_patName] :: PatSynLhs a -> Ann Name a
- Language.Haskell.Tools.AST: [_patOpposite] :: PatSynWhere a -> AnnList Match a
- Language.Haskell.Tools.AST: [_patQQ] :: Pattern a -> Ann QuasiQuote a
- Language.Haskell.Tools.AST: [_patRhsOpposite] :: PatSynRhs a -> AnnMaybe PatSynWhere a
- Language.Haskell.Tools.AST: [_patRhsPat] :: PatSynRhs a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_patRhs] :: PatternSynonym a -> Ann PatSynRhs a
- Language.Haskell.Tools.AST: [_patSigName] :: PatternTypeSignature a -> Ann Name a
- Language.Haskell.Tools.AST: [_patSigType] :: PatternTypeSignature a -> Ann Type a
- Language.Haskell.Tools.AST: [_patSynLhs] :: PatSynLhs a -> Ann Name a
- Language.Haskell.Tools.AST: [_patSynOp] :: PatSynLhs a -> Ann Operator a
- Language.Haskell.Tools.AST: [_patSynRhs] :: PatSynLhs a -> Ann Name a
- Language.Haskell.Tools.AST: [_patternArgs] :: Pattern a -> AnnList Pattern a
- Language.Haskell.Tools.AST: [_patternElems] :: Pattern a -> AnnList Pattern a
- Language.Haskell.Tools.AST: [_patternExpr] :: Pattern a -> Ann Expr a
- Language.Haskell.Tools.AST: [_patternFields] :: Pattern a -> AnnList PatternField a
- Language.Haskell.Tools.AST: [_patternInner] :: Pattern a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_patternLhs] :: Pattern a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_patternLit] :: Pattern a -> Ann Literal a
- Language.Haskell.Tools.AST: [_patternLiteral] :: Pattern a -> Ann Literal a
- Language.Haskell.Tools.AST: [_patternName] :: Pattern a -> Ann Name a
- Language.Haskell.Tools.AST: [_patternOperator] :: Pattern a -> Ann Operator a
- Language.Haskell.Tools.AST: [_patternRhs] :: Pattern a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_patternSplice] :: Pattern a -> Ann Splice a
- Language.Haskell.Tools.AST: [_patternType] :: Pattern a -> Ann Type a
- Language.Haskell.Tools.AST: [_phaseNum] :: PhaseNumber a -> Integer
- Language.Haskell.Tools.AST: [_phaseNumber] :: PhaseControl a -> Ann PhaseNumber a
- Language.Haskell.Tools.AST: [_phaseUntil] :: PhaseControl a -> AnnMaybe PhaseInvert a
- Language.Haskell.Tools.AST: [_pragmaConlike] :: TopLevelPragma a -> AnnMaybe ConlikeAnnot a
- Language.Haskell.Tools.AST: [_pragmaFileName] :: TopLevelPragma a -> AnnMaybe StringNode a
- Language.Haskell.Tools.AST: [_pragmaFormula] :: ClassElement a -> Ann MinimalFormula a
- Language.Haskell.Tools.AST: [_pragmaLineNum] :: TopLevelPragma a -> Ann LineNumber a
- Language.Haskell.Tools.AST: [_pragmaMessage] :: TopLevelPragma a -> Ann StringNode a
- Language.Haskell.Tools.AST: [_pragmaObjects] :: TopLevelPragma a -> AnnList Name a
- Language.Haskell.Tools.AST: [_pragmaPhase] :: TopLevelPragma a -> AnnMaybe PhaseControl a
- Language.Haskell.Tools.AST: [_pragmaRule] :: TopLevelPragma a -> AnnList Rule a
- Language.Haskell.Tools.AST: [_pragmaSrcRange] :: ExprPragma a -> Ann SourceRange a
- Language.Haskell.Tools.AST: [_pragmaStr] :: ExprPragma a -> Ann StringNode a
- Language.Haskell.Tools.AST: [_precedenceValue] :: Precedence a -> Int
- Language.Haskell.Tools.AST: [_procExpr] :: Expr a -> Ann Cmd a
- Language.Haskell.Tools.AST: [_procPattern] :: Expr a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_promotedConName] :: Promoted t a -> Ann Name a
- Language.Haskell.Tools.AST: [_promotedElements] :: Promoted t a -> AnnList t a
- Language.Haskell.Tools.AST: [_promotedIntValue] :: Promoted t a -> Integer
- Language.Haskell.Tools.AST: [_promotedStringValue] :: Promoted t a -> String
- Language.Haskell.Tools.AST: [_qqExprBody] :: QuasiQuote a -> Ann QQString a
- Language.Haskell.Tools.AST: [_qqExprName] :: QuasiQuote a -> Ann Name a
- Language.Haskell.Tools.AST: [_qqString] :: QQString a -> String
- Language.Haskell.Tools.AST: [_qualifiers] :: SimpleName a -> AnnList UnqualName a
- Language.Haskell.Tools.AST: [_quotedName] :: Expr a -> Ann Name a
- Language.Haskell.Tools.AST: [_rhsCaseExpr] :: CaseRhs' expr a -> Ann expr a
- Language.Haskell.Tools.AST: [_rhsCaseGuards] :: CaseRhs' expr a -> AnnList (GuardedCaseRhs' expr) a
- Language.Haskell.Tools.AST: [_rhsExpr] :: Rhs a -> Ann Expr a
- Language.Haskell.Tools.AST: [_rhsGuards] :: Rhs a -> AnnList GuardedRhs a
- Language.Haskell.Tools.AST: [_ruleBounded] :: Rule a -> AnnList TyVar a
- Language.Haskell.Tools.AST: [_ruleLhs] :: Rule a -> Ann Expr a
- Language.Haskell.Tools.AST: [_ruleName] :: Rule a -> Ann StringNode a
- Language.Haskell.Tools.AST: [_rulePhase] :: Rule a -> AnnMaybe PhaseControl a
- Language.Haskell.Tools.AST: [_ruleRhs] :: Rule a -> Ann Expr a
- Language.Haskell.Tools.AST: [_scopedLocals] :: SemanticInfo n -> [[Name]]
- Language.Haskell.Tools.AST: [_semanticInfo] :: NodeInfo sema src -> sema
- Language.Haskell.Tools.AST: [_simpleNameStr] :: UnqualName a -> String
- Language.Haskell.Tools.AST: [_simpleName] :: Name a -> Ann SimpleName a
- Language.Haskell.Tools.AST: [_sourceInfo] :: NodeInfo sema src -> src
- Language.Haskell.Tools.AST: [_specializeDef] :: TopLevelPragma a -> Ann Name a
- Language.Haskell.Tools.AST: [_specializeInstanceType] :: InstBodyDecl a -> Ann Type a
- Language.Haskell.Tools.AST: [_specializeType] :: TopLevelPragma a -> AnnList Type a
- Language.Haskell.Tools.AST: [_spliceExpr] :: Splice a -> Ann Expr a
- Language.Haskell.Tools.AST: [_spliceId] :: Splice a -> Ann Name a
- Language.Haskell.Tools.AST: [_srFileName] :: SourceRange a -> Ann StringNode a
- Language.Haskell.Tools.AST: [_srFromCol] :: SourceRange a -> Ann Number a
- Language.Haskell.Tools.AST: [_srFromLine] :: SourceRange a -> Ann Number a
- Language.Haskell.Tools.AST: [_srToCol] :: SourceRange a -> Ann Number a
- Language.Haskell.Tools.AST: [_srToLine] :: SourceRange a -> Ann Number a
- Language.Haskell.Tools.AST: [_stmtBinds] :: Stmt' expr a -> AnnList LocalBind a
- Language.Haskell.Tools.AST: [_stmtExpr] :: Stmt' expr a -> Ann expr a
- Language.Haskell.Tools.AST: [_stmtPattern] :: Stmt' expr a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_stringLitValue] :: Literal a -> String
- Language.Haskell.Tools.AST: [_stringNodeStr] :: StringNode a -> String
- Language.Haskell.Tools.AST: [_teLhs] :: TypeEqn a -> Ann Type a
- Language.Haskell.Tools.AST: [_teRhs] :: TypeEqn a -> Ann Type a
- Language.Haskell.Tools.AST: [_tfHead] :: TypeFamily a -> Ann DeclHead a
- Language.Haskell.Tools.AST: [_tfInjectivity] :: TypeFamilySpec a -> Ann InjectivityAnn a
- Language.Haskell.Tools.AST: [_tfKind] :: TypeFamily a -> AnnMaybe KindConstraint a
- Language.Haskell.Tools.AST: [_tfSpecKind] :: TypeFamilySpec a -> Ann KindConstraint a
- Language.Haskell.Tools.AST: [_tfSpec] :: TypeFamily a -> AnnMaybe TypeFamilySpec a
- Language.Haskell.Tools.AST: [_thenExpr] :: CompStmt a -> Ann Expr a
- Language.Haskell.Tools.AST: [_tpPromoted] :: Type a -> Ann (Promoted Type) a
- Language.Haskell.Tools.AST: [_tsName] :: TypeSignature a -> AnnList Name a
- Language.Haskell.Tools.AST: [_tsSplice] :: Type a -> Splice a
- Language.Haskell.Tools.AST: [_tsType] :: TypeSignature a -> Ann Type a
- Language.Haskell.Tools.AST: [_tupSecExpr] :: TupSecElem a -> Ann Expr a
- Language.Haskell.Tools.AST: [_tupleElems] :: Expr a -> AnnList Expr a
- Language.Haskell.Tools.AST: [_tupleSectionElems] :: Expr a -> AnnList TupSecElem a
- Language.Haskell.Tools.AST: [_tyVarKind] :: TyVar a -> AnnMaybe KindConstraint a
- Language.Haskell.Tools.AST: [_tyVarName] :: TyVar a -> Ann Name a
- Language.Haskell.Tools.AST: [_typeArg] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeBounded] :: Type a -> AnnList TyVar a
- Language.Haskell.Tools.AST: [_typeCon] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeCtx] :: Type a -> Ann Context a
- Language.Haskell.Tools.AST: [_typeElement] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeElements] :: Type a -> AnnList Type a
- Language.Haskell.Tools.AST: [_typeInner] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeKind] :: Type a -> Ann Kind a
- Language.Haskell.Tools.AST: [_typeLeft] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeName] :: Type a -> Ann Name a
- Language.Haskell.Tools.AST: [_typeOperator] :: Type a -> Ann Operator a
- Language.Haskell.Tools.AST: [_typeParam] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeQQ] :: Type a -> QuasiQuote a
- Language.Haskell.Tools.AST: [_typeResult] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeRight] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeType] :: Type a -> Ann Type a
- Language.Haskell.Tools.AST: [_typeWildcardName] :: Type a -> Ann Name a
- Language.Haskell.Tools.AST: [_unqualifiedName] :: SimpleName a -> Ann UnqualName a
- Language.Haskell.Tools.AST: [_usingExpr] :: CompStmt a -> AnnMaybe Expr a
- Language.Haskell.Tools.AST: [_valBindLocals] :: ValueBind a -> AnnMaybe LocalBinds a
- Language.Haskell.Tools.AST: [_valBindPat] :: ValueBind a -> Ann Pattern a
- Language.Haskell.Tools.AST: [_valBindRhs] :: ValueBind a -> Ann Rhs a
- Language.Haskell.Tools.AST: allDerived :: forall a_aHVB. Partial (Deriving a_aHVB) (Deriving a_aHVB) (AnnList InstanceHead a_aHVB) (AnnList InstanceHead a_aHVB)
- Language.Haskell.Tools.AST: altBinds :: forall expr_aCVh a_aCVi. Lens (Alt' expr_aCVh a_aCVi) (Alt' expr_aCVh a_aCVi) (AnnMaybe LocalBinds a_aCVi) (AnnMaybe LocalBinds a_aCVi)
- Language.Haskell.Tools.AST: altPattern :: forall expr_aCVh a_aCVi. Lens (Alt' expr_aCVh a_aCVi) (Alt' expr_aCVh a_aCVi) (Ann Pattern a_aCVi) (Ann Pattern a_aCVi)
- Language.Haskell.Tools.AST: altRhs :: forall expr_aCVh a_aCVi expr'_aVKu. Lens (Alt' expr_aCVh a_aCVi) (Alt' expr'_aVKu a_aCVi) (Ann (CaseRhs' expr_aCVh) a_aCVi) (Ann (CaseRhs' expr'_aVKu) a_aCVi)
- Language.Haskell.Tools.AST: ambiguousLocation :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) SrcSpan SrcSpan
- Language.Haskell.Tools.AST: ambiguousName :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) RdrName RdrName
- Language.Haskell.Tools.AST: annJust :: Partial (AnnMaybe e a) (AnnMaybe e' a) (Ann e a) (Ann e' a)
- Language.Haskell.Tools.AST: annList :: Traversal (AnnList e a) (AnnList e' a) (Ann e a) (Ann e' a)
- Language.Haskell.Tools.AST: annListAnnot :: forall e_apmE a_apmF. Lens (AnnList e_apmE a_apmF) (AnnList e_apmE a_apmF) a_apmF a_apmF
- Language.Haskell.Tools.AST: annListElems :: forall e_apmE a_apmF e'_apAK. Lens (AnnList e_apmE a_apmF) (AnnList e'_apAK a_apmF) [Ann e_apmE a_apmF] [Ann e'_apAK a_apmF]
- Language.Haskell.Tools.AST: annMaybe :: forall e_apAU a_apAV e'_apMQ. Lens (AnnMaybe e_apAU a_apAV) (AnnMaybe e'_apMQ a_apAV) (Maybe (Ann e_apAU a_apAV)) (Maybe (Ann e'_apMQ a_apAV))
- Language.Haskell.Tools.AST: annMaybeAnnot :: forall e_apAU a_apAV. Lens (AnnMaybe e_apAU a_apAV) (AnnMaybe e_apAU a_apAV) a_apAV a_apAV
- Language.Haskell.Tools.AST: annNil :: a -> AnnList e a
- Language.Haskell.Tools.AST: annNothing :: a -> AnnMaybe e a
- Language.Haskell.Tools.AST: annotateExpr :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann Expr a_aFZ9) (Ann Expr a_aFZ9)
- Language.Haskell.Tools.AST: annotateName :: forall a_aFZ7 a'_aWxM. Partial (AnnotationSubject a_aFZ7) (AnnotationSubject a'_aWxM) (Ann Name a_aFZ7) (Ann Name a'_aWxM)
- Language.Haskell.Tools.AST: annotation :: forall elem_anPY annot_anPZ. Lens (Ann elem_anPY annot_anPZ) (Ann elem_anPY annot_anPZ) annot_anPZ annot_anPZ
- Language.Haskell.Tools.AST: annotationSubject :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann AnnotationSubject a_aFZ9) (Ann AnnotationSubject a_aFZ9)
- Language.Haskell.Tools.AST: arrowAppl :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann ArrowAppl a_aCVl) (Ann ArrowAppl a_aCVl)
- Language.Haskell.Tools.AST: assertClsName :: forall a_aArK. Partial (Assertion a_aArK) (Assertion a_aArK) (Ann Name a_aArK) (Ann Name a_aArK)
- Language.Haskell.Tools.AST: assertLhs :: forall a_aArK. Partial (Assertion a_aArK) (Assertion a_aArK) (Ann Type a_aArK) (Ann Type a_aArK)
- Language.Haskell.Tools.AST: assertOp :: forall a_aArK. Partial (Assertion a_aArK) (Assertion a_aArK) (Ann Operator a_aArK) (Ann Operator a_aArK)
- Language.Haskell.Tools.AST: assertRhs :: forall a_aArK. Partial (Assertion a_aArK) (Assertion a_aArK) (Ann Type a_aArK) (Ann Type a_aArK)
- Language.Haskell.Tools.AST: assertTypes :: forall a_aArK. Partial (Assertion a_aArK) (Assertion a_aArK) (AnnList Type a_aArK) (AnnList Type a_aArK)
- Language.Haskell.Tools.AST: availableNames :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) [n_aoJm] [n_aoJm]
- Language.Haskell.Tools.AST: bindName :: BindingElem d => Simple Traversal (d (NodeInfo (SemanticInfo n) src)) n
- Language.Haskell.Tools.AST: bindingName :: Simple Traversal (Ann ValueBind (NodeInfo (SemanticInfo n) s)) n
- Language.Haskell.Tools.AST: bindingSemantics :: Simple Traversal (Ann ValueBind (NodeInfo (SemanticInfo n) s)) (SemanticInfo n)
- Language.Haskell.Tools.AST: bracket :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Bracket a_aCVl) (Ann Bracket a_aCVl)
- Language.Haskell.Tools.AST: bracketDecl :: forall a_aM7Q. Partial (Bracket a_aM7Q) (Bracket a_aM7Q) (AnnList Decl a_aM7Q) (AnnList Decl a_aM7Q)
- Language.Haskell.Tools.AST: bracketExpr :: forall a_aM7Q. Partial (Bracket a_aM7Q) (Bracket a_aM7Q) (Ann Expr a_aM7Q) (Ann Expr a_aM7Q)
- Language.Haskell.Tools.AST: bracketPattern :: forall a_aM7Q. Partial (Bracket a_aM7Q) (Bracket a_aM7Q) (Ann Pattern a_aM7Q) (Ann Pattern a_aM7Q)
- Language.Haskell.Tools.AST: bracketType :: forall a_aM7Q. Partial (Bracket a_aM7Q) (Bracket a_aM7Q) (Ann Type a_aM7Q) (Ann Type a_aM7Q)
- Language.Haskell.Tools.AST: byExpr :: forall a_aCuN. Partial (CompStmt a_aCuN) (CompStmt a_aCuN) (AnnMaybe Expr a_aCuN) (AnnMaybe Expr a_aCuN)
- Language.Haskell.Tools.AST: caseGuardExpr :: forall expr_aCVd a_aCVe expr'_aXgY. Lens (GuardedCaseRhs' expr_aCVd a_aCVe) (GuardedCaseRhs' expr'_aXgY a_aCVe) (Ann expr_aCVd a_aCVe) (Ann expr'_aXgY a_aCVe)
- Language.Haskell.Tools.AST: caseGuardStmts :: forall expr_aCVd a_aCVe. Lens (GuardedCaseRhs' expr_aCVd a_aCVe) (GuardedCaseRhs' expr_aCVd a_aCVe) (AnnList RhsGuard a_aCVe) (AnnList RhsGuard a_aCVe)
- Language.Haskell.Tools.AST: cbElements :: forall a_aHVN a'_aPrj. Lens (ClassBody a_aHVN) (ClassBody a'_aPrj) (AnnList ClassElement a_aHVN) (AnnList ClassElement a'_aPrj)
- Language.Haskell.Tools.AST: ceBind :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann ValueBind a_aHVM) (Ann ValueBind a_aHVM)
- Language.Haskell.Tools.AST: ceHead :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann DeclHead a_aHVM) (Ann DeclHead a_aHVM)
- Language.Haskell.Tools.AST: ceKind :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann Type a_aHVM) (Ann Type a_aHVM)
- Language.Haskell.Tools.AST: ceName :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann Name a_aHVM) (Ann Name a_aHVM)
- Language.Haskell.Tools.AST: cePatSig :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann PatternTypeSignature a_aHVM) (Ann PatternTypeSignature a_aHVM)
- Language.Haskell.Tools.AST: ceType :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann Type a_aHVM) (Ann Type a_aHVM)
- Language.Haskell.Tools.AST: ceTypeFam :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann TypeFamily a_aHVM) (Ann TypeFamily a_aHVM)
- Language.Haskell.Tools.AST: ceTypeSig :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann TypeSignature a_aHVM) (Ann TypeSignature a_aHVM)
- Language.Haskell.Tools.AST: charLitValue :: forall a_azv8. Partial (Literal a_azv8) (Literal a_azv8) Char Char
- Language.Haskell.Tools.AST: class BindingElem d
- Language.Haskell.Tools.AST: class HasAnnot node
- Language.Haskell.Tools.AST: class HasRange annot
- Language.Haskell.Tools.AST: cmdStmtBinds :: forall expr_aCuP a_aCuQ. Partial (Stmt' expr_aCuP a_aCuQ) (Stmt' expr_aCuP a_aCuQ) (AnnList (Stmt' expr_aCuP) a_aCuQ) (AnnList (Stmt' expr_aCuP) a_aCuQ)
- Language.Haskell.Tools.AST: compBody :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList ListCompBody a_aCVl) (AnnList ListCompBody a_aCVl)
- Language.Haskell.Tools.AST: compExpr :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: compStmt :: forall a_aCuN. Partial (CompStmt a_aCuN) (CompStmt a_aCuN) (Ann Stmt a_aCuN) (Ann Stmt a_aCuN)
- Language.Haskell.Tools.AST: compStmts :: forall a_aCuO a'_aX3B. Lens (ListCompBody a_aCuO) (ListCompBody a'_aX3B) (AnnList CompStmt a_aCuO) (AnnList CompStmt a'_aX3B)
- Language.Haskell.Tools.AST: compareRangeLength :: SrcSpan -> SrcSpan -> Ordering
- Language.Haskell.Tools.AST: conDeclArgs :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (AnnList Type a_aHVD) (AnnList Type a_aHVD)
- Language.Haskell.Tools.AST: conDeclFields :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (AnnList FieldDecl a_aHVD) (AnnList FieldDecl a_aHVD)
- Language.Haskell.Tools.AST: conDeclLhs :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (Ann Type a_aHVD) (Ann Type a_aHVD)
- Language.Haskell.Tools.AST: conDeclName :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (Ann Name a_aHVD) (Ann Name a_aHVD)
- Language.Haskell.Tools.AST: conDeclOp :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (Ann Operator a_aHVD) (Ann Operator a_aHVD)
- Language.Haskell.Tools.AST: conDeclRhs :: forall a_aHVD. Partial (ConDecl a_aHVD) (ConDecl a_aHVD) (Ann Type a_aHVD) (Ann Type a_aHVD)
- Language.Haskell.Tools.AST: contextAssertion :: forall a_aArL. Partial (Context a_aArL) (Context a_aArL) (Ann Assertion a_aArL) (Ann Assertion a_aArL)
- Language.Haskell.Tools.AST: contextAssertions :: forall a_aArL. Partial (Context a_aArL) (Context a_aArL) (AnnList Assertion a_aArL) (AnnList Assertion a_aArL)
- Language.Haskell.Tools.AST: createBinding :: BindingElem d => Ann ValueBind a -> d a
- Language.Haskell.Tools.AST: createTypeSig :: BindingElem d => Ann TypeSignature a -> d a
- Language.Haskell.Tools.AST: data Alt' expr a
- Language.Haskell.Tools.AST: data Ann elem annot
- Language.Haskell.Tools.AST: data AnnList e a
- Language.Haskell.Tools.AST: data AnnMaybe e a
- Language.Haskell.Tools.AST: data AnnotationSubject a
- Language.Haskell.Tools.AST: data ArrowAppl a
- Language.Haskell.Tools.AST: data Assertion a
- Language.Haskell.Tools.AST: data Assoc a
- Language.Haskell.Tools.AST: data Bracket a
- Language.Haskell.Tools.AST: data CallConv a
- Language.Haskell.Tools.AST: data CaseRhs' expr a
- Language.Haskell.Tools.AST: data ClassBody a
- Language.Haskell.Tools.AST: data ClassElement a
- Language.Haskell.Tools.AST: data Cmd a
- Language.Haskell.Tools.AST: data CompStmt a
- Language.Haskell.Tools.AST: data ConDecl a
- Language.Haskell.Tools.AST: data ConlikeAnnot a
- Language.Haskell.Tools.AST: data Context a
- Language.Haskell.Tools.AST: data DataOrNewtypeKeyword a
- Language.Haskell.Tools.AST: data Decl a
- Language.Haskell.Tools.AST: data DeclHead a
- Language.Haskell.Tools.AST: data Deriving a
- Language.Haskell.Tools.AST: data DoKind a
- Language.Haskell.Tools.AST: data ExportSpec a
- Language.Haskell.Tools.AST: data ExportSpecList a
- Language.Haskell.Tools.AST: data Expr a
- Language.Haskell.Tools.AST: data ExprPragma a
- Language.Haskell.Tools.AST: data FieldDecl a
- Language.Haskell.Tools.AST: data FieldUpdate a
- Language.Haskell.Tools.AST: data FilePragma a
- Language.Haskell.Tools.AST: data FixitySignature a
- Language.Haskell.Tools.AST: data FunDep a
- Language.Haskell.Tools.AST: data FunDeps a
- Language.Haskell.Tools.AST: data GadtConDecl a
- Language.Haskell.Tools.AST: data GadtConType a
- Language.Haskell.Tools.AST: data GadtField a
- Language.Haskell.Tools.AST: data GuardedCaseRhs' expr a
- Language.Haskell.Tools.AST: data GuardedRhs a
- Language.Haskell.Tools.AST: data IESpec a
- Language.Haskell.Tools.AST: data ImportDecl a
- Language.Haskell.Tools.AST: data ImportQualified a
- Language.Haskell.Tools.AST: data ImportRenaming a
- Language.Haskell.Tools.AST: data ImportSafe a
- Language.Haskell.Tools.AST: data ImportSource a
- Language.Haskell.Tools.AST: data ImportSpec a
- Language.Haskell.Tools.AST: data InjectivityAnn a
- Language.Haskell.Tools.AST: data InstBody a
- Language.Haskell.Tools.AST: data InstBodyDecl a
- Language.Haskell.Tools.AST: data InstanceHead a
- Language.Haskell.Tools.AST: data InstanceRule a
- Language.Haskell.Tools.AST: data Kind a
- Language.Haskell.Tools.AST: data KindConstraint a
- Language.Haskell.Tools.AST: data LanguageExtension a
- Language.Haskell.Tools.AST: data LineNumber a
- Language.Haskell.Tools.AST: data ListCompBody a
- Language.Haskell.Tools.AST: data Literal a
- Language.Haskell.Tools.AST: data LocalBind a
- Language.Haskell.Tools.AST: data LocalBinds a
- Language.Haskell.Tools.AST: data Match a
- Language.Haskell.Tools.AST: data MatchLhs a
- Language.Haskell.Tools.AST: data MinimalFormula a
- Language.Haskell.Tools.AST: data Module a
- Language.Haskell.Tools.AST: data ModuleHead a
- Language.Haskell.Tools.AST: data ModulePragma a
- Language.Haskell.Tools.AST: data Name a
- Language.Haskell.Tools.AST: data NodeInfo sema src
- Language.Haskell.Tools.AST: data Number a
- Language.Haskell.Tools.AST: data Operator a
- Language.Haskell.Tools.AST: data OrdSrcSpan
- Language.Haskell.Tools.AST: data OverlapPragma a
- Language.Haskell.Tools.AST: data PatSynLhs a
- Language.Haskell.Tools.AST: data PatSynRhs a
- Language.Haskell.Tools.AST: data PatSynWhere a
- Language.Haskell.Tools.AST: data Pattern a
- Language.Haskell.Tools.AST: data PatternField a
- Language.Haskell.Tools.AST: data PatternSynonym a
- Language.Haskell.Tools.AST: data PatternTypeSignature a
- Language.Haskell.Tools.AST: data PhaseControl a
- Language.Haskell.Tools.AST: data PhaseInvert a
- Language.Haskell.Tools.AST: data PhaseNumber a
- Language.Haskell.Tools.AST: data Precedence a
- Language.Haskell.Tools.AST: data Promoted t a
- Language.Haskell.Tools.AST: data QQString a
- Language.Haskell.Tools.AST: data QuasiQuote a
- Language.Haskell.Tools.AST: data Rhs a
- Language.Haskell.Tools.AST: data RhsGuard a
- Language.Haskell.Tools.AST: data Role a
- Language.Haskell.Tools.AST: data Rule a
- Language.Haskell.Tools.AST: data Safety a
- Language.Haskell.Tools.AST: data SemanticInfo n
- Language.Haskell.Tools.AST: data SimpleName a
- Language.Haskell.Tools.AST: data SourceRange a
- Language.Haskell.Tools.AST: data SpanInfo
- Language.Haskell.Tools.AST: data Splice a
- Language.Haskell.Tools.AST: data Stmt' expr a
- Language.Haskell.Tools.AST: data StringNode a
- Language.Haskell.Tools.AST: data SubSpec a
- Language.Haskell.Tools.AST: data TopLevelPragma a
- Language.Haskell.Tools.AST: data TupSecElem a
- Language.Haskell.Tools.AST: data TyVar a
- Language.Haskell.Tools.AST: data Type a
- Language.Haskell.Tools.AST: data TypeEqn a
- Language.Haskell.Tools.AST: data TypeFamily a
- Language.Haskell.Tools.AST: data TypeFamilySpec a
- Language.Haskell.Tools.AST: data TypeKeyword a
- Language.Haskell.Tools.AST: data TypeNamespace a
- Language.Haskell.Tools.AST: data TypeSignature a
- Language.Haskell.Tools.AST: data UnqualName a
- Language.Haskell.Tools.AST: data ValueBind a
- Language.Haskell.Tools.AST: declAssignedType :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann Type a_aHVR) (Ann Type a_aHVR)
- Language.Haskell.Tools.AST: declBody :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe ClassBody a_aHVR) (AnnMaybe ClassBody a_aHVR)
- Language.Haskell.Tools.AST: declCallConv :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann CallConv a_aHVR) (Ann CallConv a_aHVR)
- Language.Haskell.Tools.AST: declCons :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnList ConDecl a_aHVR) (AnnList ConDecl a_aHVR)
- Language.Haskell.Tools.AST: declCtx :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe Context a_aHVR) (AnnMaybe Context a_aHVR)
- Language.Haskell.Tools.AST: declDecl :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnList TypeEqn a_aHVR) (AnnList TypeEqn a_aHVR)
- Language.Haskell.Tools.AST: declDeriving :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe Deriving a_aHVR) (AnnMaybe Deriving a_aHVR)
- Language.Haskell.Tools.AST: declFixity :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann FixitySignature a_aHVR) (Ann FixitySignature a_aHVR)
- Language.Haskell.Tools.AST: declFunDeps :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe FunDeps a_aHVR) (AnnMaybe FunDeps a_aHVR)
- Language.Haskell.Tools.AST: declGadt :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnList GadtConDecl a_aHVR) (AnnList GadtConDecl a_aHVR)
- Language.Haskell.Tools.AST: declHead :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann DeclHead a_aHVR) (Ann DeclHead a_aHVR)
- Language.Haskell.Tools.AST: declHeadNames :: Simple Traversal (Ann DeclHead a) (Ann SimpleName a)
- Language.Haskell.Tools.AST: declInstDecl :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe InstBody a_aHVR) (AnnMaybe InstBody a_aHVR)
- Language.Haskell.Tools.AST: declInstRule :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann InstanceRule a_aHVR) (Ann InstanceRule a_aHVR)
- Language.Haskell.Tools.AST: declInstance :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann InstanceRule a_aHVR) (Ann InstanceRule a_aHVR)
- Language.Haskell.Tools.AST: declKind :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe KindConstraint a_aHVR) (AnnMaybe KindConstraint a_aHVR)
- Language.Haskell.Tools.AST: declName :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann Name a_aHVR) (Ann Name a_aHVR)
- Language.Haskell.Tools.AST: declNewtype :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann DataOrNewtypeKeyword a_aHVR) (Ann DataOrNewtypeKeyword a_aHVR)
- Language.Haskell.Tools.AST: declOverlap :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe OverlapPragma a_aHVR) (AnnMaybe OverlapPragma a_aHVR)
- Language.Haskell.Tools.AST: declPatSyn :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann PatternSynonym a_aHVR) (Ann PatternSynonym a_aHVR)
- Language.Haskell.Tools.AST: declPatTypeSig :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann PatternTypeSignature a_aHVR) (Ann PatternTypeSignature a_aHVR)
- Language.Haskell.Tools.AST: declPragma :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann TopLevelPragma a_aHVR) (Ann TopLevelPragma a_aHVR)
- Language.Haskell.Tools.AST: declRoleType :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann SimpleName a_aHVR) (Ann SimpleName a_aHVR)
- Language.Haskell.Tools.AST: declRoles :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnList Role a_aHVR) (AnnList Role a_aHVR)
- Language.Haskell.Tools.AST: declSafety :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnMaybe Safety a_aHVR) (AnnMaybe Safety a_aHVR)
- Language.Haskell.Tools.AST: declSplice :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann Splice a_aHVR) (Ann Splice a_aHVR)
- Language.Haskell.Tools.AST: declType :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann Type a_aHVR) (Ann Type a_aHVR)
- Language.Haskell.Tools.AST: declTypeFamily :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann TypeFamily a_aHVR) (Ann TypeFamily a_aHVR)
- Language.Haskell.Tools.AST: declTypeSig :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann TypeSignature a_aHVR) (Ann TypeSignature a_aHVR)
- Language.Haskell.Tools.AST: declTypes :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (AnnList Type a_aHVR) (AnnList Type a_aHVR)
- Language.Haskell.Tools.AST: declValBind :: forall a_aHVR. Partial (Decl a_aHVR) (Decl a_aHVR) (Ann ValueBind a_aHVR) (Ann ValueBind a_aHVR)
- Language.Haskell.Tools.AST: defModuleName :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) Module Module
- Language.Haskell.Tools.AST: dhAppFun :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann DeclHead a_aHVL) (Ann DeclHead a_aHVL)
- Language.Haskell.Tools.AST: dhAppOperand :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann TyVar a_aHVL) (Ann TyVar a_aHVL)
- Language.Haskell.Tools.AST: dhBody :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann DeclHead a_aHVL) (Ann DeclHead a_aHVL)
- Language.Haskell.Tools.AST: dhLeft :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann TyVar a_aHVL) (Ann TyVar a_aHVL)
- Language.Haskell.Tools.AST: dhName :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann Name a_aHVL) (Ann Name a_aHVL)
- Language.Haskell.Tools.AST: dhNames :: Simple Traversal (Ann DeclHead (NodeInfo (SemanticInfo n) src)) n
- Language.Haskell.Tools.AST: dhOperator :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann Operator a_aHVL) (Ann Operator a_aHVL)
- Language.Haskell.Tools.AST: dhRight :: forall a_aHVL. Partial (DeclHead a_aHVL) (DeclHead a_aHVL) (Ann TyVar a_aHVL) (Ann TyVar a_aHVL)
- Language.Haskell.Tools.AST: doKind :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann DoKind a_aCVl) (Ann DoKind a_aCVl)
- Language.Haskell.Tools.AST: element :: forall elem_anPY annot_anPZ elem'_ao1E. Lens (Ann elem_anPY annot_anPZ) (Ann elem'_ao1E annot_anPZ) (elem_anPY annot_anPZ) (elem'_ao1E annot_anPZ)
- Language.Haskell.Tools.AST: enumFrom :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: enumThen :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnMaybe Expr a_aCVl) (AnnMaybe Expr a_aCVl)
- Language.Haskell.Tools.AST: enumTo :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnMaybe Expr a_aCVl) (AnnMaybe Expr a_aCVl)
- Language.Haskell.Tools.AST: enumToFix :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: espExports :: forall a_aMvr a'_aNzN. Lens (ExportSpecList a_aMvr) (ExportSpecList a'_aNzN) (AnnList ExportSpec a_aMvr) (AnnList ExportSpec a'_aNzN)
- Language.Haskell.Tools.AST: essList :: forall a_aMvo a'_aNF6. Partial (SubSpec a_aMvo) (SubSpec a'_aNF6) (AnnList Name a_aMvo) (AnnList Name a'_aNF6)
- Language.Haskell.Tools.AST: exportDecl :: forall a_aMvq. Partial (ExportSpec a_aMvq) (ExportSpec a_aMvq) (Ann IESpec a_aMvq) (Ann IESpec a_aMvq)
- Language.Haskell.Tools.AST: exportModuleName :: forall a_aMvq. Partial (ExportSpec a_aMvq) (ExportSpec a_aMvq) (Ann SimpleName a_aMvq) (Ann SimpleName a_aMvq)
- Language.Haskell.Tools.AST: exprAlts :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList Alt a_aCVl) (AnnList Alt a_aCVl)
- Language.Haskell.Tools.AST: exprArg :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprBindings :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList Pattern a_aCVl) (AnnList Pattern a_aCVl)
- Language.Haskell.Tools.AST: exprCase :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprCond :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprElse :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprFun :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprFunBind :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList LocalBind a_aCVl) (AnnList LocalBind a_aCVl)
- Language.Haskell.Tools.AST: exprIfAlts :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList GuardedCaseRhs a_aCVl) (AnnList GuardedCaseRhs a_aCVl)
- Language.Haskell.Tools.AST: exprInner :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprLhs :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprLit :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Literal a_aCVl) (Ann Literal a_aCVl)
- Language.Haskell.Tools.AST: exprName :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Name a_aCVl) (Ann Name a_aCVl)
- Language.Haskell.Tools.AST: exprOperator :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Operator a_aCVl) (Ann Operator a_aCVl)
- Language.Haskell.Tools.AST: exprPragma :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann ExprPragma a_aCVl) (Ann ExprPragma a_aCVl)
- Language.Haskell.Tools.AST: exprQQ :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann QuasiQuote a_aCVl) (Ann QuasiQuote a_aCVl)
- Language.Haskell.Tools.AST: exprRecFields :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList FieldUpdate a_aCVl) (AnnList FieldUpdate a_aCVl)
- Language.Haskell.Tools.AST: exprRecName :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Name a_aCVl) (Ann Name a_aCVl)
- Language.Haskell.Tools.AST: exprRhs :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprSig :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Type a_aCVl) (Ann Type a_aCVl)
- Language.Haskell.Tools.AST: exprStmts :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList Stmt a_aCVl) (AnnList Stmt a_aCVl)
- Language.Haskell.Tools.AST: exprThen :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Expr a_aCVl) (Ann Expr a_aCVl)
- Language.Haskell.Tools.AST: exprType :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Type a_aCVl) (Ann Type a_aCVl)
- Language.Haskell.Tools.AST: fieldName :: forall a_aCVk. Partial (FieldUpdate a_aCVk) (FieldUpdate a_aCVk) (Ann Name a_aCVk) (Ann Name a_aCVk)
- Language.Haskell.Tools.AST: fieldNames :: forall a_aHVC. Lens (FieldDecl a_aHVC) (FieldDecl a_aHVC) (AnnList Name a_aHVC) (AnnList Name a_aHVC)
- Language.Haskell.Tools.AST: fieldPattern :: forall a_aBDR. Partial (PatternField a_aBDR) (PatternField a_aBDR) (Ann Pattern a_aBDR) (Ann Pattern a_aBDR)
- Language.Haskell.Tools.AST: fieldPatternName :: forall a_aBDR. Partial (PatternField a_aBDR) (PatternField a_aBDR) (Ann Name a_aBDR) (Ann Name a_aBDR)
- Language.Haskell.Tools.AST: fieldType :: forall a_aHVC. Lens (FieldDecl a_aHVC) (FieldDecl a_aHVC) (Ann Type a_aHVC) (Ann Type a_aHVC)
- Language.Haskell.Tools.AST: fieldUpdateName :: forall a_aCVk. Partial (FieldUpdate a_aCVk) (FieldUpdate a_aCVk) (Ann Name a_aCVk) (Ann Name a_aCVk)
- Language.Haskell.Tools.AST: fieldValue :: forall a_aCVk. Partial (FieldUpdate a_aCVk) (FieldUpdate a_aCVk) (Ann Expr a_aCVk) (Ann Expr a_aCVk)
- Language.Haskell.Tools.AST: filePragmas :: forall a_aMvt. Lens (Module a_aMvt) (Module a_aMvt) (AnnList FilePragma a_aMvt) (AnnList FilePragma a_aMvt)
- Language.Haskell.Tools.AST: fixityAssoc :: forall a_aFZd. Lens (FixitySignature a_aFZd) (FixitySignature a_aFZd) (Ann Assoc a_aFZd) (Ann Assoc a_aFZd)
- Language.Haskell.Tools.AST: fixityOperators :: forall a_aFZd. Lens (FixitySignature a_aFZd) (FixitySignature a_aFZd) (AnnList Operator a_aFZd) (AnnList Operator a_aFZd)
- Language.Haskell.Tools.AST: fixityPrecedence :: forall a_aFZd. Lens (FixitySignature a_aFZd) (FixitySignature a_aFZd) (Ann Precedence a_aFZd) (Ann Precedence a_aFZd)
- Language.Haskell.Tools.AST: floatLitValue :: forall a_azv8. Partial (Literal a_azv8) (Literal a_azv8) Rational Rational
- Language.Haskell.Tools.AST: fracLitValue :: forall a_azv8. Partial (Literal a_azv8) (Literal a_azv8) Rational Rational
- Language.Haskell.Tools.AST: fromOrdSrcSpan :: OrdSrcSpan -> SrcSpan
- Language.Haskell.Tools.AST: funBindMatches :: forall a_aFZj. Partial (ValueBind a_aFZj) (ValueBind a_aFZj) (AnnList Match a_aFZj) (AnnList Match a_aFZj)
- Language.Haskell.Tools.AST: funDepLhs :: forall a_aHVE. Lens (FunDep a_aHVE) (FunDep a_aHVE) (AnnList Name a_aHVE) (AnnList Name a_aHVE)
- Language.Haskell.Tools.AST: funDepRhs :: forall a_aHVE. Lens (FunDep a_aHVE) (FunDep a_aHVE) (AnnList Name a_aHVE) (AnnList Name a_aHVE)
- Language.Haskell.Tools.AST: funDeps :: forall a_aHVF a'_aQkN. Lens (FunDeps a_aHVF) (FunDeps a'_aQkN) (AnnList FunDep a_aHVF) (AnnList FunDep a'_aQkN)
- Language.Haskell.Tools.AST: gadtConNames :: forall a_aHVI. Lens (GadtConDecl a_aHVI) (GadtConDecl a_aHVI) (AnnList Name a_aHVI) (AnnList Name a_aHVI)
- Language.Haskell.Tools.AST: gadtConNormalType :: forall a_aHVH. Partial (GadtConType a_aHVH) (GadtConType a_aHVH) (Ann Type a_aHVH) (Ann Type a_aHVH)
- Language.Haskell.Tools.AST: gadtConRecordFields :: forall a_aHVH. Partial (GadtConType a_aHVH) (GadtConType a_aHVH) (AnnList FieldDecl a_aHVH) (AnnList FieldDecl a_aHVH)
- Language.Haskell.Tools.AST: gadtConResultType :: forall a_aHVH. Partial (GadtConType a_aHVH) (GadtConType a_aHVH) (Ann Type a_aHVH) (Ann Type a_aHVH)
- Language.Haskell.Tools.AST: gadtConType :: forall a_aHVI. Lens (GadtConDecl a_aHVI) (GadtConDecl a_aHVI) (Ann GadtConType a_aHVI) (Ann GadtConType a_aHVI)
- Language.Haskell.Tools.AST: gadtFieldName :: forall a_aHVG. Partial (GadtField a_aHVG) (GadtField a_aHVG) (Ann Name a_aHVG) (Ann Name a_aHVG)
- Language.Haskell.Tools.AST: gadtFieldType :: forall a_aHVG. Lens (GadtField a_aHVG) (GadtField a_aHVG) (Ann Type a_aHVG) (Ann Type a_aHVG)
- Language.Haskell.Tools.AST: getAnnot :: HasAnnot node => node a -> a
- Language.Haskell.Tools.AST: getNode :: (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) => RealSrcSpan -> node a -> inner a
- Language.Haskell.Tools.AST: getNodeContaining :: (Biplate (node a) (Ann inner a), HasAnnot node, HasRange a) => RealSrcSpan -> node a -> Maybe (Ann inner a)
- Language.Haskell.Tools.AST: getRange :: HasRange annot => annot -> SrcSpan
- Language.Haskell.Tools.AST: getValBindInList :: (BindingElem d, HasRange a) => RealSrcSpan -> AnnList d a -> Maybe (Ann ValueBind a)
- Language.Haskell.Tools.AST: guardBinds :: forall a_aFZa. Partial (RhsGuard a_aFZa) (RhsGuard a_aFZa) (AnnList LocalBind a_aFZa) (AnnList LocalBind a_aFZa)
- Language.Haskell.Tools.AST: guardCheck :: forall a_aFZa. Partial (RhsGuard a_aFZa) (RhsGuard a_aFZa) (Ann Expr a_aFZa) (Ann Expr a_aFZa)
- Language.Haskell.Tools.AST: guardExpr :: forall a_aFZb. Lens (GuardedRhs a_aFZb) (GuardedRhs a_aFZb) (Ann Expr a_aFZb) (Ann Expr a_aFZb)
- Language.Haskell.Tools.AST: guardPat :: forall a_aFZa. Partial (RhsGuard a_aFZa) (RhsGuard a_aFZa) (Ann Pattern a_aFZa) (Ann Pattern a_aFZa)
- Language.Haskell.Tools.AST: guardRhs :: forall a_aFZa. Partial (RhsGuard a_aFZa) (RhsGuard a_aFZa) (Ann Expr a_aFZa) (Ann Expr a_aFZa)
- Language.Haskell.Tools.AST: guardStmts :: forall a_aFZb. Lens (GuardedRhs a_aFZb) (GuardedRhs a_aFZb) (AnnList RhsGuard a_aFZb) (AnnList RhsGuard a_aFZb)
- Language.Haskell.Tools.AST: hasRange :: (HasAnnot node, HasRange a) => RealSrcSpan -> node a -> Bool
- Language.Haskell.Tools.AST: ieName :: forall a_aMvp. Lens (IESpec a_aMvp) (IESpec a_aMvp) (Ann Name a_aMvp) (Ann Name a_aMvp)
- Language.Haskell.Tools.AST: ieSubspec :: forall a_aMvp. Lens (IESpec a_aMvp) (IESpec a_aMvp) (AnnMaybe SubSpec a_aMvp) (AnnMaybe SubSpec a_aMvp)
- Language.Haskell.Tools.AST: ihConName :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann Name a_aHVz) (Ann Name a_aHVz)
- Language.Haskell.Tools.AST: ihFun :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann InstanceHead a_aHVz) (Ann InstanceHead a_aHVz)
- Language.Haskell.Tools.AST: ihHead :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann InstanceHead a_aHVz) (Ann InstanceHead a_aHVz)
- Language.Haskell.Tools.AST: ihLeftOp :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann Type a_aHVz) (Ann Type a_aHVz)
- Language.Haskell.Tools.AST: ihOperator :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann Name a_aHVz) (Ann Name a_aHVz)
- Language.Haskell.Tools.AST: ihType :: forall a_aHVz. Partial (InstanceHead a_aHVz) (InstanceHead a_aHVz) (Ann Type a_aHVz) (Ann Type a_aHVz)
- Language.Haskell.Tools.AST: importAs :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe ImportRenaming a_aMvk) (AnnMaybe ImportRenaming a_aMvk)
- Language.Haskell.Tools.AST: importExacts :: Simple Traversal (ImportDecl a) (IESpec a)
- Language.Haskell.Tools.AST: importHidings :: Simple Traversal (ImportDecl a) (IESpec a)
- Language.Haskell.Tools.AST: importIsExact :: ImportDecl a -> Bool
- Language.Haskell.Tools.AST: importIsHiding :: ImportDecl a -> Bool
- Language.Haskell.Tools.AST: importModule :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (Ann SimpleName a_aMvk) (Ann SimpleName a_aMvk)
- Language.Haskell.Tools.AST: importPkg :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe StringNode a_aMvk) (AnnMaybe StringNode a_aMvk)
- Language.Haskell.Tools.AST: importQualified :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe ImportQualified a_aMvk) (AnnMaybe ImportQualified a_aMvk)
- Language.Haskell.Tools.AST: importQualifiers :: ImportDecl a -> [[String]]
- Language.Haskell.Tools.AST: importRename :: forall a_aMve a'_aNRT. Lens (ImportRenaming a_aMve) (ImportRenaming a'_aNRT) (Ann SimpleName a_aMve) (Ann SimpleName a'_aNRT)
- Language.Haskell.Tools.AST: importSafe :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe ImportSafe a_aMvk) (AnnMaybe ImportSafe a_aMvk)
- Language.Haskell.Tools.AST: importSource :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe ImportSource a_aMvk) (AnnMaybe ImportSource a_aMvk)
- Language.Haskell.Tools.AST: importSpec :: forall a_aMvk. Lens (ImportDecl a_aMvk) (ImportDecl a_aMvk) (AnnMaybe ImportSpec a_aMvk) (AnnMaybe ImportSpec a_aMvk)
- Language.Haskell.Tools.AST: importSpecHiding :: forall a_aMvj. Partial (ImportSpec a_aMvj) (ImportSpec a_aMvj) (AnnList IESpec a_aMvj) (AnnList IESpec a_aMvj)
- Language.Haskell.Tools.AST: importSpecList :: forall a_aMvj. Partial (ImportSpec a_aMvj) (ImportSpec a_aMvj) (AnnList IESpec a_aMvj) (AnnList IESpec a_aMvj)
- Language.Haskell.Tools.AST: importedModule :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) Module Module
- Language.Haskell.Tools.AST: importedNames :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) [n_aoJm] [n_aoJm]
- Language.Haskell.Tools.AST: injAnnDeps :: forall a_aHVO. Lens (InjectivityAnn a_aHVO) (InjectivityAnn a_aHVO) (AnnList Name a_aHVO) (AnnList Name a_aHVO)
- Language.Haskell.Tools.AST: injAnnRes :: forall a_aHVO. Lens (InjectivityAnn a_aHVO) (InjectivityAnn a_aHVO) (Ann Name a_aHVO) (Ann Name a_aHVO)
- Language.Haskell.Tools.AST: inlinableDef :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann Name a_aFZ9) (Ann Name a_aFZ9)
- Language.Haskell.Tools.AST: inlineDef :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann Name a_aFZ9) (Ann Name a_aFZ9)
- Language.Haskell.Tools.AST: innerExpr :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Splice a_aCVl) (Ann Splice a_aCVl)
- Language.Haskell.Tools.AST: instBodyDataCons :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (AnnList ConDecl a_aHVJ) (AnnList ConDecl a_aHVJ)
- Language.Haskell.Tools.AST: instBodyDataKind :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (AnnMaybe Kind a_aHVJ) (AnnMaybe Kind a_aHVJ)
- Language.Haskell.Tools.AST: instBodyDataNew :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann DataOrNewtypeKeyword a_aHVJ) (Ann DataOrNewtypeKeyword a_aHVJ)
- Language.Haskell.Tools.AST: instBodyDeclFunbind :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann ValueBind a_aHVJ) (Ann ValueBind a_aHVJ)
- Language.Haskell.Tools.AST: instBodyDecls :: forall a_aHVK a'_aPS5. Lens (InstBody a_aHVK) (InstBody a'_aPS5) (AnnList InstBodyDecl a_aHVK) (AnnList InstBodyDecl a'_aPS5)
- Language.Haskell.Tools.AST: instBodyDerivings :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (AnnMaybe Deriving a_aHVJ) (AnnMaybe Deriving a_aHVJ)
- Language.Haskell.Tools.AST: instBodyGadtCons :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (AnnList GadtConDecl a_aHVJ) (AnnList GadtConDecl a_aHVJ)
- Language.Haskell.Tools.AST: instBodyLhsType :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann InstanceRule a_aHVJ) (Ann InstanceRule a_aHVJ)
- Language.Haskell.Tools.AST: instBodyPatSyn :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann PatternSynonym a_aHVJ) (Ann PatternSynonym a_aHVJ)
- Language.Haskell.Tools.AST: instBodyTypeEqn :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann TypeEqn a_aHVJ) (Ann TypeEqn a_aHVJ)
- Language.Haskell.Tools.AST: instBodyTypeSig :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann TypeSignature a_aHVJ) (Ann TypeSignature a_aHVJ)
- Language.Haskell.Tools.AST: intLitValue :: forall a_azv8. Partial (Literal a_azv8) (Literal a_azv8) Integer Integer
- Language.Haskell.Tools.AST: irCtx :: forall a_aHVA. Partial (InstanceRule a_aHVA) (InstanceRule a_aHVA) (AnnMaybe Context a_aHVA) (AnnMaybe Context a_aHVA)
- Language.Haskell.Tools.AST: irHead :: forall a_aHVA. Partial (InstanceRule a_aHVA) (InstanceRule a_aHVA) (Ann InstanceHead a_aHVA) (Ann InstanceHead a_aHVA)
- Language.Haskell.Tools.AST: irRule :: forall a_aHVA. Partial (InstanceRule a_aHVA) (InstanceRule a_aHVA) (Ann InstanceRule a_aHVA) (Ann InstanceRule a_aHVA)
- Language.Haskell.Tools.AST: irVars :: forall a_aHVA. Partial (InstanceRule a_aHVA) (InstanceRule a_aHVA) (AnnMaybe (AnnList TyVar) a_aHVA) (AnnMaybe (AnnList TyVar) a_aHVA)
- Language.Haskell.Tools.AST: isAnnNothing :: AnnMaybe e a -> Bool
- Language.Haskell.Tools.AST: isBinding :: BindingElem d => d a -> Bool
- Language.Haskell.Tools.AST: isDefined :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) Bool Bool
- Language.Haskell.Tools.AST: isInside :: (HasAnnot node, HasRange a) => RealSrcSpan -> node a -> Bool
- Language.Haskell.Tools.AST: isTypeSig :: BindingElem d => d a -> Bool
- Language.Haskell.Tools.AST: kindAppArg :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindAppFun :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindConstr :: forall a_azQH a'_aQQN. Lens (KindConstraint a_azQH) (KindConstraint a'_aQQN) (Ann Kind a_azQH) (Ann Kind a'_aQQN)
- Language.Haskell.Tools.AST: kindElem :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindLeft :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindParen :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindPromoted :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann (Promoted Kind) a_azQG) (Ann (Promoted Kind) a_azQG)
- Language.Haskell.Tools.AST: kindRight :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Kind a_azQG) (Ann Kind a_azQG)
- Language.Haskell.Tools.AST: kindVar :: forall a_azQG. Partial (Kind a_azQG) (Kind a_azQG) (Ann Name a_azQG) (Ann Name a_azQG)
- Language.Haskell.Tools.AST: langExt :: forall a_aMvl. Lens (LanguageExtension a_aMvl) (LanguageExtension a_aMvl) String String
- Language.Haskell.Tools.AST: listAfter :: Partial SpanInfo SpanInfo String String
- Language.Haskell.Tools.AST: listBefore :: Partial SpanInfo SpanInfo String String
- Language.Haskell.Tools.AST: listDefaultSep :: Partial SpanInfo SpanInfo String String
- Language.Haskell.Tools.AST: listElems :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList Expr a_aCVl) (AnnList Expr a_aCVl)
- Language.Haskell.Tools.AST: listIndented :: Partial SpanInfo SpanInfo Bool Bool
- Language.Haskell.Tools.AST: listPos :: Partial SpanInfo SpanInfo SrcLoc SrcLoc
- Language.Haskell.Tools.AST: localBinds :: forall a_aFZg a'_aWYI. Lens (LocalBinds a_aFZg) (LocalBinds a'_aWYI) (AnnList LocalBind a_aFZg) (AnnList LocalBind a'_aWYI)
- Language.Haskell.Tools.AST: localFixity :: forall a_aFZf. Partial (LocalBind a_aFZf) (LocalBind a_aFZf) (Ann FixitySignature a_aFZf) (Ann FixitySignature a_aFZf)
- Language.Haskell.Tools.AST: localSig :: forall a_aFZf. Partial (LocalBind a_aFZf) (LocalBind a_aFZf) (Ann TypeSignature a_aFZf) (Ann TypeSignature a_aFZf)
- Language.Haskell.Tools.AST: localVal :: forall a_aFZf. Partial (LocalBind a_aFZf) (LocalBind a_aFZf) (Ann ValueBind a_aFZf) (Ann ValueBind a_aFZf)
- Language.Haskell.Tools.AST: matchBinds :: forall a_aFZi. Lens (Match a_aFZi) (Match a_aFZi) (AnnMaybe LocalBinds a_aFZi) (AnnMaybe LocalBinds a_aFZi)
- Language.Haskell.Tools.AST: matchLhs :: forall a_aFZi. Lens (Match a_aFZi) (Match a_aFZi) (Ann MatchLhs a_aFZi) (Ann MatchLhs a_aFZi)
- Language.Haskell.Tools.AST: matchLhsArgs :: forall a_aFZh. Lens (MatchLhs a_aFZh) (MatchLhs a_aFZh) (AnnList Pattern a_aFZh) (AnnList Pattern a_aFZh)
- Language.Haskell.Tools.AST: matchLhsLhs :: forall a_aFZh. Partial (MatchLhs a_aFZh) (MatchLhs a_aFZh) (Ann Pattern a_aFZh) (Ann Pattern a_aFZh)
- Language.Haskell.Tools.AST: matchLhsName :: forall a_aFZh. Partial (MatchLhs a_aFZh) (MatchLhs a_aFZh) (Ann Name a_aFZh) (Ann Name a_aFZh)
- Language.Haskell.Tools.AST: matchLhsOperator :: forall a_aFZh. Partial (MatchLhs a_aFZh) (MatchLhs a_aFZh) (Ann Operator a_aFZh) (Ann Operator a_aFZh)
- Language.Haskell.Tools.AST: matchLhsRhs :: forall a_aFZh. Partial (MatchLhs a_aFZh) (MatchLhs a_aFZh) (Ann Pattern a_aFZh) (Ann Pattern a_aFZh)
- Language.Haskell.Tools.AST: matchRhs :: forall a_aFZi. Lens (Match a_aFZi) (Match a_aFZi) (Ann Rhs a_aFZi) (Ann Rhs a_aFZi)
- Language.Haskell.Tools.AST: mhExports :: forall a_aMvs. Lens (ModuleHead a_aMvs) (ModuleHead a_aMvs) (AnnMaybe ExportSpecList a_aMvs) (AnnMaybe ExportSpecList a_aMvs)
- Language.Haskell.Tools.AST: mhName :: forall a_aMvs. Lens (ModuleHead a_aMvs) (ModuleHead a_aMvs) (Ann SimpleName a_aMvs) (Ann SimpleName a_aMvs)
- Language.Haskell.Tools.AST: mhPragma :: forall a_aMvs. Lens (ModuleHead a_aMvs) (ModuleHead a_aMvs) (AnnMaybe ModulePragma a_aMvs) (AnnMaybe ModulePragma a_aMvs)
- Language.Haskell.Tools.AST: minimalAnds :: forall a_aFZ6. Partial (MinimalFormula a_aFZ6) (MinimalFormula a_aFZ6) (AnnList MinimalFormula a_aFZ6) (AnnList MinimalFormula a_aFZ6)
- Language.Haskell.Tools.AST: minimalInner :: forall a_aFZ6. Partial (MinimalFormula a_aFZ6) (MinimalFormula a_aFZ6) (Ann MinimalFormula a_aFZ6) (Ann MinimalFormula a_aFZ6)
- Language.Haskell.Tools.AST: minimalName :: forall a_aFZ6. Partial (MinimalFormula a_aFZ6) (MinimalFormula a_aFZ6) (Ann Name a_aFZ6) (Ann Name a_aFZ6)
- Language.Haskell.Tools.AST: minimalOrs :: forall a_aFZ6. Partial (MinimalFormula a_aFZ6) (MinimalFormula a_aFZ6) (AnnList MinimalFormula a_aFZ6) (AnnList MinimalFormula a_aFZ6)
- Language.Haskell.Tools.AST: modDecl :: forall a_aMvt. Lens (Module a_aMvt) (Module a_aMvt) (AnnList Decl a_aMvt) (AnnList Decl a_aMvt)
- Language.Haskell.Tools.AST: modDeprecatedPragma :: forall a_aMvm. Partial (ModulePragma a_aMvm) (ModulePragma a_aMvm) (AnnList StringNode a_aMvm) (AnnList StringNode a_aMvm)
- Language.Haskell.Tools.AST: modHead :: forall a_aMvt. Lens (Module a_aMvt) (Module a_aMvt) (AnnMaybe ModuleHead a_aMvt) (AnnMaybe ModuleHead a_aMvt)
- Language.Haskell.Tools.AST: modImports :: forall a_aMvt. Lens (Module a_aMvt) (Module a_aMvt) (AnnList ImportDecl a_aMvt) (AnnList ImportDecl a_aMvt)
- Language.Haskell.Tools.AST: modWarningStr :: forall a_aMvm. Partial (ModulePragma a_aMvm) (ModulePragma a_aMvm) (AnnList StringNode a_aMvm) (AnnList StringNode a_aMvm)
- Language.Haskell.Tools.AST: nameElements :: SimpleName a -> [String]
- Language.Haskell.Tools.AST: nameFromList :: AnnList UnqualName a -> SimpleName a
- Language.Haskell.Tools.AST: nameInfo :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) n_aoJm n_aoJm
- Language.Haskell.Tools.AST: nameQualifier :: SimpleName a -> [String]
- Language.Haskell.Tools.AST: nameString :: SimpleName a -> String
- Language.Haskell.Tools.AST: noInlineDef :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann Name a_aFZ9) (Ann Name a_aFZ9)
- Language.Haskell.Tools.AST: nodeSpan :: Partial SpanInfo SpanInfo SrcSpan SrcSpan
- Language.Haskell.Tools.AST: nodesContaining :: forall node inner a. (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) => RealSrcSpan -> Simple Traversal (node a) (inner a)
- Language.Haskell.Tools.AST: nodesWithRange :: forall node inner a. (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) => RealSrcSpan -> Simple Traversal (node a) (inner a)
- Language.Haskell.Tools.AST: numberInteger :: forall a_aCVa. Lens (Number a_aCVa) (Number a_aCVa) Integer Integer
- Language.Haskell.Tools.AST: oneDerived :: forall a_aHVB. Partial (Deriving a_aHVB) (Deriving a_aHVB) (Ann InstanceHead a_aHVB) (Ann InstanceHead a_aHVB)
- Language.Haskell.Tools.AST: operatorName :: forall a_aycS a'_aXVw. Lens (Operator a_aycS) (Operator a'_aXVw) (Ann SimpleName a_aycS) (Ann SimpleName a'_aXVw)
- Language.Haskell.Tools.AST: optionalAfter :: Partial SpanInfo SpanInfo String String
- Language.Haskell.Tools.AST: optionalBefore :: Partial SpanInfo SpanInfo String String
- Language.Haskell.Tools.AST: optionalPos :: Partial SpanInfo SpanInfo SrcLoc SrcLoc
- Language.Haskell.Tools.AST: ordByOccurrence :: SimpleName a -> SimpleName a -> Ordering
- Language.Haskell.Tools.AST: ordSrcSpan :: SrcSpan -> OrdSrcSpan
- Language.Haskell.Tools.AST: patArgs :: forall a_aHVv. Partial (PatSynLhs a_aHVv) (PatSynLhs a_aHVv) (AnnList Name a_aHVv) (AnnList Name a_aHVv)
- Language.Haskell.Tools.AST: patLhs :: forall a_aHVw. Lens (PatternSynonym a_aHVw) (PatternSynonym a_aHVw) (Ann PatSynLhs a_aHVw) (Ann PatSynLhs a_aHVw)
- Language.Haskell.Tools.AST: patName :: forall a_aHVv. Partial (PatSynLhs a_aHVv) (PatSynLhs a_aHVv) (Ann Name a_aHVv) (Ann Name a_aHVv)
- Language.Haskell.Tools.AST: patOpposite :: forall a_aHVt a'_aXuh. Lens (PatSynWhere a_aHVt) (PatSynWhere a'_aXuh) (AnnList Match a_aHVt) (AnnList Match a'_aXuh)
- Language.Haskell.Tools.AST: patQQ :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann QuasiQuote a_aBDS) (Ann QuasiQuote a_aBDS)
- Language.Haskell.Tools.AST: patRhs :: forall a_aHVw. Lens (PatternSynonym a_aHVw) (PatternSynonym a_aHVw) (Ann PatSynRhs a_aHVw) (Ann PatSynRhs a_aHVw)
- Language.Haskell.Tools.AST: patRhsOpposite :: forall a_aHVu. Partial (PatSynRhs a_aHVu) (PatSynRhs a_aHVu) (AnnMaybe PatSynWhere a_aHVu) (AnnMaybe PatSynWhere a_aHVu)
- Language.Haskell.Tools.AST: patRhsPat :: forall a_aHVu. Lens (PatSynRhs a_aHVu) (PatSynRhs a_aHVu) (Ann Pattern a_aHVu) (Ann Pattern a_aHVu)
- Language.Haskell.Tools.AST: patSigName :: forall a_aHVx. Lens (PatternTypeSignature a_aHVx) (PatternTypeSignature a_aHVx) (Ann Name a_aHVx) (Ann Name a_aHVx)
- Language.Haskell.Tools.AST: patSigType :: forall a_aHVx. Lens (PatternTypeSignature a_aHVx) (PatternTypeSignature a_aHVx) (Ann Type a_aHVx) (Ann Type a_aHVx)
- Language.Haskell.Tools.AST: patSynLhs :: forall a_aHVv. Partial (PatSynLhs a_aHVv) (PatSynLhs a_aHVv) (Ann Name a_aHVv) (Ann Name a_aHVv)
- Language.Haskell.Tools.AST: patSynOp :: forall a_aHVv. Partial (PatSynLhs a_aHVv) (PatSynLhs a_aHVv) (Ann Operator a_aHVv) (Ann Operator a_aHVv)
- Language.Haskell.Tools.AST: patSynRhs :: forall a_aHVv. Partial (PatSynLhs a_aHVv) (PatSynLhs a_aHVv) (Ann Name a_aHVv) (Ann Name a_aHVv)
- Language.Haskell.Tools.AST: patternArgs :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (AnnList Pattern a_aBDS) (AnnList Pattern a_aBDS)
- Language.Haskell.Tools.AST: patternElems :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (AnnList Pattern a_aBDS) (AnnList Pattern a_aBDS)
- Language.Haskell.Tools.AST: patternExpr :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Expr a_aBDS) (Ann Expr a_aBDS)
- Language.Haskell.Tools.AST: patternFields :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (AnnList PatternField a_aBDS) (AnnList PatternField a_aBDS)
- Language.Haskell.Tools.AST: patternInner :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Pattern a_aBDS) (Ann Pattern a_aBDS)
- Language.Haskell.Tools.AST: patternLhs :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Pattern a_aBDS) (Ann Pattern a_aBDS)
- Language.Haskell.Tools.AST: patternLit :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Literal a_aBDS) (Ann Literal a_aBDS)
- Language.Haskell.Tools.AST: patternLiteral :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Literal a_aBDS) (Ann Literal a_aBDS)
- Language.Haskell.Tools.AST: patternName :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Name a_aBDS) (Ann Name a_aBDS)
- Language.Haskell.Tools.AST: patternOperator :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Operator a_aBDS) (Ann Operator a_aBDS)
- Language.Haskell.Tools.AST: patternRhs :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Pattern a_aBDS) (Ann Pattern a_aBDS)
- Language.Haskell.Tools.AST: patternSplice :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Splice a_aBDS) (Ann Splice a_aBDS)
- Language.Haskell.Tools.AST: patternType :: forall a_aBDS. Partial (Pattern a_aBDS) (Pattern a_aBDS) (Ann Type a_aBDS) (Ann Type a_aBDS)
- Language.Haskell.Tools.AST: phaseNum :: forall a_aycA. Lens (PhaseNumber a_aycA) (PhaseNumber a_aycA) Integer Integer
- Language.Haskell.Tools.AST: phaseNumber :: forall a_aycB. Lens (PhaseControl a_aycB) (PhaseControl a_aycB) (Ann PhaseNumber a_aycB) (Ann PhaseNumber a_aycB)
- Language.Haskell.Tools.AST: phaseUntil :: forall a_aycB. Lens (PhaseControl a_aycB) (PhaseControl a_aycB) (AnnMaybe PhaseInvert a_aycB) (AnnMaybe PhaseInvert a_aycB)
- Language.Haskell.Tools.AST: pragmaConlike :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnMaybe ConlikeAnnot a_aFZ9) (AnnMaybe ConlikeAnnot a_aFZ9)
- Language.Haskell.Tools.AST: pragmaFileName :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnMaybe StringNode a_aFZ9) (AnnMaybe StringNode a_aFZ9)
- Language.Haskell.Tools.AST: pragmaFormula :: forall a_aHVM. Partial (ClassElement a_aHVM) (ClassElement a_aHVM) (Ann MinimalFormula a_aHVM) (Ann MinimalFormula a_aHVM)
- Language.Haskell.Tools.AST: pragmaLineNum :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann LineNumber a_aFZ9) (Ann LineNumber a_aFZ9)
- Language.Haskell.Tools.AST: pragmaMessage :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann StringNode a_aFZ9) (Ann StringNode a_aFZ9)
- Language.Haskell.Tools.AST: pragmaObjects :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnList Name a_aFZ9) (AnnList Name a_aFZ9)
- Language.Haskell.Tools.AST: pragmaPhase :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnMaybe PhaseControl a_aFZ9) (AnnMaybe PhaseControl a_aFZ9)
- Language.Haskell.Tools.AST: pragmaRule :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnList Rule a_aFZ9) (AnnList Rule a_aFZ9)
- Language.Haskell.Tools.AST: pragmaSrcRange :: forall a_aCVc. Partial (ExprPragma a_aCVc) (ExprPragma a_aCVc) (Ann SourceRange a_aCVc) (Ann SourceRange a_aCVc)
- Language.Haskell.Tools.AST: pragmaStr :: forall a_aCVc. Partial (ExprPragma a_aCVc) (ExprPragma a_aCVc) (Ann StringNode a_aCVc) (Ann StringNode a_aCVc)
- Language.Haskell.Tools.AST: precedenceValue :: forall a_aycD. Lens (Precedence a_aycD) (Precedence a_aycD) Int Int
- Language.Haskell.Tools.AST: procExpr :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Cmd a_aCVl) (Ann Cmd a_aCVl)
- Language.Haskell.Tools.AST: procPattern :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Pattern a_aCVl) (Ann Pattern a_aCVl)
- Language.Haskell.Tools.AST: promotedConName :: forall t_azQE a_azQF. Partial (Promoted t_azQE a_azQF) (Promoted t_azQE a_azQF) (Ann Name a_azQF) (Ann Name a_azQF)
- Language.Haskell.Tools.AST: promotedElements :: forall t_azQE a_azQF t'_aXOh. Partial (Promoted t_azQE a_azQF) (Promoted t'_aXOh a_azQF) (AnnList t_azQE a_azQF) (AnnList t'_aXOh a_azQF)
- Language.Haskell.Tools.AST: promotedIntValue :: forall t_azQE a_azQF. Partial (Promoted t_azQE a_azQF) (Promoted t_azQE a_azQF) Integer Integer
- Language.Haskell.Tools.AST: promotedStringValue :: forall t_azQE a_azQF. Partial (Promoted t_azQE a_azQF) (Promoted t_azQE a_azQF) String String
- Language.Haskell.Tools.AST: qqExprBody :: forall a_aM7S. Lens (QuasiQuote a_aM7S) (QuasiQuote a_aM7S) (Ann QQString a_aM7S) (Ann QQString a_aM7S)
- Language.Haskell.Tools.AST: qqExprName :: forall a_aM7S. Lens (QuasiQuote a_aM7S) (QuasiQuote a_aM7S) (Ann Name a_aM7S) (Ann Name a_aM7S)
- Language.Haskell.Tools.AST: qqString :: forall a_aM7R. Lens (QQString a_aM7R) (QQString a_aM7R) String String
- Language.Haskell.Tools.AST: qualifiers :: forall a_aycQ. Lens (SimpleName a_aycQ) (SimpleName a_aycQ) (AnnList UnqualName a_aycQ) (AnnList UnqualName a_aycQ)
- Language.Haskell.Tools.AST: quotedName :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (Ann Name a_aCVl) (Ann Name a_aCVl)
- Language.Haskell.Tools.AST: rhsCaseExpr :: forall expr_aCVf a_aCVg. Partial (CaseRhs' expr_aCVf a_aCVg) (CaseRhs' expr_aCVf a_aCVg) (Ann expr_aCVf a_aCVg) (Ann expr_aCVf a_aCVg)
- Language.Haskell.Tools.AST: rhsCaseGuards :: forall expr_aCVf a_aCVg. Partial (CaseRhs' expr_aCVf a_aCVg) (CaseRhs' expr_aCVf a_aCVg) (AnnList (GuardedCaseRhs' expr_aCVf) a_aCVg) (AnnList (GuardedCaseRhs' expr_aCVf) a_aCVg)
- Language.Haskell.Tools.AST: rhsExpr :: forall a_aFZc. Partial (Rhs a_aFZc) (Rhs a_aFZc) (Ann Expr a_aFZc) (Ann Expr a_aFZc)
- Language.Haskell.Tools.AST: rhsGuards :: forall a_aFZc. Partial (Rhs a_aFZc) (Rhs a_aFZc) (AnnList GuardedRhs a_aFZc) (AnnList GuardedRhs a_aFZc)
- Language.Haskell.Tools.AST: ruleBounded :: forall a_aFZ8. Lens (Rule a_aFZ8) (Rule a_aFZ8) (AnnList TyVar a_aFZ8) (AnnList TyVar a_aFZ8)
- Language.Haskell.Tools.AST: ruleLhs :: forall a_aFZ8. Lens (Rule a_aFZ8) (Rule a_aFZ8) (Ann Expr a_aFZ8) (Ann Expr a_aFZ8)
- Language.Haskell.Tools.AST: ruleName :: forall a_aFZ8. Lens (Rule a_aFZ8) (Rule a_aFZ8) (Ann StringNode a_aFZ8) (Ann StringNode a_aFZ8)
- Language.Haskell.Tools.AST: rulePhase :: forall a_aFZ8. Lens (Rule a_aFZ8) (Rule a_aFZ8) (AnnMaybe PhaseControl a_aFZ8) (AnnMaybe PhaseControl a_aFZ8)
- Language.Haskell.Tools.AST: ruleRhs :: forall a_aFZ8. Lens (Rule a_aFZ8) (Rule a_aFZ8) (Ann Expr a_aFZ8) (Ann Expr a_aFZ8)
- Language.Haskell.Tools.AST: scopedLocals :: forall n_aoJm. Partial (SemanticInfo n_aoJm) (SemanticInfo n_aoJm) [[Name]] [[Name]]
- Language.Haskell.Tools.AST: semanticInfo :: forall sema_ao1N src_ao1O sema'_aoxU. Lens (NodeInfo sema_ao1N src_ao1O) (NodeInfo sema'_aoxU src_ao1O) sema_ao1N sema'_aoxU
- Language.Haskell.Tools.AST: semantics :: Simple Lens (Ann a (NodeInfo sema src)) sema
- Language.Haskell.Tools.AST: sigBind :: BindingElem d => Simple Partial (d a) (Ann TypeSignature a)
- Language.Haskell.Tools.AST: simpleName :: forall a_aycR a'_aXWt. Lens (Name a_aycR) (Name a'_aXWt) (Ann SimpleName a_aycR) (Ann SimpleName a'_aXWt)
- Language.Haskell.Tools.AST: simpleNameStr :: forall a_aycP. Lens (UnqualName a_aycP) (UnqualName a_aycP) String String
- Language.Haskell.Tools.AST: sourceInfo :: forall sema_ao1N src_ao1O src'_aoxX. Lens (NodeInfo sema_ao1N src_ao1O) (NodeInfo sema_ao1N src'_aoxX) src_ao1O src'_aoxX
- Language.Haskell.Tools.AST: spanRange :: SpanInfo -> SrcSpan
- Language.Haskell.Tools.AST: specializeDef :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (Ann Name a_aFZ9) (Ann Name a_aFZ9)
- Language.Haskell.Tools.AST: specializeInstanceType :: forall a_aHVJ. Partial (InstBodyDecl a_aHVJ) (InstBodyDecl a_aHVJ) (Ann Type a_aHVJ) (Ann Type a_aHVJ)
- Language.Haskell.Tools.AST: specializeType :: forall a_aFZ9. Partial (TopLevelPragma a_aFZ9) (TopLevelPragma a_aFZ9) (AnnList Type a_aFZ9) (AnnList Type a_aFZ9)
- Language.Haskell.Tools.AST: spliceExpr :: forall a_aM7T. Partial (Splice a_aM7T) (Splice a_aM7T) (Ann Expr a_aM7T) (Ann Expr a_aM7T)
- Language.Haskell.Tools.AST: spliceId :: forall a_aM7T. Partial (Splice a_aM7T) (Splice a_aM7T) (Ann Name a_aM7T) (Ann Name a_aM7T)
- Language.Haskell.Tools.AST: srFileName :: forall a_aCVb. Lens (SourceRange a_aCVb) (SourceRange a_aCVb) (Ann StringNode a_aCVb) (Ann StringNode a_aCVb)
- Language.Haskell.Tools.AST: srFromCol :: forall a_aCVb. Lens (SourceRange a_aCVb) (SourceRange a_aCVb) (Ann Number a_aCVb) (Ann Number a_aCVb)
- Language.Haskell.Tools.AST: srFromLine :: forall a_aCVb. Lens (SourceRange a_aCVb) (SourceRange a_aCVb) (Ann Number a_aCVb) (Ann Number a_aCVb)
- Language.Haskell.Tools.AST: srToCol :: forall a_aCVb. Lens (SourceRange a_aCVb) (SourceRange a_aCVb) (Ann Number a_aCVb) (Ann Number a_aCVb)
- Language.Haskell.Tools.AST: srToLine :: forall a_aCVb. Lens (SourceRange a_aCVb) (SourceRange a_aCVb) (Ann Number a_aCVb) (Ann Number a_aCVb)
- Language.Haskell.Tools.AST: stmtBinds :: forall expr_aCuP a_aCuQ. Partial (Stmt' expr_aCuP a_aCuQ) (Stmt' expr_aCuP a_aCuQ) (AnnList LocalBind a_aCuQ) (AnnList LocalBind a_aCuQ)
- Language.Haskell.Tools.AST: stmtExpr :: forall expr_aCuP a_aCuQ. Partial (Stmt' expr_aCuP a_aCuQ) (Stmt' expr_aCuP a_aCuQ) (Ann expr_aCuP a_aCuQ) (Ann expr_aCuP a_aCuQ)
- Language.Haskell.Tools.AST: stmtPattern :: forall expr_aCuP a_aCuQ. Partial (Stmt' expr_aCuP a_aCuQ) (Stmt' expr_aCuP a_aCuQ) (Ann Pattern a_aCuQ) (Ann Pattern a_aCuQ)
- Language.Haskell.Tools.AST: stringLitValue :: forall a_azv8. Partial (Literal a_azv8) (Literal a_azv8) String String
- Language.Haskell.Tools.AST: stringNodeStr :: forall a_aycO. Lens (StringNode a_aycO) (StringNode a_aycO) String String
- Language.Haskell.Tools.AST: teLhs :: forall a_aHVy. Lens (TypeEqn a_aHVy) (TypeEqn a_aHVy) (Ann Type a_aHVy) (Ann Type a_aHVy)
- Language.Haskell.Tools.AST: teRhs :: forall a_aHVy. Lens (TypeEqn a_aHVy) (TypeEqn a_aHVy) (Ann Type a_aHVy) (Ann Type a_aHVy)
- Language.Haskell.Tools.AST: tfHead :: forall a_aHVQ. Lens (TypeFamily a_aHVQ) (TypeFamily a_aHVQ) (Ann DeclHead a_aHVQ) (Ann DeclHead a_aHVQ)
- Language.Haskell.Tools.AST: tfInjectivity :: forall a_aHVP. Partial (TypeFamilySpec a_aHVP) (TypeFamilySpec a_aHVP) (Ann InjectivityAnn a_aHVP) (Ann InjectivityAnn a_aHVP)
- Language.Haskell.Tools.AST: tfKind :: forall a_aHVQ. Partial (TypeFamily a_aHVQ) (TypeFamily a_aHVQ) (AnnMaybe KindConstraint a_aHVQ) (AnnMaybe KindConstraint a_aHVQ)
- Language.Haskell.Tools.AST: tfSpec :: forall a_aHVQ. Partial (TypeFamily a_aHVQ) (TypeFamily a_aHVQ) (AnnMaybe TypeFamilySpec a_aHVQ) (AnnMaybe TypeFamilySpec a_aHVQ)
- Language.Haskell.Tools.AST: tfSpecKind :: forall a_aHVP. Partial (TypeFamilySpec a_aHVP) (TypeFamilySpec a_aHVP) (Ann KindConstraint a_aHVP) (Ann KindConstraint a_aHVP)
- Language.Haskell.Tools.AST: thenExpr :: forall a_aCuN. Partial (CompStmt a_aCuN) (CompStmt a_aCuN) (Ann Expr a_aCuN) (Ann Expr a_aCuN)
- Language.Haskell.Tools.AST: tpPromoted :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann (Promoted Type) a_aArM) (Ann (Promoted Type) a_aArM)
- Language.Haskell.Tools.AST: tsName :: forall a_aFZe. Lens (TypeSignature a_aFZe) (TypeSignature a_aFZe) (AnnList Name a_aFZe) (AnnList Name a_aFZe)
- Language.Haskell.Tools.AST: tsSplice :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Splice a_aArM) (Splice a_aArM)
- Language.Haskell.Tools.AST: tsType :: forall a_aFZe. Lens (TypeSignature a_aFZe) (TypeSignature a_aFZe) (Ann Type a_aFZe) (Ann Type a_aFZe)
- Language.Haskell.Tools.AST: tupSecExpr :: forall a_aCVj a'_aX4y. Partial (TupSecElem a_aCVj) (TupSecElem a'_aX4y) (Ann Expr a_aCVj) (Ann Expr a'_aX4y)
- Language.Haskell.Tools.AST: tupleElems :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList Expr a_aCVl) (AnnList Expr a_aCVl)
- Language.Haskell.Tools.AST: tupleSectionElems :: forall a_aCVl. Partial (Expr a_aCVl) (Expr a_aCVl) (AnnList TupSecElem a_aCVl) (AnnList TupSecElem a_aCVl)
- Language.Haskell.Tools.AST: tyVarKind :: forall a_aArN. Lens (TyVar a_aArN) (TyVar a_aArN) (AnnMaybe KindConstraint a_aArN) (AnnMaybe KindConstraint a_aArN)
- Language.Haskell.Tools.AST: tyVarName :: forall a_aArN. Lens (TyVar a_aArN) (TyVar a_aArN) (Ann Name a_aArN) (Ann Name a_aArN)
- Language.Haskell.Tools.AST: type Alt = Alt' Expr
- Language.Haskell.Tools.AST: type CaseRhs = CaseRhs' Expr
- Language.Haskell.Tools.AST: type CmdAlt = Alt' Cmd
- Language.Haskell.Tools.AST: type CmdCaseRhs = CaseRhs' Cmd
- Language.Haskell.Tools.AST: type CmdGuardedCaseRhs = GuardedCaseRhs' Cmd
- Language.Haskell.Tools.AST: type GuardedCaseRhs = GuardedCaseRhs' Expr
- Language.Haskell.Tools.AST: type RangeInfo = NodeInfo (SemanticInfo RdrName) SpanInfo
- Language.Haskell.Tools.AST: type RangeWithName = NodeInfo (SemanticInfo Name) SpanInfo
- Language.Haskell.Tools.AST: type RangeWithType = NodeInfo (SemanticInfo Id) SpanInfo
- Language.Haskell.Tools.AST: type Stmt = Stmt' Expr
- Language.Haskell.Tools.AST: typeArg :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeBounded :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (AnnList TyVar a_aArM) (AnnList TyVar a_aArM)
- Language.Haskell.Tools.AST: typeCon :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeCtx :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Context a_aArM) (Ann Context a_aArM)
- Language.Haskell.Tools.AST: typeElement :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeElements :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (AnnList Type a_aArM) (AnnList Type a_aArM)
- Language.Haskell.Tools.AST: typeInner :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeKind :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Kind a_aArM) (Ann Kind a_aArM)
- Language.Haskell.Tools.AST: typeLeft :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeName :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Name a_aArM) (Ann Name a_aArM)
- Language.Haskell.Tools.AST: typeOperator :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Operator a_aArM) (Ann Operator a_aArM)
- Language.Haskell.Tools.AST: typeParam :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeParams :: Simple Traversal (Ann Type a) (Ann Type a)
- Language.Haskell.Tools.AST: typeQQ :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (QuasiQuote a_aArM) (QuasiQuote a_aArM)
- Language.Haskell.Tools.AST: typeResult :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeRight :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeType :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Type a_aArM) (Ann Type a_aArM)
- Language.Haskell.Tools.AST: typeWildcardName :: forall a_aArM. Partial (Type a_aArM) (Type a_aArM) (Ann Name a_aArM) (Ann Name a_aArM)
- Language.Haskell.Tools.AST: unqualifiedName :: forall a_aycQ. Lens (SimpleName a_aycQ) (SimpleName a_aycQ) (Ann UnqualName a_aycQ) (Ann UnqualName a_aycQ)
- Language.Haskell.Tools.AST: usingExpr :: forall a_aCuN. Partial (CompStmt a_aCuN) (CompStmt a_aCuN) (AnnMaybe Expr a_aCuN) (AnnMaybe Expr a_aCuN)
- Language.Haskell.Tools.AST: valBind :: BindingElem d => Simple Partial (d a) (Ann ValueBind a)
- Language.Haskell.Tools.AST: valBindLocals :: forall a_aFZj. Partial (ValueBind a_aFZj) (ValueBind a_aFZj) (AnnMaybe LocalBinds a_aFZj) (AnnMaybe LocalBinds a_aFZj)
- Language.Haskell.Tools.AST: valBindPat :: forall a_aFZj. Partial (ValueBind a_aFZj) (ValueBind a_aFZj) (Ann Pattern a_aFZj) (Ann Pattern a_aFZj)
- Language.Haskell.Tools.AST: valBindRhs :: forall a_aFZj. Partial (ValueBind a_aFZj) (ValueBind a_aFZj) (Ann Rhs a_aFZj) (Ann Rhs a_aFZj)
- Language.Haskell.Tools.AST: valBindsInList :: BindingElem d => Simple Traversal (AnnList d a) (Ann ValueBind a)
Files
- Language/Haskell/Tools/AST.hs +18/−30
- Language/Haskell/Tools/AST/Ann.hs +343/−103
- Language/Haskell/Tools/AST/Base.hs +32/−29
- Language/Haskell/Tools/AST/Base.hs-boot +5/−0
- Language/Haskell/Tools/AST/Binds.hs +75/−75
- Language/Haskell/Tools/AST/Binds.hs-boot +6/−6
- Language/Haskell/Tools/AST/Decls.hs +167/−167
- Language/Haskell/Tools/AST/Exprs.hs +113/−113
- Language/Haskell/Tools/AST/Exprs.hs-boot +4/−4
- Language/Haskell/Tools/AST/Helpers.hs +57/−53
- Language/Haskell/Tools/AST/Instances.hs +2/−1
- Language/Haskell/Tools/AST/Instances/Data.hs +106/−105
- Language/Haskell/Tools/AST/Instances/Eq.hs +106/−105
- Language/Haskell/Tools/AST/Instances/Generic.hs +106/−105
- Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs +132/−0
- Language/Haskell/Tools/AST/Instances/Show.hs +106/−105
- Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs +132/−0
- Language/Haskell/Tools/AST/Instances/StructuralTraversal.hs +0/−183
- Language/Haskell/Tools/AST/Kinds.hs +15/−15
- Language/Haskell/Tools/AST/Literals.hs +1/−1
- Language/Haskell/Tools/AST/Modules.hs +43/−44
- Language/Haskell/Tools/AST/Modules.hs-boot +8/−0
- Language/Haskell/Tools/AST/Patterns.hs +31/−31
- Language/Haskell/Tools/AST/References.hs +1/−0
- Language/Haskell/Tools/AST/SemaInfoTypes.hs +144/−0
- Language/Haskell/Tools/AST/Stmts.hs +14/−14
- Language/Haskell/Tools/AST/TH.hs +12/−12
- Language/Haskell/Tools/AST/TH.hs-boot +9/−6
- Language/Haskell/Tools/AST/TH/SemanticTraversal.hs +76/−0
- Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs +82/−0
- Language/Haskell/Tools/AST/Types.hs +40/−40
- haskell-tools-ast.cabal +8/−3
Language/Haskell/Tools/AST.hs view
@@ -2,37 +2,25 @@ -- Different layers of the AST are recursive, to separate them into modules -- we introduced source imports. module Language.Haskell.Tools.AST - ( module Language.Haskell.Tools.AST.Modules - , module Language.Haskell.Tools.AST.TH - , module Language.Haskell.Tools.AST.Decls - , module Language.Haskell.Tools.AST.Binds - , module Language.Haskell.Tools.AST.Exprs - , module Language.Haskell.Tools.AST.Stmts - , module Language.Haskell.Tools.AST.Patterns - , module Language.Haskell.Tools.AST.Types - , module Language.Haskell.Tools.AST.Kinds - , module Language.Haskell.Tools.AST.Literals - , module Language.Haskell.Tools.AST.Base - , module Language.Haskell.Tools.AST.Ann - , module Language.Haskell.Tools.AST.References - , module Language.Haskell.Tools.AST.Helpers - , module Language.Haskell.Tools.AST.Utils.OrdSrcSpan + ( module Exported ) where import Language.Haskell.Tools.AST.Instances -import Language.Haskell.Tools.AST.References -import Language.Haskell.Tools.AST.Helpers -import Language.Haskell.Tools.AST.Modules -import Language.Haskell.Tools.AST.TH -import Language.Haskell.Tools.AST.Decls -import Language.Haskell.Tools.AST.Binds -import Language.Haskell.Tools.AST.Exprs -import Language.Haskell.Tools.AST.Stmts -import Language.Haskell.Tools.AST.Patterns -import Language.Haskell.Tools.AST.Types -import Language.Haskell.Tools.AST.Kinds -import Language.Haskell.Tools.AST.Literals -import Language.Haskell.Tools.AST.Base -import Language.Haskell.Tools.AST.Ann -import Language.Haskell.Tools.AST.Utils.OrdSrcSpan+import Language.Haskell.Tools.AST.References as Exported +import Language.Haskell.Tools.AST.Helpers as Exported + +import Language.Haskell.Tools.AST.Modules as Exported +import Language.Haskell.Tools.AST.TH as Exported +import Language.Haskell.Tools.AST.Decls as Exported +import Language.Haskell.Tools.AST.Binds as Exported +import Language.Haskell.Tools.AST.Exprs as Exported +import Language.Haskell.Tools.AST.Stmts as Exported +import Language.Haskell.Tools.AST.Patterns as Exported +import Language.Haskell.Tools.AST.Types as Exported +import Language.Haskell.Tools.AST.Kinds as Exported +import Language.Haskell.Tools.AST.Literals as Exported +import Language.Haskell.Tools.AST.Base as Exported +import Language.Haskell.Tools.AST.Ann as Exported +import Language.Haskell.Tools.AST.Utils.OrdSrcSpan as Exported +import Language.Haskell.Tools.AST.SemaInfoTypes as Exported
Language/Haskell/Tools/AST/Ann.hs view
@@ -3,149 +3,389 @@ , TemplateHaskell , DeriveDataTypeable , StandaloneDeriving + , KindSignatures + , TypeFamilies + , MultiParamTypeClasses + , UndecidableInstances + , AllowAmbiguousTypes + , TypeApplications + , ScopedTypeVariables #-} -- | Parts of AST representation for keeping extra data module Language.Haskell.Tools.AST.Ann where import Data.Data +import Control.Monad.Identity import Control.Reference -import SrcLoc -import Name +import SrcLoc as GHC +import Id as GHC +import qualified Name as GHC import RdrName import Module import Id import Outputable import Language.Haskell.Tools.AST.Utils.GHCInstances +import Language.Haskell.Tools.AST.SemaInfoTypes --- | An element of the AST keeping extra information. -data Ann elem annot --- The type parameters are organized this way because we want the annotation type to --- be more flexible, but the annotation is the first parameter because it eases --- pattern matching. - = Ann { _annotation :: annot -- ^ The extra information for the AST part - , _element :: elem annot -- ^ The original AST part - } - -makeReferences ''Ann - --- | Semantic and source code related information for an AST node. -data NodeInfo sema src - = NodeInfo { _semanticInfo :: sema - , _sourceInfo :: src - } - deriving (Eq, Show, Data) - -makeReferences ''NodeInfo +import {-# SOURCE #-} Language.Haskell.Tools.AST.Modules as AST +import {-# SOURCE #-} Language.Haskell.Tools.AST.Base as AST +import {-# SOURCE #-} Language.Haskell.Tools.AST.Exprs as AST --- | Location info for different types of nodes -data SpanInfo - = NodeSpan { _nodeSpan :: SrcSpan } - | ListPos { _listBefore :: String - , _listAfter :: String - , _listDefaultSep :: String - , _listIndented :: Bool - , _listPos :: SrcLoc - } - | OptionalPos { _optionalBefore :: String - , _optionalAfter :: String - , _optionalPos :: SrcLoc - } - deriving (Eq, Show, Data) +-- * Annotation type resolution -makeReferences ''SpanInfo +-- | A stage in which the nodes are marked with the ranges in the source +-- files which contain the source code of the given AST element. +data RangeStage +deriving instance Data RangeStage + +-- | A stage in which the nodes are still marked with ranges, but these +-- ranges are normalized. Optional and list elements also have ranges +-- in that state. +data NormRangeStage + +deriving instance Data NormRangeStage + +-- | A stage in which AST elements are marked with templates. These +-- templates are hierarchical, and contain the places of the children +-- elements of the node. +data RngTemplateStage + +deriving instance Data RngTemplateStage + +-- | A stage where the annotation controls how the original source code can be +-- retrieved from the AST. A source template is assigned to each node. +-- It has holes where the content of an other node should be printed and +-- ranges for the source code of the node. +data SrcTemplateStage + +deriving instance Data SrcTemplateStage + +-- | With this domain, semantic information can be parameterized. In practice +-- it is only used if the compilation cannot proceed past the type checking phase. +data Dom name + +-- Semantic information that contains types. Only normal names remain in this domain. +data IdDom + +deriving instance (Data name, Typeable name) => Data (Dom name) + +deriving instance Data IdDom + +type SemanticInfo (domain :: *) (node :: * -> * -> *) = SemanticInfo' domain (SemaInfoClassify node) + +data SameInfoNameCls +data SameInfoExprCls +data SameInfoImportCls +data SameInfoModuleCls +data SameInfoDefaultCls + +type family SemaInfoClassify (node :: * -> * -> *) where + SemaInfoClassify SimpleName = SameInfoNameCls + SemaInfoClassify Expr = SameInfoExprCls + SemaInfoClassify ImportDecl = SameInfoImportCls + SemaInfoClassify AST.Module = SameInfoModuleCls + SemaInfoClassify a = SameInfoDefaultCls + +type family SemanticInfo' (domain :: *) (nodecls :: *) + +type instance SemanticInfo' (Dom n) SameInfoNameCls = NameInfo n +type instance SemanticInfo' (Dom n) SameInfoExprCls = ScopeInfo +type instance SemanticInfo' (Dom n) SameInfoImportCls = ImportInfo n +type instance SemanticInfo' (Dom n) SameInfoModuleCls = ModuleInfo GHC.Name +type instance SemanticInfo' (Dom n) SameInfoDefaultCls = NoSemanticInfo + +type instance SemanticInfo' IdDom SameInfoNameCls = CNameInfo +type instance SemanticInfo' IdDom SameInfoExprCls = ScopeInfo +type instance SemanticInfo' IdDom SameInfoImportCls = ImportInfo GHC.Id +type instance SemanticInfo' IdDom SameInfoModuleCls = ModuleInfo GHC.Id +type instance SemanticInfo' IdDom SameInfoDefaultCls = NoSemanticInfo + +-- | Class for domain configuration markers +class ( Typeable d + , Data d + , SemanticInfo' d SameInfoDefaultCls ~ NoSemanticInfo + , Data (SemanticInfo' d SameInfoNameCls) + , Data (SemanticInfo' d SameInfoExprCls) + , Data (SemanticInfo' d SameInfoImportCls) + , Data (SemanticInfo' d SameInfoModuleCls) + , Show (SemanticInfo' d SameInfoNameCls) + , Show (SemanticInfo' d SameInfoExprCls) + , Show (SemanticInfo' d SameInfoImportCls) + , Show (SemanticInfo' d SameInfoModuleCls) + ) => Domain d where + +-- | A semantic domain for the AST. The semantic domain maps semantic information for +-- the different types of nodes in the AST. The kind of semantic domain for an AST +-- depends on which stages of the compilation did it pass. However after transforming +-- the GHC representation to our AST, the domain keeps the same. +-- The domain is not applied to the AST elements that are generated while refactoring. +instance ( Typeable d + , Data d + , SemanticInfo' d SameInfoDefaultCls ~ NoSemanticInfo + , Data (SemanticInfo' d SameInfoNameCls) + , Data (SemanticInfo' d SameInfoExprCls) + , Data (SemanticInfo' d SameInfoImportCls) + , Data (SemanticInfo' d SameInfoModuleCls) + , Show (SemanticInfo' d SameInfoNameCls) + , Show (SemanticInfo' d SameInfoExprCls) + , Show (SemanticInfo' d SameInfoImportCls) + , Show (SemanticInfo' d SameInfoModuleCls) + ) => Domain d where + + +class ( Data (SemanticInfo' d (SemaInfoClassify e)) + , Show (SemanticInfo' d (SemaInfoClassify e)) + , Domain d + ) => DomainWith e d where + +instance ( Data (SemanticInfo' d (SemaInfoClassify e)) + , Show (SemanticInfo' d (SemaInfoClassify e)) + , Domain d + ) => DomainWith e d where + -- | Extracts the concrete range corresponding to a given span. -- In case of lists and optional elements, it may not contain the elements inside. -spanRange :: SpanInfo -> SrcSpan -spanRange (NodeSpan sp) = sp -spanRange ListPos{_listPos = pos} = srcLocSpan pos -spanRange OptionalPos{_optionalPos = pos} = srcLocSpan pos - -class HasRange annot where - getRange :: annot -> SrcSpan - -instance HasRange (NodeInfo sema SpanInfo) where - getRange = spanRange . (^. sourceInfo) - -type RangeInfo = NodeInfo (SemanticInfo RdrName) SpanInfo -type RangeWithName = NodeInfo (SemanticInfo Name) SpanInfo -type RangeWithType = NodeInfo (SemanticInfo Id) SpanInfo +class HasRange a where + getRange :: a -> SrcSpan --- | Semantic information for an AST node. Semantic information is --- currently heterogeneous. -data SemanticInfo n - = NoSemanticInfo -- ^ Semantic info type for any node not - -- carrying additional semantic information - | ScopeInfo { _scopedLocals :: [[Name]] - } - | NameInfo { _scopedLocals :: [[Name]] - , _isDefined :: Bool - , _nameInfo :: n - } -- ^ Info corresponding to a name - | ModuleInfo { _defModuleName :: Module - , _importedNames :: [n] -- ^ Implicitely imported names - } -- ^ Info for the module element - | ImportInfo { _importedModule :: Module -- ^ The name and package of the imported module - , _availableNames :: [n] -- ^ Names available from the imported module - , _importedNames :: [n] -- ^ Names actually imported from the module. - } -- ^ Info corresponding to an import declaration - | AmbiguousNameInfo { _scopedLocals :: [[Name]] - , _isDefined :: Bool - , _ambiguousName :: RdrName - , _ambiguousLocation :: SrcSpan - } - deriving (Eq, Data) +-- | Class for source information stages +class ( Typeable stage + , Data stage + , Data (SpanInfo stage) + , Data (ListInfo stage) + , Data (OptionalInfo stage) + , Show (SpanInfo stage) + , Show (ListInfo stage) + , Show (OptionalInfo stage) + , HasRange (SpanInfo stage) + , HasRange (ListInfo stage) + , HasRange (OptionalInfo stage) + ) + => SourceInfo stage where + -- | Type of source info for normal AST elements + data SpanInfo stage :: * + -- | Type of source info for lists of AST elements + data ListInfo stage :: * + -- | Type of source info for optional AST elements + data OptionalInfo stage :: * -instance Outputable n => Show (SemanticInfo n) where - show NoSemanticInfo = "NoSemanticInfo" - show (ScopeInfo locals) = "(ScopeInfo " ++ showSDocUnsafe (ppr locals) ++ ")" - show (NameInfo locals defined nameInfo) = "(NameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ ")" - show (ModuleInfo mod imp) = "(ModuleInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr imp) ++ ")" - show (ImportInfo mod avail imported) = "(ImportInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr avail) ++ " " ++ showSDocUnsafe (ppr imported) ++ ")" -makeReferences ''SemanticInfo +instance SourceInfo RangeStage where + data SpanInfo RangeStage = NodeSpan { _nodeSpan :: SrcSpan } + deriving (Data) + data ListInfo RangeStage = ListPos { _listBefore :: String + , _listAfter :: String + , _listDefaultSep :: String + , _listIndented :: Bool + , _listPos :: SrcLoc + } + deriving (Data) + data OptionalInfo RangeStage = OptionalPos { _optionalBefore :: String + , _optionalAfter :: String + , _optionalPos :: SrcLoc + } + deriving (Data) +instance Show (SpanInfo RangeStage) where + show (NodeSpan sp) = shortShowSpan sp + +instance Show (ListInfo RangeStage) where + show sp = shortShowLoc (_listPos sp) + +instance Show (OptionalInfo RangeStage) where + show sp = shortShowLoc (_optionalPos sp) + +instance SourceInfo NormRangeStage where + data SpanInfo NormRangeStage = NormNodeInfo { _normNodeSpan :: SrcSpan } + deriving (Data) + data ListInfo NormRangeStage = NormListInfo { _normListBefore :: String + , _normListAfter :: String + , _normListDefaultSep :: String + , _normListIndented :: Bool + , _normListSpan :: SrcSpan + } + deriving (Data) + data OptionalInfo NormRangeStage = NormOptInfo { _normOptBefore :: String + , _normOptAfter :: String + , _normOptSpan :: SrcSpan + } + deriving (Data) + +instance Show (SpanInfo NormRangeStage) where + show (NormNodeInfo sp) = shortShowSpan sp + +instance Show (ListInfo NormRangeStage) where + show sp = shortShowSpan (_normListSpan sp) + +instance Show (OptionalInfo NormRangeStage) where + show sp = shortShowSpan (_normOptSpan sp) + +-- | A short form of showing a range, without file name, for debugging purposes. +shortShowSpan :: SrcSpan -> String +shortShowSpan (UnhelpfulSpan _) = "??-??" +shortShowSpan sp@(RealSrcSpan _) + = shortShowLoc (srcSpanStart sp) ++ "-" ++ shortShowLoc (srcSpanEnd sp) + +-- | A short form of showing a range, without file name, for debugging purposes. +shortShowLoc :: SrcLoc -> String +shortShowLoc (UnhelpfulLoc _) = "??" +shortShowLoc (RealSrcLoc loc) = show (srcLocLine loc) ++ ":" ++ show (srcLocCol loc) + +-- | A class for marking a source information stage. All programs, regardless of +-- correct Haskell programs or not, must go through these stages to be refactored. +class SourceInfo stage + => RangeInfo stage where + nodeSpan :: Simple Lens (SpanInfo stage) GHC.SrcSpan + listPos :: Simple Lens (ListInfo stage) GHC.SrcLoc + optionalPos :: Simple Lens (OptionalInfo stage) GHC.SrcLoc + +instance RangeInfo RangeStage where + nodeSpan = lens _nodeSpan (\v s -> s { _nodeSpan = v }) + listPos = lens _listPos (\v s -> s { _listPos = v }) + optionalPos = lens _optionalPos (\v s -> s { _optionalPos = v }) + +-- * Annotations + +-- | An element of the AST keeping extra information. +data Ann elem dom stage +-- The type parameters are organized this way because we want the annotation type to +-- be more flexible, but the annotation is the first parameter because it eases +-- pattern matching. + = Ann { _annotation :: NodeInfo (SemanticInfo dom elem) (SpanInfo stage) -- ^ The extra information for the AST part + , _element :: elem dom stage -- ^ The original AST part + } + +makeReferences ''Ann + + -- | A list of AST elements -data AnnList e a = AnnList { _annListAnnot :: a - , _annListElems :: [Ann e a] - } +data AnnList elem dom stage = AnnList { _annListAnnot :: NodeInfo (SemanticInfo dom (AnnList elem)) (ListInfo stage) + , _annListElems :: [Ann elem dom stage] + } makeReferences ''AnnList -annList :: Traversal (AnnList e a) (AnnList e' a) (Ann e a) (Ann e' a) +annList :: Traversal (AnnList e d s) (AnnList e d s) (Ann e d s) (Ann e d s) annList = annListElems & traversal -- | An optional AST element -data AnnMaybe e a = AnnMaybe { _annMaybeAnnot :: a - , _annMaybe :: Maybe (Ann e a) - } +data AnnMaybe elem dom stage = AnnMaybe { _annMaybeAnnot :: NodeInfo (SemanticInfo dom (AnnMaybe elem)) (OptionalInfo stage) + , _annMaybe :: Maybe (Ann elem dom stage) + } makeReferences ''AnnMaybe -annJust :: Partial (AnnMaybe e a) (AnnMaybe e' a) (Ann e a) (Ann e' a) +annJust :: Partial (AnnMaybe e d s) (AnnMaybe e d s) (Ann e d s) (Ann e d s) annJust = annMaybe & just -- | An empty list of AST elements -annNil :: a -> AnnList e a +annNil :: NodeInfo (SemanticInfo d (AnnList e)) (ListInfo s) -> AnnList e d s annNil a = AnnList a [] -isAnnNothing :: AnnMaybe e a -> Bool +isAnnNothing :: AnnMaybe e d s -> Bool isAnnNothing (AnnMaybe _ Nothing) = True isAnnNothing (AnnMaybe _ _) = False -- | A non-existing AST part -annNothing :: a -> AnnMaybe e a +annNothing :: NodeInfo (SemanticInfo d (AnnMaybe e)) (OptionalInfo s) -> AnnMaybe e d s annNothing a = AnnMaybe a Nothing - -class HasAnnot node where - getAnnot :: node a -> a -instance HasAnnot (Ann e) where - getAnnot = (^. annotation) - -instance HasAnnot (AnnList e) where - getAnnot = (^. annListAnnot) - -instance HasAnnot (AnnMaybe e) where - getAnnot = (^. annMaybeAnnot) +-- * Info types + +instance HasRange (SpanInfo RangeStage) where + getRange (NodeSpan sp) = sp + +instance HasRange (ListInfo RangeStage) where + getRange ListPos{_listPos = pos} = srcLocSpan pos + +instance HasRange (OptionalInfo RangeStage) where + getRange OptionalPos{_optionalPos = pos} = srcLocSpan pos + +instance HasRange (SpanInfo NormRangeStage) where + getRange (NormNodeInfo sp) = sp + +instance HasRange (ListInfo NormRangeStage) where + getRange NormListInfo{_normListSpan = sp} = sp + +instance HasRange (OptionalInfo NormRangeStage) where + getRange NormOptInfo{_normOptSpan = sp} = sp + +instance SourceInfo stage => HasRange (Ann elem dom stage) where + getRange (Ann a _) = getRange (a ^. sourceInfo) + +instance SourceInfo stage => HasRange (AnnList elem dom stage) where + getRange (AnnList a _) = getRange (a ^. sourceInfo) + +instance SourceInfo stage => HasRange (AnnMaybe elem dom stage) where + getRange (AnnMaybe a _) = getRange (a ^. sourceInfo) + +-- | A class for changing semantic information throught the AST. +class ApplySemaChange cls where + appSemaChange :: SemaTrf f dom1 dom2 -> SemanticInfo' dom1 cls -> f (SemanticInfo' dom2 cls) + +instance ApplySemaChange SameInfoNameCls where appSemaChange = trfSemaNameCls +instance ApplySemaChange SameInfoExprCls where appSemaChange = trfSemaExprCls +instance ApplySemaChange SameInfoImportCls where appSemaChange = trfSemaImportCls +instance ApplySemaChange SameInfoModuleCls where appSemaChange = trfSemaModuleCls +instance ApplySemaChange SameInfoDefaultCls where appSemaChange = trfSemaDefault + +-- | A class for traversing semantic information in an AST +class ApplySemaChange (SemaInfoClassify a) + => SemanticTraversal a where + semaTraverse :: Monad f => SemaTrf f dom1 dom2 -> a dom1 st -> f (a dom2 st) + +-- | A transformation on the possible semantic informations for a given domain +data SemaTrf f dom1 dom2 = SemaTrf { trfSemaNameCls :: SemanticInfo' dom1 SameInfoNameCls -> f (SemanticInfo' dom2 SameInfoNameCls) + , trfSemaExprCls :: SemanticInfo' dom1 SameInfoExprCls -> f (SemanticInfo' dom2 SameInfoExprCls) + , trfSemaImportCls :: SemanticInfo' dom1 SameInfoImportCls -> f (SemanticInfo' dom2 SameInfoImportCls) + , trfSemaModuleCls :: SemanticInfo' dom1 SameInfoModuleCls -> f (SemanticInfo' dom2 SameInfoModuleCls) + , trfSemaDefault :: SemanticInfo' dom1 SameInfoDefaultCls -> f (SemanticInfo' dom2 SameInfoDefaultCls) + } + +instance forall e . (ApplySemaChange (SemaInfoClassify e), SemanticTraversal e) => SemanticTraversal (Ann e) where + semaTraverse f (Ann (NodeInfo sema src) e) = Ann <$> (NodeInfo <$> appSemaChange @(SemaInfoClassify e) f sema <*> pure src) <*> semaTraverse f e + +instance (ApplySemaChange (SemaInfoClassify e), SemanticTraversal e) => SemanticTraversal (AnnList e) where + semaTraverse f (AnnList (NodeInfo sema src) e) = AnnList <$> (NodeInfo <$> trfSemaDefault f sema <*> pure src) <*> mapM (semaTraverse f) e + +instance (ApplySemaChange (SemaInfoClassify e), SemanticTraversal e) => SemanticTraversal (AnnMaybe e) where + semaTraverse f (AnnMaybe (NodeInfo sema src) e) = AnnMaybe <$> (NodeInfo <$> trfSemaDefault f sema <*> pure src) <*> sequence (fmap (semaTraverse f) e) + +-- | A class for traversing source information in an AST +class SourceInfoTraversal a where + sourceInfoTraverseUp :: Monad f => SourceInfoTrf f st1 st2 -> f () -> f () -> a dom st1 -> f (a dom st2) + sourceInfoTraverseDown :: Monad f => SourceInfoTrf f st1 st2 -> f () -> f () -> a dom st1 -> f (a dom st2) + sourceInfoTraverse :: Monad f => SourceInfoTrf f st1 st2 -> a dom st1 -> f (a dom st2) + +-- | A transformation on the possible source informations +data SourceInfoTrf f st1 st2 = SourceInfoTrf { trfSpanInfo :: SpanInfo st1 -> f (SpanInfo st2) + , trfListInfo :: ListInfo st1 -> f (ListInfo st2) + , trfOptionalInfo :: OptionalInfo st1 -> f (OptionalInfo st2) + } + +instance SourceInfoTraversal e => SourceInfoTraversal (Ann e) where + sourceInfoTraverse trf (Ann (NodeInfo sema src) e) + = Ann <$> (NodeInfo sema <$> trfSpanInfo trf src) <*> sourceInfoTraverse trf e + sourceInfoTraverseDown trf desc asc (Ann (NodeInfo sema src) e) + = Ann <$> (NodeInfo sema <$> trfSpanInfo trf src) <*> (desc *> sourceInfoTraverseDown trf desc asc e <* asc) + sourceInfoTraverseUp trf desc asc (Ann (NodeInfo sema src) e) + = flip Ann <$> (desc *> sourceInfoTraverseUp trf desc asc e <* asc) <*> (NodeInfo sema <$> trfSpanInfo trf src) + +instance SourceInfoTraversal e => SourceInfoTraversal (AnnList e) where + sourceInfoTraverse trf (AnnList (NodeInfo sema src) e) + = AnnList <$> (NodeInfo sema <$> trfListInfo trf src) <*> mapM (sourceInfoTraverse trf) e + sourceInfoTraverseDown trf desc asc (AnnList (NodeInfo sema src) e) + = AnnList <$> (NodeInfo sema <$> trfListInfo trf src) <*> (desc *> mapM (sourceInfoTraverseDown trf desc asc) e <* asc) + sourceInfoTraverseUp trf desc asc (AnnList (NodeInfo sema src) e) + = flip AnnList <$> (desc *> mapM (sourceInfoTraverseUp trf desc asc) e <* asc) <*> (NodeInfo sema <$> trfListInfo trf src) + +instance SourceInfoTraversal e => SourceInfoTraversal (AnnMaybe e) where + sourceInfoTraverse trf (AnnMaybe (NodeInfo sema src) e) + = AnnMaybe <$> (NodeInfo sema <$> trfOptionalInfo trf src) <*> sequence (fmap (sourceInfoTraverse trf) e) + sourceInfoTraverseDown trf desc asc (AnnMaybe (NodeInfo sema src) e) + = AnnMaybe <$> (NodeInfo sema <$> trfOptionalInfo trf src) <*> (desc *> sequence (fmap (sourceInfoTraverseDown trf desc asc) e) <* asc) + sourceInfoTraverseUp trf desc asc (AnnMaybe (NodeInfo sema src) e) + = flip AnnMaybe <$> (desc *> sequence (fmap (sourceInfoTraverseUp trf desc asc) e) <* asc) <*> (NodeInfo sema <$> trfOptionalInfo trf src) +
Language/Haskell/Tools/AST/Base.hs view
@@ -9,49 +9,52 @@ import Language.Haskell.Tools.AST.Ann -data Operator a - = BacktickOp { _operatorName :: Ann SimpleName a } -- ^ Backtick operator name: @ a `mod` b @ - | NormalOp { _operatorName :: Ann SimpleName a } +data Operator dom stage + = BacktickOp { _operatorName :: Ann SimpleName dom stage } -- ^ Backtick operator name: @ a `mod` b @ + | NormalOp { _operatorName :: Ann SimpleName dom stage } -data Name a - = ParenName { _simpleName :: Ann SimpleName a } -- ^ Parenthesized name: @ foldl (+) 0 @ - | NormalName { _simpleName :: Ann SimpleName a } +data Name dom stage + = ParenName { _simpleName :: Ann SimpleName dom stage } -- ^ Parenthesized name: @ foldl (+) 0 @ + | NormalName { _simpleName :: Ann SimpleName dom stage } -- | Possible qualified names. Contains also implicit names. -- Linear implicit parameter: @%x@. Non-linear implicit parameter: @?x@. -data SimpleName a - = SimpleName { _qualifiers :: AnnList UnqualName a - , _unqualifiedName :: Ann UnqualName a +data SimpleName dom stage + = SimpleName { _qualifiers :: AnnList UnqualName dom stage + , _unqualifiedName :: Ann UnqualName dom stage } -nameFromList :: AnnList UnqualName a -> SimpleName a +nameFromList :: AnnList UnqualName dom stage -> SimpleName dom stage nameFromList (AnnList a xs) | not (null xs) = SimpleName (AnnList a (init xs)) (last xs) nameFromList _ = error "nameFromList: empty list" -- | Parts of a qualified name. -data UnqualName a +data UnqualName dom stage = UnqualName { _simpleNameStr :: String } -- | Program elements formatted as string literals (import packages, pragma texts) -data StringNode a +data StringNode dom stage = StringNode { _stringNodeStr :: String } + +-- | The name of a module +data ModuleName dom stage = ModuleName { _moduleNameString :: String } -- | The @data@ or the @newtype@ keyword to define ADTs. -data DataOrNewtypeKeyword a +data DataOrNewtypeKeyword dom stage = DataKeyword | NewtypeKeyword -- | Keywords @do@ or @mdo@ to start a do-block -data DoKind a +data DoKind dom stage = DoKeyword | MDoKeyword -- | The @type@ keyword used to qualify that the type and not the constructor of the same name is referred -data TypeKeyword a = TypeKeyword +data TypeKeyword dom stage = TypeKeyword -- | Recognised overlaps for overlap pragmas. Can be applied to class declarations and class instance declarations. -data OverlapPragma a +data OverlapPragma dom stage = EnableOverlap -- ^ @OVERLAP@ pragma | DisableOverlap -- ^ @NO_OVERLAP@ pragma | Overlappable -- ^ @OVERLAPPABLE@ pragma @@ -60,7 +63,7 @@ | IncoherentOverlap -- ^ @INCOHERENT@ pragma -- | Call conventions of foreign functions -data CallConv a +data CallConv dom stage = StdCall | CCall | CPlusPlus @@ -70,48 +73,48 @@ | JavaScript | CApi -data ArrowAppl a +data ArrowAppl dom stage = LeftAppl -- ^ Left arrow application: @-<@ | RightAppl -- ^ Right arrow application: @>-@ | LeftHighApp -- ^ Left arrow high application: @-<<@ | RightHighApp -- ^ Right arrow high application: @>>-@ -- | Safety annotations for foreign calls -data Safety a +data Safety dom stage = Safe | ThreadSafe | Unsafe | Interruptible -- | Associativity of an operator. -data Assoc a +data Assoc dom stage = AssocNone -- ^ non-associative operator (declared with @infix@) | AssocLeft -- ^ left-associative operator (declared with @infixl@) | AssocRight -- ^ right-associative operator (declared with @infixr@) -data Role a +data Role dom stage = Nominal | Representational | Phantom -data ConlikeAnnot a = ConlikeAnnot +data ConlikeAnnot dom stage = ConlikeAnnot -- | Numeric precedence of an operator -data Precedence a +data Precedence dom stage = Precedence { _precedenceValue :: Int } -data LineNumber a +data LineNumber dom stage = LineNumber { _lineNumber :: Int } -- | Controls the activation of a rewrite rule (@ [1] @) -data PhaseControl a - = PhaseControl { _phaseUntil :: AnnMaybe PhaseInvert a - , _phaseNumber :: Ann PhaseNumber a +data PhaseControl dom stage + = PhaseControl { _phaseUntil :: AnnMaybe PhaseInvert dom stage + , _phaseNumber :: Ann PhaseNumber dom stage } -- | Phase number for rewrite rules -data PhaseNumber a +data PhaseNumber dom stage = PhaseNumber { _phaseNum :: Integer } -- | A tilde that marks the inversion of the phase number -data PhaseInvert a = PhaseInvert+data PhaseInvert dom stage = PhaseInvert
+ Language/Haskell/Tools/AST/Base.hs-boot view
@@ -0,0 +1,5 @@+{-# LANGUAGE RoleAnnotations #-} +module Language.Haskell.Tools.AST.Base where + +type role SimpleName nominal nominal +data SimpleName dom stage
Language/Haskell/Tools/AST/Binds.hs view
@@ -10,142 +10,142 @@ import {-# SOURCE #-} Language.Haskell.Tools.AST.TH -- | Value binding for top-level and local bindings -data ValueBind a - = SimpleBind { _valBindPat :: Ann Pattern a - , _valBindRhs :: Ann Rhs a - , _valBindLocals :: AnnMaybe LocalBinds a +data ValueBind dom stage + = SimpleBind { _valBindPat :: Ann Pattern dom stage + , _valBindRhs :: Ann Rhs dom stage + , _valBindLocals :: AnnMaybe LocalBinds dom stage } -- ^ Non-function binding (@ v = "12" @) -- TODO: use one name for a function instead of names in each match - | FunBind { _funBindMatches :: AnnList Match a + | FunBind { _funBindMatches :: AnnList Match dom stage } -- ^ Function binding (@ f 0 = 1; f x = x @). All matches must have the same name. -- | Clause of function (or value) binding -data Match a - = Match { _matchLhs :: Ann MatchLhs a - , _matchRhs :: Ann Rhs a - , _matchBinds :: AnnMaybe LocalBinds a +data Match dom stage + = Match { _matchLhs :: Ann MatchLhs dom stage + , _matchRhs :: Ann Rhs dom stage + , _matchBinds :: AnnMaybe LocalBinds dom stage } -- | Something on the left side of the match -data MatchLhs a - = NormalLhs { _matchLhsName :: Ann Name a - , _matchLhsArgs :: AnnList Pattern a +data MatchLhs dom stage + = NormalLhs { _matchLhsName :: Ann Name dom stage + , _matchLhsArgs :: AnnList Pattern dom stage } - | InfixLhs { _matchLhsLhs :: Ann Pattern a - , _matchLhsOperator :: Ann Operator a - , _matchLhsRhs :: Ann Pattern a - , _matchLhsArgs :: AnnList Pattern a + | InfixLhs { _matchLhsLhs :: Ann Pattern dom stage + , _matchLhsOperator :: Ann Operator dom stage + , _matchLhsRhs :: Ann Pattern dom stage + , _matchLhsArgs :: AnnList Pattern dom stage } -- | Local bindings attached to a declaration (@ where x = 42 @) -data LocalBinds a - = LocalBinds { _localBinds :: AnnList LocalBind a +data LocalBinds dom stage + = LocalBinds { _localBinds :: AnnList LocalBind dom stage } -- | Bindings that are enabled in local blocks (where or let). -data LocalBind a - = LocalValBind { _localVal :: Ann ValueBind a +data LocalBind dom stage + = LocalValBind { _localVal :: Ann ValueBind dom stage } -- TODO: check that no other signature can be inside a local binding - | LocalSignature { _localSig :: Ann TypeSignature a + | LocalSignature { _localSig :: Ann TypeSignature dom stage } - | LocalFixity { _localFixity :: Ann FixitySignature a + | LocalFixity { _localFixity :: Ann FixitySignature dom stage } -- | A type signature (@ _f :: Int -> Int @) -data TypeSignature a - = TypeSignature { _tsName :: AnnList Name a - , _tsType :: Ann Type a +data TypeSignature dom stage + = TypeSignature { _tsName :: AnnList Name dom stage + , _tsType :: Ann Type dom stage } -- | A fixity signature (@ infixl 5 +, - @). -data FixitySignature a - = FixitySignature { _fixityAssoc :: Ann Assoc a - , _fixityPrecedence :: Ann Precedence a - , _fixityOperators :: AnnList Operator a +data FixitySignature dom stage + = FixitySignature { _fixityAssoc :: Ann Assoc dom stage + , _fixityPrecedence :: Ann Precedence dom stage + , _fixityOperators :: AnnList Operator dom stage } -- | Right hand side of a value binding (possible with guards): (@ = 3 @ or @ | x == 1 = 3; | otherwise = 4 @) -data Rhs a - = UnguardedRhs { _rhsExpr :: Ann Expr a +data Rhs dom stage + = UnguardedRhs { _rhsExpr :: Ann Expr dom stage } - | GuardedRhss { _rhsGuards :: AnnList GuardedRhs a + | GuardedRhss { _rhsGuards :: AnnList GuardedRhs dom stage } -- | A guarded right-hand side of a value binding (@ | x > 3 = 2 @) -data GuardedRhs a - = GuardedRhs { _guardStmts :: AnnList RhsGuard a -- ^ Cannot be empty. - , _guardExpr :: Ann Expr a +data GuardedRhs dom stage + = GuardedRhs { _guardStmts :: AnnList RhsGuard dom stage -- ^ Cannot be empty. + , _guardExpr :: Ann Expr dom stage } -- | Guards for value bindings and pattern matches (@ Just v <- x, v > 1 @) -data RhsGuard a - = GuardBind { _guardPat :: Ann Pattern a - , _guardRhs :: Ann Expr a +data RhsGuard dom stage + = GuardBind { _guardPat :: Ann Pattern dom stage + , _guardRhs :: Ann Expr dom stage } - | GuardLet { _guardBinds :: AnnList LocalBind a + | GuardLet { _guardBinds :: AnnList LocalBind dom stage } - | GuardCheck { _guardCheck :: Ann Expr a + | GuardCheck { _guardCheck :: Ann Expr dom stage } -- * Pragmas -- | Top level pragmas -data TopLevelPragma a - = RulePragma { _pragmaRule :: AnnList Rule a +data TopLevelPragma dom stage + = RulePragma { _pragmaRule :: AnnList Rule dom stage } - | DeprPragma { _pragmaObjects :: AnnList Name a - , _pragmaMessage :: Ann StringNode a + | DeprPragma { _pragmaObjects :: AnnList Name dom stage + , _pragmaMessage :: Ann StringNode dom stage } - | WarningPragma { _pragmaObjects :: AnnList Name a - , _pragmaMessage :: Ann StringNode a + | WarningPragma { _pragmaObjects :: AnnList Name dom stage + , _pragmaMessage :: Ann StringNode dom stage } - | AnnPragma { _annotationSubject :: Ann AnnotationSubject a - , _annotateExpr :: Ann Expr a + | AnnPragma { _annotationSubject :: Ann AnnotationSubject dom stage + , _annotateExpr :: Ann Expr dom stage } - | InlinePragma { _pragmaConlike :: AnnMaybe ConlikeAnnot a - , _pragmaPhase :: AnnMaybe PhaseControl a - , _inlineDef :: Ann Name a + | InlinePragma { _pragmaConlike :: AnnMaybe ConlikeAnnot dom stage + , _pragmaPhase :: AnnMaybe PhaseControl dom stage + , _inlineDef :: Ann Name dom stage } - | NoInlinePragma { _pragmaConlike :: AnnMaybe ConlikeAnnot a - , _pragmaPhase :: AnnMaybe PhaseControl a - , _noInlineDef :: Ann Name a + | NoInlinePragma { _pragmaConlike :: AnnMaybe ConlikeAnnot dom stage + , _pragmaPhase :: AnnMaybe PhaseControl dom stage + , _noInlineDef :: Ann Name dom stage } - | InlinablePragma { _pragmaPhase :: AnnMaybe PhaseControl a - , _inlinableDef :: Ann Name a + | InlinablePragma { _pragmaPhase :: AnnMaybe PhaseControl dom stage + , _inlinableDef :: Ann Name dom stage } - | LinePragma { _pragmaLineNum :: Ann LineNumber a - , _pragmaFileName :: AnnMaybe StringNode a + | LinePragma { _pragmaLineNum :: Ann LineNumber dom stage + , _pragmaFileName :: AnnMaybe StringNode dom stage } - | SpecializePragma { _pragmaPhase :: AnnMaybe PhaseControl a - , _specializeDef :: Ann Name a - , _specializeType :: AnnList Type a + | SpecializePragma { _pragmaPhase :: AnnMaybe PhaseControl dom stage + , _specializeDef :: Ann Name dom stage + , _specializeType :: AnnList Type dom stage } -- | A rewrite rule (@ "map/map" forall f g xs. map f (map g xs) = map (f.g) xs @) -data Rule a - = Rule { _ruleName :: Ann StringNode a -- ^ User name of the rule - , _rulePhase :: AnnMaybe PhaseControl a -- ^ The compilation phases in which the rule can be applied - , _ruleBounded :: AnnList TyVar a -- ^ Variables bound in the rule - , _ruleLhs :: Ann Expr a -- ^ The transformed expression - , _ruleRhs :: Ann Expr a -- ^ The resulting expression +data Rule dom stage + = Rule { _ruleName :: Ann StringNode dom stage -- ^ User name of the rule + , _rulePhase :: AnnMaybe PhaseControl dom stage -- ^ The compilation phases in which the rule can be applied + , _ruleBounded :: AnnList TyVar dom stage -- ^ Variables bound in the rule + , _ruleLhs :: Ann Expr dom stage -- ^ The transformed expression + , _ruleRhs :: Ann Expr dom stage -- ^ The resulting expression } -- | Annotation allows you to connect an expression to any declaration. -data AnnotationSubject a - = NameAnnotation { _annotateName :: Ann Name a +data AnnotationSubject dom stage + = NameAnnotation { _annotateName :: Ann Name dom stage } -- ^ The definition with the given name is annotated - | TypeAnnotation { _annotateName :: Ann Name a + | TypeAnnotation { _annotateName :: Ann Name dom stage } -- ^ A type with the given name is annotated | ModuleAnnotation -- ^ The whole module is annotated -- | Formulas of minimal annotations declaring which functions should be defined. -data MinimalFormula a - = MinimalName { _minimalName :: Ann Name a +data MinimalFormula dom stage + = MinimalName { _minimalName :: Ann Name dom stage } - | MinimalParen { _minimalInner :: Ann MinimalFormula a + | MinimalParen { _minimalInner :: Ann MinimalFormula dom stage } - | MinimalOr { _minimalOrs :: AnnList MinimalFormula a + | MinimalOr { _minimalOrs :: AnnList MinimalFormula dom stage } -- ^ One of the minimal formulas are needed (@ min1 | min2 @) - | MinimalAnd { _minimalAnds :: AnnList MinimalFormula a + | MinimalAnd { _minimalAnds :: AnnList MinimalFormula dom stage } -- ^ Both of the minimal formulas are needed (@ min1 , min2 @)
Language/Haskell/Tools/AST/Binds.hs-boot view
@@ -1,11 +1,11 @@ {-# LANGUAGE RoleAnnotations #-} module Language.Haskell.Tools.AST.Binds where -type role LocalBind nominal -data LocalBind a +type role LocalBind nominal nominal +data LocalBind dom stage -type role LocalBinds nominal -data LocalBinds a +type role LocalBinds nominal nominal +data LocalBinds dom stage -type role RhsGuard nominal -data RhsGuard a+type role RhsGuard nominal nominal +data RhsGuard dom stage
Language/Haskell/Tools/AST/Decls.hs view
@@ -13,290 +13,290 @@ -- | Haskell declaration -data Decl a - = TypeDecl { _declHead :: Ann DeclHead a - , _declType :: Ann Type a +data Decl dom stage + = TypeDecl { _declHead :: Ann DeclHead dom stage + , _declType :: Ann Type dom stage } -- ^ A type synonym ( @type String = [Char]@ ) - | TypeFamilyDecl { _declTypeFamily :: Ann TypeFamily a + | TypeFamilyDecl { _declTypeFamily :: Ann TypeFamily dom stage } - | ClosedTypeFamilyDecl { _declHead :: Ann DeclHead a - , _declKind :: AnnMaybe KindConstraint a - , _declDecl :: AnnList TypeEqn a -- ^ cannot be empty + | ClosedTypeFamilyDecl { _declHead :: Ann DeclHead dom stage + , _declKind :: AnnMaybe KindConstraint dom stage + , _declDecl :: AnnList TypeEqn dom stage -- ^ cannot be empty } -- ^ A closed type family declaration - | DataDecl { _declNewtype :: Ann DataOrNewtypeKeyword a - , _declCtx :: AnnMaybe Context a - , _declHead :: Ann DeclHead a - , _declCons :: AnnList ConDecl a - , _declDeriving :: AnnMaybe Deriving a + | DataDecl { _declNewtype :: Ann DataOrNewtypeKeyword dom stage + , _declCtx :: AnnMaybe Context dom stage + , _declHead :: Ann DeclHead dom stage + , _declCons :: AnnList ConDecl dom stage + , _declDeriving :: AnnMaybe Deriving dom stage } -- ^ A data or newtype declaration. Empty data type declarations without -- where keyword are always belong to DataDecl. - | GDataDecl { _declNewtype :: Ann DataOrNewtypeKeyword a - , _declCtx :: AnnMaybe Context a - , _declHead :: Ann DeclHead a - , _declKind :: AnnMaybe KindConstraint a - , _declGadt :: AnnList GadtConDecl a - , _declDeriving :: AnnMaybe Deriving a + | GDataDecl { _declNewtype :: Ann DataOrNewtypeKeyword dom stage + , _declCtx :: AnnMaybe Context dom stage + , _declHead :: Ann DeclHead dom stage + , _declKind :: AnnMaybe KindConstraint dom stage + , _declGadt :: AnnList GadtConDecl dom stage + , _declDeriving :: AnnMaybe Deriving dom stage } -- ^ A data or newtype declaration. - | TypeInstDecl { _declInstance :: Ann InstanceRule a - , _declAssignedType :: Ann Type a + | TypeInstDecl { _declInstance :: Ann InstanceRule dom stage + , _declAssignedType :: Ann Type dom stage } -- ^ Type instance declaration (@ type instance Fam T = AssignedT @) - | DataInstDecl { _declNewtype :: Ann DataOrNewtypeKeyword a - , _declInstance :: Ann InstanceRule a - , _declCons :: AnnList ConDecl a - , _declDeriving :: AnnMaybe Deriving a + | DataInstDecl { _declNewtype :: Ann DataOrNewtypeKeyword dom stage + , _declInstance :: Ann InstanceRule dom stage + , _declCons :: AnnList ConDecl dom stage + , _declDeriving :: AnnMaybe Deriving dom stage } -- ^ Data instance declaration (@ data instance Fam T = Con1 | Con2 @) - | GDataInstDecl { _declNewtype :: Ann DataOrNewtypeKeyword a - , _declInstance :: Ann InstanceRule a - , _declKind :: AnnMaybe KindConstraint a - , _declGadt :: AnnList GadtConDecl a + | GDataInstDecl { _declNewtype :: Ann DataOrNewtypeKeyword dom stage + , _declInstance :: Ann InstanceRule dom stage + , _declKind :: AnnMaybe KindConstraint dom stage + , _declGadt :: AnnList GadtConDecl dom stage } -- ^ Gadt style data instance declaration (@ data instance Fam T where ... @) - | ClassDecl { _declCtx :: AnnMaybe Context a - , _declHead :: Ann DeclHead a - , _declFunDeps :: AnnMaybe FunDeps a - , _declBody :: AnnMaybe ClassBody a + | ClassDecl { _declCtx :: AnnMaybe Context dom stage + , _declHead :: Ann DeclHead dom stage + , _declFunDeps :: AnnMaybe FunDeps dom stage + , _declBody :: AnnMaybe ClassBody dom stage } -- ^ Type class declaration (@ class X a [where f = ...] @) - | InstDecl { _declOverlap :: AnnMaybe OverlapPragma a - , _declInstRule :: Ann InstanceRule a - , _declInstDecl :: AnnMaybe InstBody a + | InstDecl { _declOverlap :: AnnMaybe OverlapPragma dom stage + , _declInstRule :: Ann InstanceRule dom stage + , _declInstDecl :: AnnMaybe InstBody dom stage } -- ^ Instance declaration (@ instance X T [where f = ...] @) - | PatternSynonymDecl { _declPatSyn :: Ann PatternSynonym a + | PatternSynonymDecl { _declPatSyn :: Ann PatternSynonym dom stage } -- ^ Pattern synonyms (@ pattern Arrow t1 t2 = App "->" [t1, t2] @) - | DerivDecl { _declOverlap :: AnnMaybe OverlapPragma a - , _declInstRule :: Ann InstanceRule a + | DerivDecl { _declOverlap :: AnnMaybe OverlapPragma dom stage + , _declInstRule :: Ann InstanceRule dom stage } -- ^ Standalone deriving declaration (@ deriving instance X T @) - | FixityDecl { _declFixity :: Ann FixitySignature a + | FixityDecl { _declFixity :: Ann FixitySignature dom stage } -- ^ Fixity declaration (@ infixl 5 +, - @) - | DefaultDecl { _declTypes :: AnnList Type a + | DefaultDecl { _declTypes :: AnnList Type dom stage } -- ^ Default types (@ default (T1, T2) @) - | TypeSigDecl { _declTypeSig :: Ann TypeSignature a + | TypeSigDecl { _declTypeSig :: Ann TypeSignature dom stage } -- ^ Type signature declaration (@ _f :: Int -> Int @) - | PatTypeSigDecl { _declPatTypeSig :: Ann PatternTypeSignature a + | PatTypeSigDecl { _declPatTypeSig :: Ann PatternTypeSignature dom stage } -- ^ Type signature declaration (@ _f :: Int -> Int @) - | ValueBinding { _declValBind :: Ann ValueBind a + | ValueBinding { _declValBind :: Ann ValueBind dom stage } -- ^ Function binding (@ f x = 12 @) - | ForeignImport { _declCallConv :: Ann CallConv a - , _declSafety :: AnnMaybe Safety a - , _declName :: Ann Name a - , _declType :: Ann Type a + | ForeignImport { _declCallConv :: Ann CallConv dom stage + , _declSafety :: AnnMaybe Safety dom stage + , _declName :: Ann Name dom stage + , _declType :: Ann Type dom stage } -- ^ Foreign import (@ foreign import _foo :: Int -> IO Int @) - | ForeignExport { _declCallConv :: Ann CallConv a - , _declName :: Ann Name a - , _declType :: Ann Type a + | ForeignExport { _declCallConv :: Ann CallConv dom stage + , _declName :: Ann Name dom stage + , _declType :: Ann Type dom stage } -- ^ foreign export (@ foreign export ccall _foo :: Int -> IO Int @) - | PragmaDecl { _declPragma :: Ann TopLevelPragma a + | PragmaDecl { _declPragma :: Ann TopLevelPragma dom stage } -- ^ top level pragmas - | RoleDecl { _declRoleType :: Ann SimpleName a - , _declRoles :: AnnList Role a + | RoleDecl { _declRoleType :: Ann SimpleName dom stage + , _declRoles :: AnnList Role dom stage } -- ^ role annotations (@ type role Ptr representational @) - | SpliceDecl { _declSplice :: Ann Splice a + | SpliceDecl { _declSplice :: Ann Splice dom stage } -- ^ A Template Haskell splice declaration (@ $(generateDecls) @) -- | Open type and data families -data TypeFamily a - = TypeFamily { _tfHead :: Ann DeclHead a - , _tfSpec :: AnnMaybe TypeFamilySpec a +data TypeFamily dom stage + = TypeFamily { _tfHead :: Ann DeclHead dom stage + , _tfSpec :: AnnMaybe TypeFamilySpec dom stage } -- ^ A type family declaration (@ type family A _a :: * -> * @) - | DataFamily { _tfHead :: Ann DeclHead a - , _tfKind :: AnnMaybe KindConstraint a + | DataFamily { _tfHead :: Ann DeclHead dom stage + , _tfKind :: AnnMaybe KindConstraint dom stage } -- ^ Data family declaration -data TypeFamilySpec a - = TypeFamilyKind { _tfSpecKind :: Ann KindConstraint a +data TypeFamilySpec dom stage + = TypeFamilyKind { _tfSpecKind :: Ann KindConstraint dom stage } - | TypeFamilyInjectivity { _tfInjectivity :: Ann InjectivityAnn a + | TypeFamilyInjectivity { _tfInjectivity :: Ann InjectivityAnn dom stage } -data InjectivityAnn a - = InjectivityAnn { _injAnnRes :: Ann Name a - , _injAnnDeps :: AnnList Name a +data InjectivityAnn dom stage + = InjectivityAnn { _injAnnRes :: Ann Name dom stage + , _injAnnDeps :: AnnList Name dom stage } -- | The list of declarations that can appear in a typeclass -data ClassBody a - = ClassBody { _cbElements :: AnnList ClassElement a +data ClassBody dom stage + = ClassBody { _cbElements :: AnnList ClassElement dom stage } -- | Members of a class declaration -data ClassElement a - = ClsSig { _ceTypeSig :: Ann TypeSignature a +data ClassElement dom stage + = ClsSig { _ceTypeSig :: Ann TypeSignature dom stage } -- ^ Signature: @ _f :: A -> B @ - | ClsDef { _ceBind :: Ann ValueBind a + | ClsDef { _ceBind :: Ann ValueBind dom stage } -- ^ Default binding: @ f x = "aaa" @ - | ClsTypeFam { _ceTypeFam :: Ann TypeFamily a + | ClsTypeFam { _ceTypeFam :: Ann TypeFamily dom stage } -- ^ Declaration of an associated type synonym: @ type T _x :: * @ - | ClsTypeDef { _ceHead :: Ann DeclHead a - , _ceKind :: Ann Type a + | ClsTypeDef { _ceHead :: Ann DeclHead dom stage + , _ceKind :: Ann Type dom stage } -- ^ Default choice for type synonym: @ type T x = TE @ or @ type instance T x = TE @ - | ClsDefSig { _ceName :: Ann Name a - , _ceType :: Ann Type a + | ClsDefSig { _ceName :: Ann Name dom stage + , _ceType :: Ann Type dom stage } -- ^ Default signature (by using @DefaultSignatures@): @ default _enum :: (Generic a, GEnum (Rep a)) => [a] @ - | ClsMinimal { _pragmaFormula :: Ann MinimalFormula a + | ClsMinimal { _pragmaFormula :: Ann MinimalFormula dom stage } -- ^ Minimal pragma: @ {-# MINIMAL (==) | (/=) #-} @ -- not supported yet (GHC 7.10.3) - | ClsPatSig { _cePatSig :: Ann PatternTypeSignature a + | ClsPatSig { _cePatSig :: Ann PatternTypeSignature dom stage } -- ^ Pattern signature in a class declaration (by using @PatternSynonyms@) -- The declared (possibly parameterized) type (@ A x :+: B y @). -data DeclHead a - = DeclHead { _dhName :: Ann Name a +data DeclHead dom stage + = DeclHead { _dhName :: Ann Name dom stage } -- ^ Type or class name - | DHParen { _dhBody :: Ann DeclHead a + | DHParen { _dhBody :: Ann DeclHead dom stage } -- ^ Parenthesized type - | DHApp { _dhAppFun :: Ann DeclHead a - , _dhAppOperand :: Ann TyVar a + | DHApp { _dhAppFun :: Ann DeclHead dom stage + , _dhAppOperand :: Ann TyVar dom stage } -- ^ Type application - | DHInfix { _dhLeft :: Ann TyVar a - , _dhOperator :: Ann Operator a - , _dhRight :: Ann TyVar a + | DHInfix { _dhLeft :: Ann TyVar dom stage + , _dhOperator :: Ann Operator dom stage + , _dhRight :: Ann TyVar dom stage } -- ^ Infix application of the type/class name to the left operand -- | Instance body is the implementation of the class functions (@ where a x = 1; b x = 2 @) -data InstBody a - = InstBody { _instBodyDecls :: AnnList InstBodyDecl a +data InstBody dom stage + = InstBody { _instBodyDecls :: AnnList InstBodyDecl dom stage } -- | Declarations inside an instance declaration. -data InstBodyDecl a - = InstBodyNormalDecl { _instBodyDeclFunbind :: Ann ValueBind a +data InstBodyDecl dom stage + = InstBodyNormalDecl { _instBodyDeclFunbind :: Ann ValueBind dom stage } -- ^ A normal declaration (@ f x = 12 @) - | InstBodyTypeSig { _instBodyTypeSig :: Ann TypeSignature a + | InstBodyTypeSig { _instBodyTypeSig :: Ann TypeSignature dom stage } -- ^ Type signature in instance definition with @InstanceSigs@ - | InstBodyTypeDecl { _instBodyTypeEqn :: Ann TypeEqn a + | InstBodyTypeDecl { _instBodyTypeEqn :: Ann TypeEqn dom stage } -- ^ An associated type definition (@ type A X = B @) - | InstBodyDataDecl { _instBodyDataNew :: Ann DataOrNewtypeKeyword a - , _instBodyLhsType :: Ann InstanceRule a - , _instBodyDataCons :: AnnList ConDecl a - , _instBodyDerivings :: AnnMaybe Deriving a + | InstBodyDataDecl { _instBodyDataNew :: Ann DataOrNewtypeKeyword dom stage + , _instBodyLhsType :: Ann InstanceRule dom stage + , _instBodyDataCons :: AnnList ConDecl dom stage + , _instBodyDerivings :: AnnMaybe Deriving dom stage } -- ^ An associated data type implementation (@ data A X = C1 | C2 @) - | InstBodyGadtDataDecl { _instBodyDataNew :: Ann DataOrNewtypeKeyword a - , _instBodyLhsType :: Ann InstanceRule a - , _instBodyDataKind :: AnnMaybe Kind a - , _instBodyGadtCons :: AnnList GadtConDecl a - , _instBodyDerivings :: AnnMaybe Deriving a + | InstBodyGadtDataDecl { _instBodyDataNew :: Ann DataOrNewtypeKeyword dom stage + , _instBodyLhsType :: Ann InstanceRule dom stage + , _instBodyDataKind :: AnnMaybe Kind dom stage + , _instBodyGadtCons :: AnnList GadtConDecl dom stage + , _instBodyDerivings :: AnnMaybe Deriving dom stage } -- ^ An associated data type implemented using GADT style - | SpecializeInstance { _specializeInstanceType :: Ann Type a + | SpecializeInstance { _specializeInstanceType :: Ann Type dom stage } -- ^ Specialize instance pragma (no phase selection is allowed) -- not supported yet - | InstBodyPatSyn { _instBodyPatSyn :: Ann PatternSynonym a + | InstBodyPatSyn { _instBodyPatSyn :: Ann PatternSynonym dom stage } -- ^ A pattern synonym in a class instance -- | GADT constructor declaration (@ _D1 :: { _val :: Int } -> T String @) -data GadtConDecl a - = GadtConDecl { _gadtConNames :: AnnList Name a - , _gadtConType :: Ann GadtConType a +data GadtConDecl dom stage + = GadtConDecl { _gadtConNames :: AnnList Name dom stage + , _gadtConType :: Ann GadtConType dom stage } -- | Type of GADT constructors (can be record types: @{ _val :: Int }@) -data GadtConType a - = GadtNormalType { _gadtConNormalType :: Ann Type a +data GadtConType dom stage + = GadtNormalType { _gadtConNormalType :: Ann Type dom stage } - | GadtRecordType { _gadtConRecordFields :: AnnList FieldDecl a - , _gadtConResultType :: Ann Type a + | GadtRecordType { _gadtConRecordFields :: AnnList FieldDecl dom stage + , _gadtConResultType :: Ann Type dom stage } -data GadtField a - = GadtNormalField { _gadtFieldType :: Ann Type a +data GadtField dom stage + = GadtNormalField { _gadtFieldType :: Ann Type dom stage } -- ^ Normal GADT field type (@ Int @) - | GadtNamedField { _gadtFieldName :: Ann Name a - , _gadtFieldType :: Ann Type a + | GadtNamedField { _gadtFieldName :: Ann Name dom stage + , _gadtFieldType :: Ann Type dom stage } -- ^ Named GADT field (@ { _val :: Int } @) -- | A list of functional dependencies: @ | a -> b, c -> d @ separated by commas -data FunDeps a - = FunDeps { _funDeps :: AnnList FunDep a +data FunDeps dom stage + = FunDeps { _funDeps :: AnnList FunDep dom stage } -- | A functional dependency, given on the form @l1 ... ln -> r1 ... rn@ -data FunDep a - = FunDep { _funDepLhs :: AnnList Name a - , _funDepRhs :: AnnList Name a +data FunDep dom stage + = FunDep { _funDepLhs :: AnnList Name dom stage + , _funDepRhs :: AnnList Name dom stage } -data ConDecl a - = ConDecl { _conDeclName :: Ann Name a - , _conDeclArgs :: AnnList Type a +data ConDecl dom stage + = ConDecl { _conDeclName :: Ann Name dom stage + , _conDeclArgs :: AnnList Type dom stage } -- ^ ordinary data constructor (@ C t1 t2 @) - | RecordDecl { _conDeclName :: Ann Name a - , _conDeclFields :: AnnList FieldDecl a + | RecordDecl { _conDeclName :: Ann Name dom stage + , _conDeclFields :: AnnList FieldDecl dom stage } -- ^ record data constructor (@ C { _n1 :: t1, _n2 :: t2 } @) - | InfixConDecl { _conDeclLhs :: Ann Type a - , _conDeclOp :: Ann Operator a - , _conDeclRhs :: Ann Type a + | InfixConDecl { _conDeclLhs :: Ann Type dom stage + , _conDeclOp :: Ann Operator dom stage + , _conDeclRhs :: Ann Type dom stage } -- ^ infix data constructor (@ t1 :+: t2 @) -- | Field declaration (@ _fld :: Int @) -data FieldDecl a - = FieldDecl { _fieldNames :: AnnList Name a - , _fieldType :: Ann Type a +data FieldDecl dom stage + = FieldDecl { _fieldNames :: AnnList Name dom stage + , _fieldType :: Ann Type dom stage } -- | A deriving clause following a data type declaration. (@ deriving Show @ or @ deriving (Show, Eq) @) -data Deriving a - = DerivingOne { _oneDerived :: Ann InstanceHead a } - | Derivings { _allDerived :: AnnList InstanceHead a } +data Deriving dom stage + = DerivingOne { _oneDerived :: Ann InstanceHead dom stage } + | Derivings { _allDerived :: AnnList InstanceHead dom stage } -- | The instance declaration rule, which is, roughly, the part of the instance declaration before the where keyword. -data InstanceRule a - = InstanceRule { _irVars :: AnnMaybe (AnnList TyVar) a - , _irCtx :: AnnMaybe Context a - , _irHead :: Ann InstanceHead a +data InstanceRule dom stage + = InstanceRule { _irVars :: AnnMaybe (AnnList TyVar) dom stage + , _irCtx :: AnnMaybe Context dom stage + , _irHead :: Ann InstanceHead dom stage } - | InstanceParen { _irRule :: Ann InstanceRule a + | InstanceParen { _irRule :: Ann InstanceRule dom stage } -- | The specification of the class instance declaration -data InstanceHead a - = InstanceHeadCon { _ihConName :: Ann Name a +data InstanceHead dom stage + = InstanceHeadCon { _ihConName :: Ann Name dom stage } -- ^ Type or class name - | InstanceHeadInfix { _ihLeftOp :: Ann Type a - , _ihOperator :: Ann Name a + | InstanceHeadInfix { _ihLeftOp :: Ann Type dom stage + , _ihOperator :: Ann Name dom stage } -- ^ Infix application of the type/class name to the left operand - | InstanceHeadParen { _ihHead :: Ann InstanceHead a + | InstanceHeadParen { _ihHead :: Ann InstanceHead dom stage } -- ^ Parenthesized instance head - | InstanceHeadApp { _ihFun :: Ann InstanceHead a - , _ihType :: Ann Type a + | InstanceHeadApp { _ihFun :: Ann InstanceHead dom stage + , _ihType :: Ann Type dom stage } -- ^ Application to one more type -- | Type equations as found in closed type families (@ T A = S @) -data TypeEqn a - = TypeEqn { _teLhs :: Ann Type a - , _teRhs :: Ann Type a +data TypeEqn dom stage + = TypeEqn { _teLhs :: Ann Type dom stage + , _teRhs :: Ann Type dom stage } -- | A pattern type signature (@ pattern p :: Int -> T @) -data PatternTypeSignature a - = PatternTypeSignature { _patSigName :: Ann Name a - , _patSigType :: Ann Type a +data PatternTypeSignature dom stage + = PatternTypeSignature { _patSigName :: Ann Name dom stage + , _patSigType :: Ann Type dom stage } -- | Pattern synonyms: @ pattern Arrow t1 t2 = App "->" [t1, t2] @ -data PatternSynonym a - = PatternSynonym { _patLhs :: Ann PatSynLhs a - , _patRhs :: Ann PatSynRhs a +data PatternSynonym dom stage + = PatternSynonym { _patLhs :: Ann PatSynLhs dom stage + , _patRhs :: Ann PatSynRhs dom stage } -- | Left hand side of a pattern synonym -data PatSynLhs a - = NormalPatSyn { _patName :: Ann Name a - , _patArgs :: AnnList Name a +data PatSynLhs dom stage + = NormalPatSyn { _patName :: Ann Name dom stage + , _patArgs :: AnnList Name dom stage } - | InfixPatSyn { _patSynLhs :: Ann Name a - , _patSynOp :: Ann Operator a - , _patSynRhs :: Ann Name a + | InfixPatSyn { _patSynLhs :: Ann Name dom stage + , _patSynOp :: Ann Operator dom stage + , _patSynRhs :: Ann Name dom stage } - | RecordPatSyn { _patName :: Ann Name a - , _patArgs :: AnnList Name a + | RecordPatSyn { _patName :: Ann Name dom stage + , _patArgs :: AnnList Name dom stage } -- | Right-hand side of pattern synonym -data PatSynRhs a - = BidirectionalPatSyn { _patRhsPat :: Ann Pattern a - , _patRhsOpposite :: AnnMaybe PatSynWhere a +data PatSynRhs dom stage + = BidirectionalPatSyn { _patRhsPat :: Ann Pattern dom stage + , _patRhsOpposite :: AnnMaybe PatSynWhere dom stage } -- ^ @ pattern Int = App "Int" [] @ or @ pattern Int <- App "Int" [] where Int = App "Int" [] @ - | OneDirectionalPatSyn { _patRhsPat :: Ann Pattern a + | OneDirectionalPatSyn { _patRhsPat :: Ann Pattern dom stage } -- ^ @ pattern Int <- App "Int" [] @ -- | Where clause of pattern synonym (explicit expression direction) -data PatSynWhere a - = PatSynWhere { _patOpposite :: AnnList Match a } +data PatSynWhere dom stage + = PatSynWhere { _patOpposite :: AnnList Match dom stage }
Language/Haskell/Tools/AST/Exprs.hs view
@@ -11,206 +11,206 @@ import {-# SOURCE #-} Language.Haskell.Tools.AST.Binds (LocalBind, LocalBinds, RhsGuard) -- | Haskell expressions -data Expr a - = Var { _exprName :: Ann Name a +data Expr dom stage + = Var { _exprName :: Ann Name dom stage } -- ^ A variable or a data constructor (@ a @) - | Lit { _exprLit :: Ann Literal a + | Lit { _exprLit :: Ann Literal dom stage } -- ^ Primitive literal - | InfixApp { _exprLhs :: Ann Expr a - , _exprOperator :: Ann Operator a - , _exprRhs :: Ann Expr a + | InfixApp { _exprLhs :: Ann Expr dom stage + , _exprOperator :: Ann Operator dom stage + , _exprRhs :: Ann Expr dom stage } -- ^ Infix operator application (@ a + b @) - | PrefixApp { _exprOperator :: Ann Operator a - , _exprRhs :: Ann Expr a + | PrefixApp { _exprOperator :: Ann Operator dom stage + , _exprRhs :: Ann Expr dom stage } -- ^ Prefix operator application (@ -x @) - | App { _exprFun :: Ann Expr a - , _exprArg :: Ann Expr a + | App { _exprFun :: Ann Expr dom stage + , _exprArg :: Ann Expr dom stage } -- ^ Function application (@ f 4 @) -- unary minus omitted - | Lambda { _exprBindings :: AnnList Pattern a -- ^ at least one - , _exprInner :: Ann Expr a + | Lambda { _exprBindings :: AnnList Pattern dom stage -- ^ at least one + , _exprInner :: Ann Expr dom stage } -- ^ Lambda expression (@ \a b -> a + b @) - | Let { _exprFunBind :: AnnList LocalBind a -- ^ nonempty - , _exprInner :: Ann Expr a + | Let { _exprFunBind :: AnnList LocalBind dom stage -- ^ nonempty + , _exprInner :: Ann Expr dom stage } -- ^ Local binding (@ let x = 2; y = 3 in e x y @) - | If { _exprCond :: Ann Expr a - , _exprThen :: Ann Expr a - , _exprElse :: Ann Expr a + | If { _exprCond :: Ann Expr dom stage + , _exprThen :: Ann Expr dom stage + , _exprElse :: Ann Expr dom stage } -- ^ If expression (@ if a then b else c @) - | MultiIf { _exprIfAlts :: AnnList GuardedCaseRhs a + | MultiIf { _exprIfAlts :: AnnList GuardedCaseRhs dom stage } -- ^ Multi way if expressions with @MultiWayIf@ extension (@ if | guard1 -> expr1; guard2 -> expr2 @) - | Case { _exprCase :: Ann Expr a - , _exprAlts :: AnnList Alt a + | Case { _exprCase :: Ann Expr dom stage + , _exprAlts :: AnnList Alt dom stage } -- ^ Pattern matching expression (@ case expr of pat1 -> expr1; pat2 -> expr2 @) - | Do { _doKind :: Ann DoKind a - , _exprStmts :: AnnList Stmt a + | Do { _doKind :: Ann DoKind dom stage + , _exprStmts :: AnnList Stmt dom stage } -- ^ Do-notation expressions (@ do x <- act1; act2 @) - | Tuple { _tupleElems :: AnnList Expr a + | Tuple { _tupleElems :: AnnList Expr dom stage } -- ^ Tuple expression (@ (e1, e2, e3) @) - | UnboxedTuple { _tupleElems :: AnnList Expr a + | UnboxedTuple { _tupleElems :: AnnList Expr dom stage } -- ^ Unboxed tuple expression (@ (# e1, e2, e3 #) @) - | TupleSection { _tupleSectionElems :: AnnList TupSecElem a + | TupleSection { _tupleSectionElems :: AnnList TupSecElem dom stage } -- ^ Tuple section, enabled with @TupleSections@ (@ (a,,b) @). One of the elements must be missing. - | UnboxedTupSec { _tupleSectionElems :: AnnList TupSecElem a + | UnboxedTupSec { _tupleSectionElems :: AnnList TupSecElem dom stage } - | List { _listElems :: AnnList Expr a + | List { _listElems :: AnnList Expr dom stage } -- ^ List expression: @[1,2,3]@ - | ParArray { _listElems :: AnnList Expr a + | ParArray { _listElems :: AnnList Expr dom stage } -- ^ Parallel array expression: @[: 1,2,3 :]@ - | Paren { _exprInner :: Ann Expr a + | Paren { _exprInner :: Ann Expr dom stage } - | LeftSection { _exprLhs :: Ann Expr a - , _exprOperator :: Ann Operator a + | LeftSection { _exprLhs :: Ann Expr dom stage + , _exprOperator :: Ann Operator dom stage } -- ^ Left operator section: @(1+)@ - | RightSection { _exprOperator :: Ann Operator a - , _exprRhs :: Ann Expr a + | RightSection { _exprOperator :: Ann Operator dom stage + , _exprRhs :: Ann Expr dom stage } -- ^ Right operator section: @(+1)@ - | RecCon { _exprRecName :: Ann Name a - , _exprRecFields :: AnnList FieldUpdate a + | RecCon { _exprRecName :: Ann Name dom stage + , _exprRecFields :: AnnList FieldUpdate dom stage } -- ^ Record value construction: @Point { x = 3, y = -2 }@ - | RecUpdate { _exprInner :: Ann Expr a - , _exprRecFields :: AnnList FieldUpdate a + | RecUpdate { _exprInner :: Ann Expr dom stage + , _exprRecFields :: AnnList FieldUpdate dom stage } -- ^ Record value update: @p1 { x = 3, y = -2 }@ - | Enum { _enumFrom :: Ann Expr a - , _enumThen :: AnnMaybe Expr a - , _enumTo :: AnnMaybe Expr a + | Enum { _enumFrom :: Ann Expr dom stage + , _enumThen :: AnnMaybe Expr dom stage + , _enumTo :: AnnMaybe Expr dom stage } -- ^ Enumeration expression (@ [1,3..10] @) - | ParArrayEnum { _enumFrom :: Ann Expr a - , _enumThen :: AnnMaybe Expr a - , _enumToFix :: Ann Expr a + | ParArrayEnum { _enumFrom :: Ann Expr dom stage + , _enumThen :: AnnMaybe Expr dom stage + , _enumToFix :: Ann Expr dom stage } -- ^ Parallel array enumeration (@ [: 1,3 .. 10 :] @) - | ListComp { _compExpr :: Ann Expr a - , _compBody :: AnnList ListCompBody a -- ^ Can only have 1 element without @ParallelListComp@ + | ListComp { _compExpr :: Ann Expr dom stage + , _compBody :: AnnList ListCompBody dom stage -- ^ Can only have 1 element without @ParallelListComp@ } -- ^ List comprehension (@ [ (x, y) | x <- xs | y <- ys ] @) - | ParArrayComp { _compExpr :: Ann Expr a - , _compBody :: AnnList ListCompBody a + | ParArrayComp { _compExpr :: Ann Expr dom stage + , _compBody :: AnnList ListCompBody dom stage } -- ^ Parallel array comprehensions @ [: (x, y) | x <- xs , y <- ys :] @ enabled by @ParallelArrays@ - | TypeSig { _exprInner :: Ann Expr a - , _exprSig :: Ann Type a + | TypeSig { _exprInner :: Ann Expr dom stage + , _exprSig :: Ann Type dom stage } -- ^ Explicit type signature (@ _x :: Int @) - | ExplTypeApp { _exprInner :: Ann Expr a - , _exprType :: Ann Type a + | ExplTypeApp { _exprInner :: Ann Expr dom stage + , _exprType :: Ann Type dom stage } -- ^ Explicit type application (@ show \@Integer (read "5") @) - | VarQuote { _quotedName :: Ann Name a + | VarQuote { _quotedName :: Ann Name dom stage } -- ^ @'x@ for template haskell reifying of expressions - | TypeQuote { _quotedName :: Ann Name a + | TypeQuote { _quotedName :: Ann Name dom stage } -- ^ @''T@ for template haskell reifying of types - | BracketExpr { _bracket :: Ann Bracket a + | BracketExpr { _bracket :: Ann Bracket dom stage } -- ^ Template haskell bracket expression - | Splice { _innerExpr :: Ann Splice a + | Splice { _innerExpr :: Ann Splice dom stage } -- ^ Template haskell splice expression, for example: @$(gen a)@ or @$x@ - | QuasiQuoteExpr { _exprQQ :: Ann QuasiQuote a + | QuasiQuoteExpr { _exprQQ :: Ann QuasiQuote dom stage } -- ^ Template haskell quasi-quotation: @[$quoter|str]@ - | ExprPragma { _exprPragma :: Ann ExprPragma a + | ExprPragma { _exprPragma :: Ann ExprPragma dom stage } -- Arrows - | Proc { _procPattern :: Ann Pattern a - , _procExpr :: Ann Cmd a + | Proc { _procPattern :: Ann Pattern dom stage + , _procExpr :: Ann Cmd dom stage } -- ^ Arrow definition: @proc a -> f -< a+1@ - | ArrowApp { _exprLhs :: Ann Expr a - , _arrowAppl :: Ann ArrowAppl a - , _exprRhs :: Ann Expr a + | ArrowApp { _exprLhs :: Ann Expr dom stage + , _arrowAppl :: Ann ArrowAppl dom stage + , _exprRhs :: Ann Expr dom stage } -- ^ Arrow application: @f -< a+1@ - | LamCase { _exprAlts :: AnnList Alt a + | LamCase { _exprAlts :: AnnList Alt dom stage } -- ^ Lambda case ( @\case 0 -> 1; 1 -> 2@ ) - | StaticPtr { _exprInner :: Ann Expr a + | StaticPtr { _exprInner :: Ann Expr dom stage } -- ^ Static pointer expression (@ static e @). The inner expression must be closed (cannot have variables bound outside) -- XML expressions omitted -- | Field update expressions -data FieldUpdate a - = NormalFieldUpdate { _fieldName :: Ann Name a - , _fieldValue :: Ann Expr a +data FieldUpdate dom stage + = NormalFieldUpdate { _fieldName :: Ann Name dom stage + , _fieldValue :: Ann Expr dom stage } -- ^ Update of a field (@ x = 1 @) - | FieldPun { _fieldUpdateName :: Ann Name a + | FieldPun { _fieldUpdateName :: Ann Name dom stage } -- ^ Update the field to the value of the same name (@ x @) | FieldWildcard -- ^ Update the fields of the bounded names to their values (@ .. @). Must be the last update. Cannot be used in a record update expression. -- | An element of a tuple section that can be an expression or missing (indicating a value from a parameter) -data TupSecElem a - = Present { _tupSecExpr :: Ann Expr a +data TupSecElem dom stage + = Present { _tupSecExpr :: Ann Expr dom stage } -- ^ An existing element in a tuple section | Missing -- ^ A missing element in a tuple section -- | Clause of case expression -data Alt' expr a - = Alt { _altPattern :: Ann Pattern a - , _altRhs :: Ann (CaseRhs' expr) a - , _altBinds :: AnnMaybe LocalBinds a +data Alt' expr dom stage + = Alt { _altPattern :: Ann Pattern dom stage + , _altRhs :: Ann (CaseRhs' expr) dom stage + , _altBinds :: AnnMaybe LocalBinds dom stage } type Alt = Alt' Expr type CmdAlt = Alt' Cmd -- | Right hand side of a match (possible with guards): (@ = 3 @ or @ | x == 1 = 3; | otherwise = 4 @) -data CaseRhs' expr a - = UnguardedCaseRhs { _rhsCaseExpr :: Ann expr a +data CaseRhs' expr dom stage + = UnguardedCaseRhs { _rhsCaseExpr :: Ann expr dom stage } - | GuardedCaseRhss { _rhsCaseGuards :: AnnList (GuardedCaseRhs' expr) a + | GuardedCaseRhss { _rhsCaseGuards :: AnnList (GuardedCaseRhs' expr) dom stage } type CaseRhs = CaseRhs' Expr type CmdCaseRhs = CaseRhs' Cmd -- | A guarded right-hand side of pattern matches binding (@ | x > 3 -> 2 @) -data GuardedCaseRhs' expr a - = GuardedCaseRhs { _caseGuardStmts :: AnnList RhsGuard a -- ^ Cannot be empty. - , _caseGuardExpr :: Ann expr a +data GuardedCaseRhs' expr dom stage + = GuardedCaseRhs { _caseGuardStmts :: AnnList RhsGuard dom stage -- ^ Cannot be empty. + , _caseGuardExpr :: Ann expr dom stage } type GuardedCaseRhs = GuardedCaseRhs' Expr type CmdGuardedCaseRhs = GuardedCaseRhs' Cmd -- | Pragmas that can be applied to expressions -data ExprPragma a - = CorePragma { _pragmaStr :: Ann StringNode a +data ExprPragma dom stage + = CorePragma { _pragmaStr :: Ann StringNode dom stage } - | SccPragma { _pragmaStr :: Ann StringNode a + | SccPragma { _pragmaStr :: Ann StringNode dom stage } - | GeneratedPragma { _pragmaSrcRange :: Ann SourceRange a + | GeneratedPragma { _pragmaSrcRange :: Ann SourceRange dom stage } -- | In-AST source ranges (for generated pragmas) -data SourceRange a - = SourceRange { _srFileName :: Ann StringNode a - , _srFromLine :: Ann Number a - , _srFromCol :: Ann Number a - , _srToLine :: Ann Number a - , _srToCol :: Ann Number a +data SourceRange dom stage + = SourceRange { _srFileName :: Ann StringNode dom stage + , _srFromLine :: Ann Number dom stage + , _srFromCol :: Ann Number dom stage + , _srToLine :: Ann Number dom stage + , _srToCol :: Ann Number dom stage } -data Number a +data Number dom stage = Number { _numberInteger :: Integer } -data Cmd a - = ArrowAppCmd { _cmdLhs :: Ann Expr a - , _cmdArrowOp :: Ann ArrowAppl a - , _cmdRhs :: Ann Expr a +data Cmd dom stage + = ArrowAppCmd { _cmdLhs :: Ann Expr dom stage + , _cmdArrowOp :: Ann ArrowAppl dom stage + , _cmdRhs :: Ann Expr dom stage } - | ArrowFormCmd { _cmdExpr :: Ann Expr a - , _cmdInnerCmds :: AnnList Cmd a + | ArrowFormCmd { _cmdExpr :: Ann Expr dom stage + , _cmdInnerCmds :: AnnList Cmd dom stage } - | AppCmd { _cmdInnerCmd :: Ann Cmd a - , _cmdApplied :: Ann Expr a + | AppCmd { _cmdInnerCmd :: Ann Cmd dom stage + , _cmdApplied :: Ann Expr dom stage } - | InfixCmd { _cmdLeftCmd :: Ann Cmd a - , _cmdOperator :: Ann Name a - , _cmdRightCmd :: Ann Cmd a + | InfixCmd { _cmdLeftCmd :: Ann Cmd dom stage + , _cmdOperator :: Ann Name dom stage + , _cmdRightCmd :: Ann Cmd dom stage } - | LambdaCmd { _cmdBindings :: AnnList Pattern a -- ^ at least one - , _cmdInner :: Ann Cmd a + | LambdaCmd { _cmdBindings :: AnnList Pattern dom stage -- ^ at least one + , _cmdInner :: Ann Cmd dom stage } - | ParenCmd { _cmdInner :: Ann Cmd a + | ParenCmd { _cmdInner :: Ann Cmd dom stage } - | CaseCmd { _cmdExpr :: Ann Expr a - , _cmdAlts :: AnnList CmdAlt a + | CaseCmd { _cmdExpr :: Ann Expr dom stage + , _cmdAlts :: AnnList CmdAlt dom stage } - | IfCmd { _cmdExpr :: Ann Expr a - , _cmdThen :: Ann Cmd a - , _cmdElse :: Ann Cmd a + | IfCmd { _cmdExpr :: Ann Expr dom stage + , _cmdThen :: Ann Cmd dom stage + , _cmdElse :: Ann Cmd dom stage } - | LetCmd { _cmdBinds :: AnnList LocalBind a -- ^ nonempty - , _cmdInner :: Ann Cmd a + | LetCmd { _cmdBinds :: AnnList LocalBind dom stage -- ^ nonempty + , _cmdInner :: Ann Cmd dom stage } - | DoCmd { _cmdStmts :: AnnList (Stmt' Cmd) a + | DoCmd { _cmdStmts :: AnnList (Stmt' Cmd) dom stage }
Language/Haskell/Tools/AST/Exprs.hs-boot view
@@ -1,8 +1,8 @@ {-# LANGUAGE RoleAnnotations #-} module Language.Haskell.Tools.AST.Exprs where -type role Expr nominal -data Expr a +type role Expr nominal nominal +data Expr dom stage -type role Cmd nominal -data Cmd a+type role Cmd nominal nominal +data Cmd dom stage
Language/Haskell/Tools/AST/Helpers.hs view
@@ -1,7 +1,8 @@ {-# LANGUAGE FlexibleContexts , LambdaCase , RankNTypes - , ScopedTypeVariables + , ScopedTypeVariables + , TypeFamilies #-} -- | Helper functions for using the AST. @@ -24,62 +25,59 @@ import Language.Haskell.Tools.AST.Types import Language.Haskell.Tools.AST.Base import Language.Haskell.Tools.AST.References +import Language.Haskell.Tools.AST.SemaInfoTypes import Debug.Trace -ordByOccurrence :: SimpleName a -> SimpleName a -> Ordering +ordByOccurrence :: SimpleName dom stage -> SimpleName dom stage -> Ordering ordByOccurrence = compare `on` nameElements -- | The occurrence of the name. -nameString :: SimpleName a -> String +nameString :: SimpleName dom stage -> String nameString = intercalate "." . nameElements -- | The qualifiers and the unqualified name -nameElements :: SimpleName a -> [String] +nameElements :: SimpleName dom stage -> [String] nameElements n = (n ^? qualifiers&annList&element&simpleNameStr) ++ [n ^. unqualifiedName&element&simpleNameStr] -- | The qualifier of the name -nameQualifier :: SimpleName a -> [String] +nameQualifier :: SimpleName dom stage -> [String] nameQualifier n = n ^? qualifiers&annList&element&simpleNameStr -- | Does the import declaration import only the explicitly listed elements? -importIsExact :: ImportDecl a -> Bool +importIsExact :: ImportDecl dom stage -> Bool importIsExact = isJust . (^? importSpec&annJust&element&importSpecList) -- | Does the import declaration has a 'hiding' clause? -importIsHiding :: ImportDecl a -> Bool +importIsHiding :: ImportDecl dom stage -> Bool importIsHiding = isJust . (^? importSpec&annJust&element&importSpecHiding) -- | All elements that are explicitly listed to be imported in the import declaration -importExacts :: Simple Traversal (ImportDecl a) (IESpec a) +importExacts :: Simple Traversal (ImportDecl dom stage) (IESpec dom stage) importExacts = importSpec&annJust&element&importSpecList&annList&element -- | All elements that are hidden in an import -importHidings :: Simple Traversal (ImportDecl a) (IESpec a) +importHidings :: Simple Traversal (ImportDecl dom stage) (IESpec dom stage) importHidings = importSpec&annJust&element&importSpecList&annList&element -- | Possible qualifiers to use imported definitions -importQualifiers :: ImportDecl a -> [[String]] +importQualifiers :: ImportDecl dom stage -> [[String]] importQualifiers imp = (if isAnnNothing (imp ^. importQualified) then [[]] else []) - ++ maybe [] (\n -> [nameElements n]) - (imp ^? importAs&annJust&element&importRename&element) + ++ [imp ^? importAs&annJust&element&importRename&element&moduleNameString] -bindingSemantics :: Simple Traversal (Ann ValueBind (NodeInfo (SemanticInfo n) s)) (SemanticInfo n) -bindingSemantics = element&(valBindPat&element&patternName&element&simpleName - &+& funBindMatches&annList&element&matchLhs&element - &(matchLhsName&element&simpleName &+& matchLhsOperator&element&operatorName)) - &semantics - -bindingName :: Simple Traversal (Ann ValueBind (NodeInfo (SemanticInfo n) s)) n -bindingName = bindingSemantics&nameInfo +bindingName :: (SemanticInfo dom SimpleName ~ ni) => Simple Traversal (Ann ValueBind dom stage) ni +bindingName = element&(valBindPat&element&patternName&element&simpleName + &+& funBindMatches&annList&element&matchLhs&element + &(matchLhsName&element&simpleName &+& matchLhsOperator&element&operatorName)) + &semantics -declHeadNames :: Simple Traversal (Ann DeclHead a) (Ann SimpleName a) +declHeadNames :: Simple Traversal (Ann DeclHead dom stage) (Ann SimpleName dom stage) declHeadNames = element & (dhName&element&simpleName &+& dhBody&declHeadNames &+& dhAppFun&declHeadNames &+& dhOperator&element&operatorName) -typeParams :: Simple Traversal (Ann Type a) (Ann Type a) +typeParams :: Simple Traversal (Ann Type dom stage) (Ann Type dom stage) typeParams = fromTraversal typeParamsTrav where typeParamsTrav f (Ann a (TyFun p r)) = Ann a <$> (TyFun <$> f p <*> typeParamsTrav f r) typeParamsTrav f (Ann a (TyForall vs t)) = Ann a <$> (TyForall vs <$> typeParamsTrav f t) @@ -89,20 +87,20 @@ -- | Access the semantic information of an AST node. -semantics :: Simple Lens (Ann a (NodeInfo sema src)) sema +semantics :: Simple Lens (Ann elem dom stage) (SemanticInfo dom elem) semantics = annotation&semanticInfo -dhNames :: Simple Traversal (Ann DeclHead (NodeInfo (SemanticInfo n) src)) n -dhNames = declHeadNames & semantics & nameInfo +dhNames :: (SemanticInfo dom SimpleName ~ k) => Simple Traversal (Ann DeclHead dom stage) k +dhNames = declHeadNames & semantics -- | A type class for transformations that work on both top-level and local definitions class BindingElem d where - sigBind :: Simple Partial (d a) (Ann TypeSignature a) - valBind :: Simple Partial (d a) (Ann ValueBind a) - createTypeSig :: Ann TypeSignature a -> d a - createBinding :: Ann ValueBind a -> d a - isTypeSig :: d a -> Bool - isBinding :: d a -> Bool + sigBind :: Simple Partial (d dom stage) (Ann TypeSignature dom stage) + valBind :: Simple Partial (d dom stage) (Ann ValueBind dom stage) + createTypeSig :: Ann TypeSignature dom stage -> d dom stage + createBinding :: Ann ValueBind dom stage -> d dom stage + isTypeSig :: d dom stage -> Bool + isBinding :: d dom stage -> Bool instance BindingElem Decl where sigBind = declTypeSig @@ -124,48 +122,54 @@ isBinding (LocalValBind _) = True isBinding _ = False -bindName :: BindingElem d => Simple Traversal (d (NodeInfo (SemanticInfo n) src)) n -bindName = valBind&bindingName &+& sigBind&element&tsName&annList&element&simpleName&semantics&nameInfo +bindName :: (BindingElem d, SemanticInfo dom SimpleName ~ k) => Simple Traversal (d dom stage) k +bindName = valBind&bindingName &+& sigBind&element&tsName&annList&element&simpleName&semantics -valBindsInList :: BindingElem d => Simple Traversal (AnnList d a) (Ann ValueBind a) +valBindsInList :: BindingElem d => Simple Traversal (AnnList d dom stage) (Ann ValueBind dom stage) valBindsInList = annList & element & valBind -getValBindInList :: (BindingElem d, HasRange a) => RealSrcSpan -> AnnList d a -> Maybe (Ann ValueBind a) +getValBindInList :: (BindingElem d, SourceInfo stage) => RealSrcSpan -> AnnList d dom stage -> Maybe (Ann ValueBind dom stage) getValBindInList sp ls = case ls ^? valBindsInList & filtered (isInside sp) of [] -> Nothing [n] -> Just n _ -> error "getValBindInList: Multiple nodes" -nodesContaining :: forall node inner a . (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) - => RealSrcSpan -> Simple Traversal (node a) (inner a) +-- | Get all nodes that contain a given source range +nodesContaining :: (HasRange (inner dom stage), Biplate (node dom stage) (inner dom stage), SourceInfo stage) + => RealSrcSpan -> Simple Traversal (node dom stage) (inner dom stage) nodesContaining rng = biplateRef & filtered (isInside rng) - -isInside :: (HasAnnot node, HasRange a) => RealSrcSpan -> node a -> Bool -isInside rng nd = case getRange (getAnnot nd) of RealSrcSpan sp -> sp `containsSpan` rng - _ -> False - -nodesWithRange :: forall node inner a . (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) - => RealSrcSpan -> Simple Traversal (node a) (inner a) + +-- | Return true if the node contains a given range +isInside :: HasRange (inner dom stage) => RealSrcSpan -> inner dom stage -> Bool +isInside rng nd = case getRange nd of RealSrcSpan sp -> sp `containsSpan` rng + _ -> False + +-- | Get the nodes that have exactly the given range +nodesWithRange :: (Biplate (Ann node dom stage) (Ann inner dom stage), SourceInfo stage) + => RealSrcSpan -> Simple Traversal (Ann node dom stage) (Ann inner dom stage) nodesWithRange rng = biplateRef & filtered (hasRange rng) - -hasRange :: (HasAnnot node, HasRange a) => RealSrcSpan -> node a -> Bool -hasRange rng node = case getRange (getAnnot node) of RealSrcSpan sp -> sp == rng - _ -> False + +-- | True, if the node has the given range +hasRange :: SourceInfo stage => RealSrcSpan -> Ann inner dom stage -> Bool +hasRange rng node = case getRange node of RealSrcSpan sp -> sp == rng + _ -> False -getNodeContaining :: (Biplate (node a) (Ann inner a), HasAnnot node, HasRange a) - => RealSrcSpan -> node a -> Maybe (Ann inner a) +-- | Get the shortest source range that contains the given +getNodeContaining :: (Biplate (Ann node dom stage) (Ann inner dom stage), SourceInfo stage, HasRange (Ann inner dom stage)) + => RealSrcSpan -> Ann node dom stage -> Maybe (Ann inner dom stage) getNodeContaining sp node = case node ^? nodesContaining sp of [] -> Nothing - results -> Just $ minimumBy (compareRangeLength `on` (getRange . (^. annotation))) results + results -> Just $ minimumBy (compareRangeLength `on` getRange) results +-- | Compares two NESTED source spans based on their lengths compareRangeLength :: SrcSpan -> SrcSpan -> Ordering compareRangeLength (RealSrcSpan sp1) (RealSrcSpan sp2) = (lineDiff sp1 `compare` lineDiff sp2) `mappend` (colDiff sp1 `compare` colDiff sp2) where lineDiff sp = srcLocLine (realSrcSpanStart sp) - srcLocLine (realSrcSpanEnd sp) colDiff sp = srcLocCol (realSrcSpanStart sp) - srcLocCol (realSrcSpanEnd sp) -getNode :: (Biplate (node a) (inner a), HasAnnot node, HasAnnot inner, HasRange a) - => RealSrcSpan -> node a -> inner a +getNode :: (Biplate (Ann node dom stage) (Ann inner dom stage), SourceInfo stage) + => RealSrcSpan -> Ann node dom stage -> Ann inner dom stage getNode sp node = case node ^? nodesWithRange sp of [] -> error "getNode: The node cannot be found" [n] -> n
Language/Haskell/Tools/AST/Instances.hs view
@@ -5,4 +5,5 @@ import Language.Haskell.Tools.AST.Instances.Eq import Language.Haskell.Tools.AST.Instances.Show import Language.Haskell.Tools.AST.Instances.Generic -import Language.Haskell.Tools.AST.Instances.StructuralTraversal +import Language.Haskell.Tools.AST.Instances.SourceInfoTraversal +import Language.Haskell.Tools.AST.Instances.SemanticTraversal
Language/Haskell/Tools/AST/Instances/Data.hs view
@@ -18,116 +18,117 @@ import Language.Haskell.Tools.AST.Ann -- Annotations -deriving instance (Typeable a, Data a, Typeable e, Data (e a)) => Data (Ann e a) -deriving instance (Typeable a, Data a, Typeable e, Data (e a)) => Data (AnnMaybe e a) -deriving instance (Typeable a, Data a, Typeable e, Data (e a)) => Data (AnnList e a) +deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (Ann e dom stage) +deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (AnnMaybe e dom stage) +deriving instance (DomainWith e dom, SourceInfo stage, Typeable e, Data (e dom stage)) => Data (AnnList e dom stage) -- Modules -deriving instance Data a => Data (Module a) -deriving instance Data a => Data (ModuleHead a) -deriving instance Data a => Data (ExportSpecList a) -deriving instance Data a => Data (ExportSpec a) -deriving instance Data a => Data (IESpec a) -deriving instance Data a => Data (SubSpec a) -deriving instance Data a => Data (ModulePragma a) -deriving instance Data a => Data (FilePragma a) -deriving instance Data a => Data (ImportDecl a) -deriving instance Data a => Data (ImportSpec a) -deriving instance Data a => Data (ImportQualified a) -deriving instance Data a => Data (ImportSource a) -deriving instance Data a => Data (ImportSafe a) -deriving instance Data a => Data (TypeNamespace a) -deriving instance Data a => Data (ImportRenaming a) +deriving instance (Domain dom, SourceInfo stage) => Data (Module dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ModuleHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ExportSpecList dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ExportSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (IESpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (SubSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ModulePragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FilePragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportQualified dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportSource dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportSafe dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeNamespace dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ImportRenaming dom stage) -- Declarations -deriving instance Data a => Data (Decl a) -deriving instance Data a => Data (ClassBody a) -deriving instance Data a => Data (ClassElement a) -deriving instance Data a => Data (DeclHead a) -deriving instance Data a => Data (InstBody a) -deriving instance Data a => Data (InstBodyDecl a) -deriving instance Data a => Data (GadtConDecl a) -deriving instance Data a => Data (GadtConType a) -deriving instance Data a => Data (GadtField a) -deriving instance Data a => Data (FunDeps a) -deriving instance Data a => Data (FunDep a) -deriving instance Data a => Data (ConDecl a) -deriving instance Data a => Data (FieldDecl a) -deriving instance Data a => Data (Deriving a) -deriving instance Data a => Data (InstanceRule a) -deriving instance Data a => Data (InstanceHead a) -deriving instance Data a => Data (TypeEqn a) -deriving instance Data a => Data (KindConstraint a) -deriving instance Data a => Data (TyVar a) -deriving instance Data a => Data (Type a) -deriving instance Data a => Data (Kind a) -deriving instance Data a => Data (Context a) -deriving instance Data a => Data (Assertion a) -deriving instance Data a => Data (Expr a) -deriving instance (Data a, Typeable expr, Data (expr a)) => Data (Stmt' expr a) -deriving instance Data a => Data (CompStmt a) -deriving instance Data a => Data (ValueBind a) -deriving instance Data a => Data (Pattern a) -deriving instance Data a => Data (PatternField a) -deriving instance Data a => Data (Splice a) -deriving instance Data a => Data (QQString a) -deriving instance Data a => Data (Match a) -deriving instance (Data a, Typeable expr, Data (expr a)) => Data (Alt' expr a) -deriving instance Data a => Data (Rhs a) -deriving instance Data a => Data (GuardedRhs a) -deriving instance Data a => Data (FieldUpdate a) -deriving instance Data a => Data (Bracket a) -deriving instance Data a => Data (TopLevelPragma a) -deriving instance Data a => Data (Rule a) -deriving instance Data a => Data (AnnotationSubject a) -deriving instance Data a => Data (MinimalFormula a) -deriving instance Data a => Data (ExprPragma a) -deriving instance Data a => Data (SourceRange a) -deriving instance Data a => Data (Number a) -deriving instance Data a => Data (QuasiQuote a) -deriving instance Data a => Data (RhsGuard a) -deriving instance Data a => Data (LocalBind a) -deriving instance Data a => Data (LocalBinds a) -deriving instance Data a => Data (FixitySignature a) -deriving instance Data a => Data (TypeSignature a) -deriving instance Data a => Data (ListCompBody a) -deriving instance Data a => Data (TupSecElem a) -deriving instance Data a => Data (TypeFamily a) -deriving instance Data a => Data (TypeFamilySpec a) -deriving instance Data a => Data (InjectivityAnn a) -deriving instance (Data a, Typeable expr, Data (expr a)) => Data (CaseRhs' expr a) -deriving instance (Data a, Typeable expr, Data (expr a))=> Data (GuardedCaseRhs' expr a) -deriving instance Data a => Data (PatternSynonym a) -deriving instance Data a => Data (PatSynRhs a) -deriving instance Data a => Data (PatSynLhs a) -deriving instance Data a => Data (PatSynWhere a) -deriving instance Data a => Data (PatternTypeSignature a) -deriving instance Data a => Data (Role a) -deriving instance Data a => Data (Cmd a) -deriving instance Data a => Data (LanguageExtension a) -deriving instance Data a => Data (MatchLhs a) +deriving instance (Domain dom, SourceInfo stage) => Data (Decl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ClassBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ClassElement dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (DeclHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (InstBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (InstBodyDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (GadtConDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (GadtConType dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (GadtField dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FunDeps dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FunDep dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ConDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FieldDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Deriving dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (InstanceRule dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (InstanceHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeEqn dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (KindConstraint dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TyVar dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Type dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Kind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Context dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Assertion dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Expr dom stage) +deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (Stmt' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (CompStmt dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ValueBind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Pattern dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatternField dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Splice dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (QQString dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Match dom stage) +deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (Alt' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Rhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (GuardedRhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FieldUpdate dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Bracket dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TopLevelPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Rule dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (AnnotationSubject dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (MinimalFormula dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ExprPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (SourceRange dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Number dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (QuasiQuote dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (RhsGuard dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (LocalBind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (LocalBinds dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (FixitySignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeSignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ListCompBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TupSecElem dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeFamily dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeFamilySpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (InjectivityAnn dom stage) +deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage)) => Data (CaseRhs' expr dom stage) +deriving instance (DomainWith expr dom, SourceInfo stage, Typeable expr, Data (expr dom stage))=> Data (GuardedCaseRhs' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatternSynonym dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatSynRhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatSynLhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatSynWhere dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PatternTypeSignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Role dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Cmd dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (LanguageExtension dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (MatchLhs dom stage) -- Literal -deriving instance Data a => Data (Literal a) -deriving instance (Data a, Typeable k, Data (k a)) => Data (Promoted k a) +deriving instance (Domain dom, SourceInfo stage) => Data (Literal dom stage) +deriving instance (DomainWith k dom, SourceInfo stage, Typeable k, Data (k dom stage)) => Data (Promoted k dom stage) -- Base -deriving instance Data a => Data (Operator a) -deriving instance Data a => Data (Name a) -deriving instance Data a => Data (SimpleName a) -deriving instance Data a => Data (UnqualName a) -deriving instance Data a => Data (StringNode a) -deriving instance Data a => Data (DataOrNewtypeKeyword a) -deriving instance Data a => Data (DoKind a) -deriving instance Data a => Data (TypeKeyword a) -deriving instance Data a => Data (OverlapPragma a) -deriving instance Data a => Data (CallConv a) -deriving instance Data a => Data (ArrowAppl a) -deriving instance Data a => Data (Safety a) -deriving instance Data a => Data (ConlikeAnnot a) -deriving instance Data a => Data (Assoc a) -deriving instance Data a => Data (Precedence a) -deriving instance Data a => Data (LineNumber a) -deriving instance Data a => Data (PhaseControl a) -deriving instance Data a => Data (PhaseNumber a) -deriving instance Data a => Data (PhaseInvert a)+deriving instance (Domain dom, SourceInfo stage) => Data (Operator dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Name dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (SimpleName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ModuleName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (UnqualName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (StringNode dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (DataOrNewtypeKeyword dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (DoKind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (TypeKeyword dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (OverlapPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (CallConv dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ArrowAppl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Safety dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (ConlikeAnnot dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Assoc dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (Precedence dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (LineNumber dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PhaseControl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PhaseNumber dom stage) +deriving instance (Domain dom, SourceInfo stage) => Data (PhaseInvert dom stage)
Language/Haskell/Tools/AST/Instances/Eq.hs view
@@ -16,121 +16,122 @@ import Language.Haskell.Tools.AST.Ann -- Annotations -instance (Eq (e a)) => Eq (Ann e a) where +instance (Eq (e dom stage)) => Eq (Ann e dom stage) where Ann _ e1 == Ann _ e2 = e1 == e2 -instance (Eq (e a)) => Eq (AnnMaybe e a) where +instance (Eq (e dom stage)) => Eq (AnnMaybe e dom stage) where AnnMaybe _ e1 == AnnMaybe _ e2 = e1 == e2 -instance (Eq (e a)) => Eq (AnnList e a) where +instance (Eq (e dom stage)) => Eq (AnnList e dom stage) where AnnList _ e1 == AnnList _ e2 = e1 == e2 -- Modules -deriving instance Eq (Module a) -deriving instance Eq (ModuleHead a) -deriving instance Eq (ExportSpecList a) -deriving instance Eq (ExportSpec a) -deriving instance Eq (IESpec a) -deriving instance Eq (SubSpec a) -deriving instance Eq (ModulePragma a) -deriving instance Eq (FilePragma a) -deriving instance Eq (ImportDecl a) -deriving instance Eq (ImportSpec a) -deriving instance Eq (ImportQualified a) -deriving instance Eq (ImportSource a) -deriving instance Eq (ImportSafe a) -deriving instance Eq (TypeNamespace a) -deriving instance Eq (ImportRenaming a) +deriving instance Eq (Module dom stage) +deriving instance Eq (ModuleHead dom stage) +deriving instance Eq (ExportSpecList dom stage) +deriving instance Eq (ExportSpec dom stage) +deriving instance Eq (IESpec dom stage) +deriving instance Eq (SubSpec dom stage) +deriving instance Eq (ModulePragma dom stage) +deriving instance Eq (FilePragma dom stage) +deriving instance Eq (ImportDecl dom stage) +deriving instance Eq (ImportSpec dom stage) +deriving instance Eq (ImportQualified dom stage) +deriving instance Eq (ImportSource dom stage) +deriving instance Eq (ImportSafe dom stage) +deriving instance Eq (TypeNamespace dom stage) +deriving instance Eq (ImportRenaming dom stage) -- Declarations -deriving instance Eq (Decl a) -deriving instance Eq (ClassBody a) -deriving instance Eq (ClassElement a) -deriving instance Eq (DeclHead a) -deriving instance Eq (InstBody a) -deriving instance Eq (InstBodyDecl a) -deriving instance Eq (GadtConDecl a) -deriving instance Eq (GadtConType a) -deriving instance Eq (GadtField a) -deriving instance Eq (FunDeps a) -deriving instance Eq (FunDep a) -deriving instance Eq (ConDecl a) -deriving instance Eq (FieldDecl a) -deriving instance Eq (Deriving a) -deriving instance Eq (InstanceRule a) -deriving instance Eq (InstanceHead a) -deriving instance Eq (TypeEqn a) -deriving instance Eq (KindConstraint a) -deriving instance Eq (TyVar a) -deriving instance Eq (Type a) -deriving instance Eq (Kind a) -deriving instance Eq (Context a) -deriving instance Eq (Assertion a) -deriving instance Eq (Expr a) -deriving instance Eq (expr a) => Eq (Stmt' expr a) -deriving instance Eq (CompStmt a) -deriving instance Eq (ValueBind a) -deriving instance Eq (Pattern a) -deriving instance Eq (PatternField a) -deriving instance Eq (Splice a) -deriving instance Eq (QQString a) -deriving instance Eq (Match a) -deriving instance Eq (expr a) => Eq (Alt' expr a) -deriving instance Eq (Rhs a) -deriving instance Eq (GuardedRhs a) -deriving instance Eq (FieldUpdate a) -deriving instance Eq (Bracket a) -deriving instance Eq (TopLevelPragma a) -deriving instance Eq (Rule a) -deriving instance Eq (AnnotationSubject a) -deriving instance Eq (MinimalFormula a) -deriving instance Eq (ExprPragma a) -deriving instance Eq (SourceRange a) -deriving instance Eq (Number a) -deriving instance Eq (QuasiQuote a) -deriving instance Eq (RhsGuard a) -deriving instance Eq (LocalBind a) -deriving instance Eq (LocalBinds a) -deriving instance Eq (FixitySignature a) -deriving instance Eq (TypeSignature a) -deriving instance Eq (ListCompBody a) -deriving instance Eq (TupSecElem a) -deriving instance Eq (TypeFamily a) -deriving instance Eq (TypeFamilySpec a) -deriving instance Eq (InjectivityAnn a) -deriving instance Eq (expr a) => Eq (CaseRhs' expr a) -deriving instance Eq (expr a) => Eq (GuardedCaseRhs' expr a) -deriving instance Eq (PatternSynonym a) -deriving instance Eq (PatSynRhs a) -deriving instance Eq (PatSynLhs a) -deriving instance Eq (PatSynWhere a) -deriving instance Eq (PatternTypeSignature a) -deriving instance Eq (Role a) -deriving instance Eq (Cmd a) -deriving instance Eq (LanguageExtension a) -deriving instance Eq (MatchLhs a) +deriving instance Eq (Decl dom stage) +deriving instance Eq (ClassBody dom stage) +deriving instance Eq (ClassElement dom stage) +deriving instance Eq (DeclHead dom stage) +deriving instance Eq (InstBody dom stage) +deriving instance Eq (InstBodyDecl dom stage) +deriving instance Eq (GadtConDecl dom stage) +deriving instance Eq (GadtConType dom stage) +deriving instance Eq (GadtField dom stage) +deriving instance Eq (FunDeps dom stage) +deriving instance Eq (FunDep dom stage) +deriving instance Eq (ConDecl dom stage) +deriving instance Eq (FieldDecl dom stage) +deriving instance Eq (Deriving dom stage) +deriving instance Eq (InstanceRule dom stage) +deriving instance Eq (InstanceHead dom stage) +deriving instance Eq (TypeEqn dom stage) +deriving instance Eq (KindConstraint dom stage) +deriving instance Eq (TyVar dom stage) +deriving instance Eq (Type dom stage) +deriving instance Eq (Kind dom stage) +deriving instance Eq (Context dom stage) +deriving instance Eq (Assertion dom stage) +deriving instance Eq (Expr dom stage) +deriving instance Eq (expr dom stage) => Eq (Stmt' expr dom stage) +deriving instance Eq (CompStmt dom stage) +deriving instance Eq (ValueBind dom stage) +deriving instance Eq (Pattern dom stage) +deriving instance Eq (PatternField dom stage) +deriving instance Eq (Splice dom stage) +deriving instance Eq (QQString dom stage) +deriving instance Eq (Match dom stage) +deriving instance Eq (expr dom stage) => Eq (Alt' expr dom stage) +deriving instance Eq (Rhs dom stage) +deriving instance Eq (GuardedRhs dom stage) +deriving instance Eq (FieldUpdate dom stage) +deriving instance Eq (Bracket dom stage) +deriving instance Eq (TopLevelPragma dom stage) +deriving instance Eq (Rule dom stage) +deriving instance Eq (AnnotationSubject dom stage) +deriving instance Eq (MinimalFormula dom stage) +deriving instance Eq (ExprPragma dom stage) +deriving instance Eq (SourceRange dom stage) +deriving instance Eq (Number dom stage) +deriving instance Eq (QuasiQuote dom stage) +deriving instance Eq (RhsGuard dom stage) +deriving instance Eq (LocalBind dom stage) +deriving instance Eq (LocalBinds dom stage) +deriving instance Eq (FixitySignature dom stage) +deriving instance Eq (TypeSignature dom stage) +deriving instance Eq (ListCompBody dom stage) +deriving instance Eq (TupSecElem dom stage) +deriving instance Eq (TypeFamily dom stage) +deriving instance Eq (TypeFamilySpec dom stage) +deriving instance Eq (InjectivityAnn dom stage) +deriving instance Eq (expr dom stage) => Eq (CaseRhs' expr dom stage) +deriving instance Eq (expr dom stage) => Eq (GuardedCaseRhs' expr dom stage) +deriving instance Eq (PatternSynonym dom stage) +deriving instance Eq (PatSynRhs dom stage) +deriving instance Eq (PatSynLhs dom stage) +deriving instance Eq (PatSynWhere dom stage) +deriving instance Eq (PatternTypeSignature dom stage) +deriving instance Eq (Role dom stage) +deriving instance Eq (Cmd dom stage) +deriving instance Eq (LanguageExtension dom stage) +deriving instance Eq (MatchLhs dom stage) -- Literal -deriving instance Eq (Literal a) -deriving instance Eq (k a) => Eq (Promoted k a) +deriving instance Eq (Literal dom stage) +deriving instance Eq (k dom stage) => Eq (Promoted k dom stage) -- Base -deriving instance Eq (Operator a) -deriving instance Eq (Name a) -deriving instance Eq (SimpleName a) -deriving instance Eq (UnqualName a) -deriving instance Eq (StringNode a) -deriving instance Eq (DataOrNewtypeKeyword a) -deriving instance Eq (DoKind a) -deriving instance Eq (TypeKeyword a) -deriving instance Eq (OverlapPragma a) -deriving instance Eq (CallConv a) -deriving instance Eq (ArrowAppl a) -deriving instance Eq (Safety a) -deriving instance Eq (ConlikeAnnot a) -deriving instance Eq (Assoc a) -deriving instance Eq (Precedence a) -deriving instance Eq (LineNumber a) -deriving instance Eq (PhaseControl a) -deriving instance Eq (PhaseNumber a) -deriving instance Eq (PhaseInvert a)+deriving instance Eq (Operator dom stage) +deriving instance Eq (Name dom stage) +deriving instance Eq (SimpleName dom stage) +deriving instance Eq (ModuleName dom stage) +deriving instance Eq (UnqualName dom stage) +deriving instance Eq (StringNode dom stage) +deriving instance Eq (DataOrNewtypeKeyword dom stage) +deriving instance Eq (DoKind dom stage) +deriving instance Eq (TypeKeyword dom stage) +deriving instance Eq (OverlapPragma dom stage) +deriving instance Eq (CallConv dom stage) +deriving instance Eq (ArrowAppl dom stage) +deriving instance Eq (Safety dom stage) +deriving instance Eq (ConlikeAnnot dom stage) +deriving instance Eq (Assoc dom stage) +deriving instance Eq (Precedence dom stage) +deriving instance Eq (LineNumber dom stage) +deriving instance Eq (PhaseControl dom stage) +deriving instance Eq (PhaseNumber dom stage) +deriving instance Eq (PhaseInvert dom stage)
Language/Haskell/Tools/AST/Instances/Generic.hs view
@@ -18,117 +18,118 @@ import Language.Haskell.Tools.AST.Ann -- Annotations -deriving instance (Generic a, Generic (e a)) => Generic (Ann e a) -deriving instance (Generic a, Generic (e a)) => Generic (AnnMaybe e a) -deriving instance (Generic a, Generic (e a)) => Generic (AnnList e a) +deriving instance (Domain dom, SourceInfo stage, Generic (e dom stage)) => Generic (Ann e dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (e dom stage)) => Generic (AnnMaybe e dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (e dom stage)) => Generic (AnnList e dom stage) -- Modules -deriving instance Generic a => Generic (Module a) -deriving instance Generic a => Generic (ModuleHead a) -deriving instance Generic a => Generic (ExportSpecList a) -deriving instance Generic a => Generic (ExportSpec a) -deriving instance Generic a => Generic (IESpec a) -deriving instance Generic a => Generic (SubSpec a) -deriving instance Generic a => Generic (ModulePragma a) -deriving instance Generic a => Generic (FilePragma a) -deriving instance Generic a => Generic (ImportDecl a) -deriving instance Generic a => Generic (ImportSpec a) -deriving instance Generic a => Generic (ImportQualified a) -deriving instance Generic a => Generic (ImportSource a) -deriving instance Generic a => Generic (ImportSafe a) -deriving instance Generic a => Generic (TypeNamespace a) -deriving instance Generic a => Generic (ImportRenaming a) +deriving instance (Domain dom, SourceInfo stage) => Generic (Module dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ModuleHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ExportSpecList dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ExportSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (IESpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (SubSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ModulePragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FilePragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportSpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportQualified dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportSource dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportSafe dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeNamespace dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ImportRenaming dom stage) -- Declarations -deriving instance Generic a => Generic (Decl a) -deriving instance Generic a => Generic (ClassBody a) -deriving instance Generic a => Generic (ClassElement a) -deriving instance Generic a => Generic (DeclHead a) -deriving instance Generic a => Generic (InstBody a) -deriving instance Generic a => Generic (InstBodyDecl a) -deriving instance Generic a => Generic (GadtConDecl a) -deriving instance Generic a => Generic (GadtConType a) -deriving instance Generic a => Generic (GadtField a) -deriving instance Generic a => Generic (FunDeps a) -deriving instance Generic a => Generic (FunDep a) -deriving instance Generic a => Generic (ConDecl a) -deriving instance Generic a => Generic (FieldDecl a) -deriving instance Generic a => Generic (Deriving a) -deriving instance Generic a => Generic (InstanceRule a) -deriving instance Generic a => Generic (InstanceHead a) -deriving instance Generic a => Generic (TypeEqn a) -deriving instance Generic a => Generic (KindConstraint a) -deriving instance Generic a => Generic (TyVar a) -deriving instance Generic a => Generic (Type a) -deriving instance Generic a => Generic (Kind a) -deriving instance Generic a => Generic (Context a) -deriving instance Generic a => Generic (Assertion a) -deriving instance Generic a => Generic (Expr a) -deriving instance (Generic a, Generic (expr a)) => Generic (Stmt' expr a) -deriving instance Generic a => Generic (CompStmt a) -deriving instance Generic a => Generic (ValueBind a) -deriving instance Generic a => Generic (Pattern a) -deriving instance Generic a => Generic (PatternField a) -deriving instance Generic a => Generic (Splice a) -deriving instance Generic a => Generic (QQString a) -deriving instance Generic a => Generic (Match a) -deriving instance (Generic a, Generic (expr a)) => Generic (Alt' expr a) -deriving instance Generic a => Generic (Rhs a) -deriving instance Generic a => Generic (GuardedRhs a) -deriving instance Generic a => Generic (FieldUpdate a) -deriving instance Generic a => Generic (Bracket a) -deriving instance Generic a => Generic (TopLevelPragma a) -deriving instance Generic a => Generic (Rule a) -deriving instance Generic a => Generic (AnnotationSubject a) -deriving instance Generic a => Generic (MinimalFormula a) -deriving instance Generic a => Generic (ExprPragma a) -deriving instance Generic a => Generic (SourceRange a) -deriving instance Generic a => Generic (Number a) -deriving instance Generic a => Generic (QuasiQuote a) -deriving instance Generic a => Generic (RhsGuard a) -deriving instance Generic a => Generic (LocalBind a) -deriving instance Generic a => Generic (LocalBinds a) -deriving instance Generic a => Generic (FixitySignature a) -deriving instance Generic a => Generic (TypeSignature a) -deriving instance Generic a => Generic (ListCompBody a) -deriving instance Generic a => Generic (TupSecElem a) -deriving instance Generic a => Generic (TypeFamily a) -deriving instance Generic a => Generic (TypeFamilySpec a) -deriving instance Generic a => Generic (InjectivityAnn a) -deriving instance (Generic a, Generic (expr a)) => Generic (CaseRhs' expr a) -deriving instance (Generic a, Generic (expr a)) => Generic (GuardedCaseRhs' expr a) -deriving instance Generic a => Generic (PatternSynonym a) -deriving instance Generic a => Generic (PatSynRhs a) -deriving instance Generic a => Generic (PatSynLhs a) -deriving instance Generic a => Generic (PatSynWhere a) -deriving instance Generic a => Generic (PatternTypeSignature a) -deriving instance Generic a => Generic (Role a) -deriving instance Generic a => Generic (Cmd a) -deriving instance Generic a => Generic (LanguageExtension a) -deriving instance Generic a => Generic (MatchLhs a) +deriving instance (Domain dom, SourceInfo stage) => Generic (Decl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ClassBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ClassElement dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (DeclHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (InstBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (InstBodyDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (GadtConDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (GadtConType dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (GadtField dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FunDeps dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FunDep dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ConDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FieldDecl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Deriving dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (InstanceRule dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (InstanceHead dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeEqn dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (KindConstraint dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TyVar dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Type dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Kind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Context dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Assertion dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Expr dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (expr dom stage)) => Generic (Stmt' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (CompStmt dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ValueBind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Pattern dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatternField dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Splice dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (QQString dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Match dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (expr dom stage)) => Generic (Alt' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Rhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (GuardedRhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FieldUpdate dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Bracket dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TopLevelPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Rule dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (AnnotationSubject dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (MinimalFormula dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ExprPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (SourceRange dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Number dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (QuasiQuote dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (RhsGuard dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (LocalBind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (LocalBinds dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (FixitySignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeSignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ListCompBody dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TupSecElem dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeFamily dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeFamilySpec dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (InjectivityAnn dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (expr dom stage)) => Generic (CaseRhs' expr dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (expr dom stage)) => Generic (GuardedCaseRhs' expr dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatternSynonym dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatSynRhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatSynLhs dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatSynWhere dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PatternTypeSignature dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Role dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Cmd dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (LanguageExtension dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (MatchLhs dom stage) -- Literal -deriving instance Generic a => Generic (Literal a) -deriving instance (Generic a, Generic (k a)) => Generic (Promoted k a) +deriving instance (Domain dom, SourceInfo stage) => Generic (Literal dom stage) +deriving instance (Domain dom, SourceInfo stage, Generic (k dom stage)) => Generic (Promoted k dom stage) -- Base -deriving instance Generic a => Generic (Operator a) -deriving instance Generic a => Generic (Name a) -deriving instance Generic a => Generic (SimpleName a) -deriving instance Generic a => Generic (UnqualName a) -deriving instance Generic a => Generic (StringNode a) -deriving instance Generic a => Generic (DataOrNewtypeKeyword a) -deriving instance Generic a => Generic (DoKind a) -deriving instance Generic a => Generic (TypeKeyword a) -deriving instance Generic a => Generic (OverlapPragma a) -deriving instance Generic a => Generic (CallConv a) -deriving instance Generic a => Generic (ArrowAppl a) -deriving instance Generic a => Generic (Safety a) -deriving instance Generic a => Generic (ConlikeAnnot a) -deriving instance Generic a => Generic (Assoc a) -deriving instance Generic a => Generic (Precedence a) -deriving instance Generic a => Generic (LineNumber a) -deriving instance Generic a => Generic (PhaseControl a) -deriving instance Generic a => Generic (PhaseNumber a) -deriving instance Generic a => Generic (PhaseInvert a)+deriving instance (Domain dom, SourceInfo stage) => Generic (Operator dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Name dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (SimpleName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ModuleName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (UnqualName dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (StringNode dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (DataOrNewtypeKeyword dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (DoKind dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (TypeKeyword dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (OverlapPragma dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (CallConv dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ArrowAppl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Safety dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (ConlikeAnnot dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Assoc dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (Precedence dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (LineNumber dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PhaseControl dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PhaseNumber dom stage) +deriving instance (Domain dom, SourceInfo stage) => Generic (PhaseInvert dom stage)
+ Language/Haskell/Tools/AST/Instances/SemanticTraversal.hs view
@@ -0,0 +1,132 @@+-- | Generating instances for traversing the semantic information of the Haskell Representation +{-# LANGUAGE TemplateHaskell + #-} +module Language.Haskell.Tools.AST.Instances.SemanticTraversal where + +import Language.Haskell.Tools.AST.TH.SemanticTraversal +import Control.Applicative + +import Language.Haskell.Tools.AST.Modules +import Language.Haskell.Tools.AST.TH +import Language.Haskell.Tools.AST.Decls +import Language.Haskell.Tools.AST.Binds +import Language.Haskell.Tools.AST.Exprs +import Language.Haskell.Tools.AST.Stmts +import Language.Haskell.Tools.AST.Patterns +import Language.Haskell.Tools.AST.Types +import Language.Haskell.Tools.AST.Kinds +import Language.Haskell.Tools.AST.Literals +import Language.Haskell.Tools.AST.Base +import Language.Haskell.Tools.AST.Ann + + +-- Modules +deriveSemanticTraversal ''Module +deriveSemanticTraversal ''ModuleHead +deriveSemanticTraversal ''ExportSpecList +deriveSemanticTraversal ''ExportSpec +deriveSemanticTraversal ''IESpec +deriveSemanticTraversal ''SubSpec +deriveSemanticTraversal ''ModulePragma +deriveSemanticTraversal ''FilePragma +deriveSemanticTraversal ''ImportDecl +deriveSemanticTraversal ''ImportSpec +deriveSemanticTraversal ''ImportQualified +deriveSemanticTraversal ''ImportSource +deriveSemanticTraversal ''ImportSafe +deriveSemanticTraversal ''TypeNamespace +deriveSemanticTraversal ''ImportRenaming + +-- Declarations +deriveSemanticTraversal ''Decl +deriveSemanticTraversal ''ClassBody +deriveSemanticTraversal ''ClassElement +deriveSemanticTraversal ''DeclHead +deriveSemanticTraversal ''InstBody +deriveSemanticTraversal ''InstBodyDecl +deriveSemanticTraversal ''GadtConDecl +deriveSemanticTraversal ''GadtConType +deriveSemanticTraversal ''GadtField +deriveSemanticTraversal ''FunDeps +deriveSemanticTraversal ''FunDep +deriveSemanticTraversal ''ConDecl +deriveSemanticTraversal ''FieldDecl +deriveSemanticTraversal ''Deriving +deriveSemanticTraversal ''InstanceRule +deriveSemanticTraversal ''InstanceHead +deriveSemanticTraversal ''TypeEqn +deriveSemanticTraversal ''KindConstraint +deriveSemanticTraversal ''TyVar +deriveSemanticTraversal ''Type +deriveSemanticTraversal ''Kind +deriveSemanticTraversal ''Context +deriveSemanticTraversal ''Assertion +deriveSemanticTraversal ''Expr +deriveSemanticTraversal ''CompStmt +deriveSemanticTraversal ''ValueBind +deriveSemanticTraversal ''Pattern +deriveSemanticTraversal ''PatternField +deriveSemanticTraversal ''Splice +deriveSemanticTraversal ''QQString +deriveSemanticTraversal ''Match +deriveSemanticTraversal ''Rhs +deriveSemanticTraversal ''GuardedRhs +deriveSemanticTraversal ''FieldUpdate +deriveSemanticTraversal ''Bracket +deriveSemanticTraversal ''TopLevelPragma +deriveSemanticTraversal ''Rule +deriveSemanticTraversal ''AnnotationSubject +deriveSemanticTraversal ''MinimalFormula +deriveSemanticTraversal ''ExprPragma +deriveSemanticTraversal ''SourceRange +deriveSemanticTraversal ''Number +deriveSemanticTraversal ''QuasiQuote +deriveSemanticTraversal ''RhsGuard +deriveSemanticTraversal ''LocalBind +deriveSemanticTraversal ''LocalBinds +deriveSemanticTraversal ''FixitySignature +deriveSemanticTraversal ''TypeSignature +deriveSemanticTraversal ''ListCompBody +deriveSemanticTraversal ''TupSecElem +deriveSemanticTraversal ''TypeFamily +deriveSemanticTraversal ''TypeFamilySpec +deriveSemanticTraversal ''InjectivityAnn +deriveSemanticTraversal ''PatternSynonym +deriveSemanticTraversal ''PatSynRhs +deriveSemanticTraversal ''PatSynLhs +deriveSemanticTraversal ''PatSynWhere +deriveSemanticTraversal ''PatternTypeSignature +deriveSemanticTraversal ''Role +deriveSemanticTraversal ''Cmd +deriveSemanticTraversal ''LanguageExtension +deriveSemanticTraversal ''MatchLhs +deriveSemanticTraversal ''Stmt' +deriveSemanticTraversal ''Alt' +deriveSemanticTraversal ''CaseRhs' +deriveSemanticTraversal ''GuardedCaseRhs' + +-- Literal +deriveSemanticTraversal ''Literal +deriveSemanticTraversal ''Promoted + +-- Base +deriveSemanticTraversal ''Operator +deriveSemanticTraversal ''Name +deriveSemanticTraversal ''SimpleName +deriveSemanticTraversal ''ModuleName +deriveSemanticTraversal ''UnqualName +deriveSemanticTraversal ''StringNode +deriveSemanticTraversal ''DataOrNewtypeKeyword +deriveSemanticTraversal ''DoKind +deriveSemanticTraversal ''TypeKeyword +deriveSemanticTraversal ''OverlapPragma +deriveSemanticTraversal ''CallConv +deriveSemanticTraversal ''ArrowAppl +deriveSemanticTraversal ''Safety +deriveSemanticTraversal ''ConlikeAnnot +deriveSemanticTraversal ''Assoc +deriveSemanticTraversal ''Precedence +deriveSemanticTraversal ''LineNumber +deriveSemanticTraversal ''PhaseControl +deriveSemanticTraversal ''PhaseNumber +deriveSemanticTraversal ''PhaseInvert
Language/Haskell/Tools/AST/Instances/Show.hs view
@@ -16,122 +16,123 @@ import Language.Haskell.Tools.AST.Ann -- Annotations -instance (Show (e a)) => Show (Ann e a) where +instance (Show (e dom stage)) => Show (Ann e dom stage) where show (Ann _ e) = show e -instance (Show (e a)) => Show (AnnMaybe e a) where +instance (Show (e dom stage)) => Show (AnnMaybe e dom stage) where show (AnnMaybe _ e) = show e -instance (Show (e a)) => Show (AnnList e a) where +instance (Show (e dom stage)) => Show (AnnList e dom stage) where show (AnnList _ e) = show e -- Modules -deriving instance Show (Module a) -deriving instance Show (ModuleHead a) -deriving instance Show (ExportSpecList a) -deriving instance Show (ExportSpec a) -deriving instance Show (IESpec a) -deriving instance Show (SubSpec a) -deriving instance Show (ModulePragma a) -deriving instance Show (FilePragma a) -deriving instance Show (ImportDecl a) -deriving instance Show (ImportSpec a) -deriving instance Show (ImportQualified a) -deriving instance Show (ImportSource a) -deriving instance Show (ImportSafe a) -deriving instance Show (TypeNamespace a) -deriving instance Show (ImportRenaming a) +deriving instance Show (Module dom stage) +deriving instance Show (ModuleHead dom stage) +deriving instance Show (ExportSpecList dom stage) +deriving instance Show (ExportSpec dom stage) +deriving instance Show (IESpec dom stage) +deriving instance Show (SubSpec dom stage) +deriving instance Show (ModulePragma dom stage) +deriving instance Show (FilePragma dom stage) +deriving instance Show (ImportDecl dom stage) +deriving instance Show (ImportSpec dom stage) +deriving instance Show (ImportQualified dom stage) +deriving instance Show (ImportSource dom stage) +deriving instance Show (ImportSafe dom stage) +deriving instance Show (TypeNamespace dom stage) +deriving instance Show (ImportRenaming dom stage) -- Declarations -deriving instance Show (Decl a) -deriving instance Show (ClassBody a) -deriving instance Show (ClassElement a) -deriving instance Show (DeclHead a) -deriving instance Show (InstBody a) -deriving instance Show (InstBodyDecl a) -deriving instance Show (GadtConDecl a) -deriving instance Show (GadtConType a) -deriving instance Show (GadtField a) -deriving instance Show (FunDeps a) -deriving instance Show (FunDep a) -deriving instance Show (ConDecl a) -deriving instance Show (FieldDecl a) -deriving instance Show (Deriving a) -deriving instance Show (InstanceRule a) -deriving instance Show (InstanceHead a) -deriving instance Show (TypeEqn a) -deriving instance Show (KindConstraint a) -deriving instance Show (TyVar a) -deriving instance Show (Type a) -deriving instance Show (Kind a) -deriving instance Show (Context a) -deriving instance Show (Assertion a) -deriving instance Show (Expr a) -deriving instance Show (expr a) => Show (Stmt' expr a) -deriving instance Show (CompStmt a) -deriving instance Show (ValueBind a) -deriving instance Show (Pattern a) -deriving instance Show (PatternField a) -deriving instance Show (Splice a) -deriving instance Show (QQString a) -deriving instance Show (Match a) -deriving instance Show (expr a) => Show (Alt' expr a) -deriving instance Show (Rhs a) -deriving instance Show (GuardedRhs a) -deriving instance Show (FieldUpdate a) -deriving instance Show (Bracket a) -deriving instance Show (TopLevelPragma a) -deriving instance Show (Rule a) -deriving instance Show (AnnotationSubject a) -deriving instance Show (MinimalFormula a) -deriving instance Show (ExprPragma a) -deriving instance Show (SourceRange a) -deriving instance Show (Number a) -deriving instance Show (QuasiQuote a) -deriving instance Show (RhsGuard a) -deriving instance Show (LocalBind a) -deriving instance Show (LocalBinds a) -deriving instance Show (FixitySignature a) -deriving instance Show (TypeSignature a) -deriving instance Show (ListCompBody a) -deriving instance Show (TupSecElem a) -deriving instance Show (TypeFamily a) -deriving instance Show (TypeFamilySpec a) -deriving instance Show (InjectivityAnn a) -deriving instance Show (expr a) => Show (CaseRhs' expr a) -deriving instance Show (expr a) => Show (GuardedCaseRhs' expr a) -deriving instance Show (PatternSynonym a) -deriving instance Show (PatSynRhs a) -deriving instance Show (PatSynLhs a) -deriving instance Show (PatSynWhere a) -deriving instance Show (PatternTypeSignature a) -deriving instance Show (Role a) -deriving instance Show (Cmd a) -deriving instance Show (LanguageExtension a) -deriving instance Show (MatchLhs a) +deriving instance Show (Decl dom stage) +deriving instance Show (ClassBody dom stage) +deriving instance Show (ClassElement dom stage) +deriving instance Show (DeclHead dom stage) +deriving instance Show (InstBody dom stage) +deriving instance Show (InstBodyDecl dom stage) +deriving instance Show (GadtConDecl dom stage) +deriving instance Show (GadtConType dom stage) +deriving instance Show (GadtField dom stage) +deriving instance Show (FunDeps dom stage) +deriving instance Show (FunDep dom stage) +deriving instance Show (ConDecl dom stage) +deriving instance Show (FieldDecl dom stage) +deriving instance Show (Deriving dom stage) +deriving instance Show (InstanceRule dom stage) +deriving instance Show (InstanceHead dom stage) +deriving instance Show (TypeEqn dom stage) +deriving instance Show (KindConstraint dom stage) +deriving instance Show (TyVar dom stage) +deriving instance Show (Type dom stage) +deriving instance Show (Kind dom stage) +deriving instance Show (Context dom stage) +deriving instance Show (Assertion dom stage) +deriving instance Show (Expr dom stage) +deriving instance Show (expr dom stage) => Show (Stmt' expr dom stage) +deriving instance Show (CompStmt dom stage) +deriving instance Show (ValueBind dom stage) +deriving instance Show (Pattern dom stage) +deriving instance Show (PatternField dom stage) +deriving instance Show (Splice dom stage) +deriving instance Show (QQString dom stage) +deriving instance Show (Match dom stage) +deriving instance Show (expr dom stage) => Show (Alt' expr dom stage) +deriving instance Show (Rhs dom stage) +deriving instance Show (GuardedRhs dom stage) +deriving instance Show (FieldUpdate dom stage) +deriving instance Show (Bracket dom stage) +deriving instance Show (TopLevelPragma dom stage) +deriving instance Show (Rule dom stage) +deriving instance Show (AnnotationSubject dom stage) +deriving instance Show (MinimalFormula dom stage) +deriving instance Show (ExprPragma dom stage) +deriving instance Show (SourceRange dom stage) +deriving instance Show (Number dom stage) +deriving instance Show (QuasiQuote dom stage) +deriving instance Show (RhsGuard dom stage) +deriving instance Show (LocalBind dom stage) +deriving instance Show (LocalBinds dom stage) +deriving instance Show (FixitySignature dom stage) +deriving instance Show (TypeSignature dom stage) +deriving instance Show (ListCompBody dom stage) +deriving instance Show (TupSecElem dom stage) +deriving instance Show (TypeFamily dom stage) +deriving instance Show (TypeFamilySpec dom stage) +deriving instance Show (InjectivityAnn dom stage) +deriving instance Show (expr dom stage) => Show (CaseRhs' expr dom stage) +deriving instance Show (expr dom stage) => Show (GuardedCaseRhs' expr dom stage) +deriving instance Show (PatternSynonym dom stage) +deriving instance Show (PatSynRhs dom stage) +deriving instance Show (PatSynLhs dom stage) +deriving instance Show (PatSynWhere dom stage) +deriving instance Show (PatternTypeSignature dom stage) +deriving instance Show (Role dom stage) +deriving instance Show (Cmd dom stage) +deriving instance Show (LanguageExtension dom stage) +deriving instance Show (MatchLhs dom stage) -- Literal -deriving instance Show (Literal a) -deriving instance Show (k a) => Show (Promoted k a) +deriving instance Show (Literal dom stage) +deriving instance Show (k dom stage) => Show (Promoted k dom stage) -- Base -deriving instance Show (Operator a) -deriving instance Show (Name a) -deriving instance Show (SimpleName a) -deriving instance Show (UnqualName a) -deriving instance Show (StringNode a) -deriving instance Show (DataOrNewtypeKeyword a) -deriving instance Show (DoKind a) -deriving instance Show (TypeKeyword a) -deriving instance Show (OverlapPragma a) -deriving instance Show (CallConv a) -deriving instance Show (ArrowAppl a) -deriving instance Show (Safety a) -deriving instance Show (ConlikeAnnot a) -deriving instance Show (Assoc a) -deriving instance Show (Precedence a) -deriving instance Show (LineNumber a) -deriving instance Show (PhaseControl a) -deriving instance Show (PhaseNumber a) -deriving instance Show (PhaseInvert a)+deriving instance Show (Operator dom stage) +deriving instance Show (Name dom stage) +deriving instance Show (SimpleName dom stage) +deriving instance Show (ModuleName dom stage) +deriving instance Show (UnqualName dom stage) +deriving instance Show (StringNode dom stage) +deriving instance Show (DataOrNewtypeKeyword dom stage) +deriving instance Show (DoKind dom stage) +deriving instance Show (TypeKeyword dom stage) +deriving instance Show (OverlapPragma dom stage) +deriving instance Show (CallConv dom stage) +deriving instance Show (ArrowAppl dom stage) +deriving instance Show (Safety dom stage) +deriving instance Show (ConlikeAnnot dom stage) +deriving instance Show (Assoc dom stage) +deriving instance Show (Precedence dom stage) +deriving instance Show (LineNumber dom stage) +deriving instance Show (PhaseControl dom stage) +deriving instance Show (PhaseNumber dom stage) +deriving instance Show (PhaseInvert dom stage)
+ Language/Haskell/Tools/AST/Instances/SourceInfoTraversal.hs view
@@ -0,0 +1,132 @@+-- | Generating instances for traversing the semantic information of the Haskell Representation +{-# LANGUAGE TemplateHaskell + #-} +module Language.Haskell.Tools.AST.Instances.SourceInfoTraversal where + +import Language.Haskell.Tools.AST.TH.SourceInfoTraversal +import Control.Applicative + +import Language.Haskell.Tools.AST.Modules +import Language.Haskell.Tools.AST.TH +import Language.Haskell.Tools.AST.Decls +import Language.Haskell.Tools.AST.Binds +import Language.Haskell.Tools.AST.Exprs +import Language.Haskell.Tools.AST.Stmts +import Language.Haskell.Tools.AST.Patterns +import Language.Haskell.Tools.AST.Types +import Language.Haskell.Tools.AST.Kinds +import Language.Haskell.Tools.AST.Literals +import Language.Haskell.Tools.AST.Base +import Language.Haskell.Tools.AST.Ann + + +-- Modules +deriveSourceInfoTraversal ''Module +deriveSourceInfoTraversal ''ModuleHead +deriveSourceInfoTraversal ''ExportSpecList +deriveSourceInfoTraversal ''ExportSpec +deriveSourceInfoTraversal ''IESpec +deriveSourceInfoTraversal ''SubSpec +deriveSourceInfoTraversal ''ModulePragma +deriveSourceInfoTraversal ''FilePragma +deriveSourceInfoTraversal ''ImportDecl +deriveSourceInfoTraversal ''ImportSpec +deriveSourceInfoTraversal ''ImportQualified +deriveSourceInfoTraversal ''ImportSource +deriveSourceInfoTraversal ''ImportSafe +deriveSourceInfoTraversal ''TypeNamespace +deriveSourceInfoTraversal ''ImportRenaming + +-- Declarations +deriveSourceInfoTraversal ''Decl +deriveSourceInfoTraversal ''ClassBody +deriveSourceInfoTraversal ''ClassElement +deriveSourceInfoTraversal ''DeclHead +deriveSourceInfoTraversal ''InstBody +deriveSourceInfoTraversal ''InstBodyDecl +deriveSourceInfoTraversal ''GadtConDecl +deriveSourceInfoTraversal ''GadtConType +deriveSourceInfoTraversal ''GadtField +deriveSourceInfoTraversal ''FunDeps +deriveSourceInfoTraversal ''FunDep +deriveSourceInfoTraversal ''ConDecl +deriveSourceInfoTraversal ''FieldDecl +deriveSourceInfoTraversal ''Deriving +deriveSourceInfoTraversal ''InstanceRule +deriveSourceInfoTraversal ''InstanceHead +deriveSourceInfoTraversal ''TypeEqn +deriveSourceInfoTraversal ''KindConstraint +deriveSourceInfoTraversal ''TyVar +deriveSourceInfoTraversal ''Type +deriveSourceInfoTraversal ''Kind +deriveSourceInfoTraversal ''Context +deriveSourceInfoTraversal ''Assertion +deriveSourceInfoTraversal ''Expr +deriveSourceInfoTraversal ''CompStmt +deriveSourceInfoTraversal ''ValueBind +deriveSourceInfoTraversal ''Pattern +deriveSourceInfoTraversal ''PatternField +deriveSourceInfoTraversal ''Splice +deriveSourceInfoTraversal ''QQString +deriveSourceInfoTraversal ''Match +deriveSourceInfoTraversal ''Rhs +deriveSourceInfoTraversal ''GuardedRhs +deriveSourceInfoTraversal ''FieldUpdate +deriveSourceInfoTraversal ''Bracket +deriveSourceInfoTraversal ''TopLevelPragma +deriveSourceInfoTraversal ''Rule +deriveSourceInfoTraversal ''AnnotationSubject +deriveSourceInfoTraversal ''MinimalFormula +deriveSourceInfoTraversal ''ExprPragma +deriveSourceInfoTraversal ''SourceRange +deriveSourceInfoTraversal ''Number +deriveSourceInfoTraversal ''QuasiQuote +deriveSourceInfoTraversal ''RhsGuard +deriveSourceInfoTraversal ''LocalBind +deriveSourceInfoTraversal ''LocalBinds +deriveSourceInfoTraversal ''FixitySignature +deriveSourceInfoTraversal ''TypeSignature +deriveSourceInfoTraversal ''ListCompBody +deriveSourceInfoTraversal ''TupSecElem +deriveSourceInfoTraversal ''TypeFamily +deriveSourceInfoTraversal ''TypeFamilySpec +deriveSourceInfoTraversal ''InjectivityAnn +deriveSourceInfoTraversal ''PatternSynonym +deriveSourceInfoTraversal ''PatSynRhs +deriveSourceInfoTraversal ''PatSynLhs +deriveSourceInfoTraversal ''PatSynWhere +deriveSourceInfoTraversal ''PatternTypeSignature +deriveSourceInfoTraversal ''Role +deriveSourceInfoTraversal ''Cmd +deriveSourceInfoTraversal ''LanguageExtension +deriveSourceInfoTraversal ''MatchLhs +deriveSourceInfoTraversal ''Stmt' +deriveSourceInfoTraversal ''Alt' +deriveSourceInfoTraversal ''CaseRhs' +deriveSourceInfoTraversal ''GuardedCaseRhs' + +-- Literal +deriveSourceInfoTraversal ''Literal +deriveSourceInfoTraversal ''Promoted + +-- Base +deriveSourceInfoTraversal ''Operator +deriveSourceInfoTraversal ''Name +deriveSourceInfoTraversal ''SimpleName +deriveSourceInfoTraversal ''ModuleName +deriveSourceInfoTraversal ''UnqualName +deriveSourceInfoTraversal ''StringNode +deriveSourceInfoTraversal ''DataOrNewtypeKeyword +deriveSourceInfoTraversal ''DoKind +deriveSourceInfoTraversal ''TypeKeyword +deriveSourceInfoTraversal ''OverlapPragma +deriveSourceInfoTraversal ''CallConv +deriveSourceInfoTraversal ''ArrowAppl +deriveSourceInfoTraversal ''Safety +deriveSourceInfoTraversal ''ConlikeAnnot +deriveSourceInfoTraversal ''Assoc +deriveSourceInfoTraversal ''Precedence +deriveSourceInfoTraversal ''LineNumber +deriveSourceInfoTraversal ''PhaseControl +deriveSourceInfoTraversal ''PhaseNumber +deriveSourceInfoTraversal ''PhaseInvert
− Language/Haskell/Tools/AST/Instances/StructuralTraversal.hs
@@ -1,183 +0,0 @@--- | Generating StructuralTraversal instances for Haskell Representation -{-# LANGUAGE FlexibleContexts, TemplateHaskell #-} -module Language.Haskell.Tools.AST.Instances.StructuralTraversal where - -import Control.Applicative -import Data.StructuralTraversal - -import Language.Haskell.Tools.AST.Modules -import Language.Haskell.Tools.AST.TH -import Language.Haskell.Tools.AST.Decls -import Language.Haskell.Tools.AST.Binds -import Language.Haskell.Tools.AST.Exprs -import Language.Haskell.Tools.AST.Stmts -import Language.Haskell.Tools.AST.Patterns -import Language.Haskell.Tools.AST.Types -import Language.Haskell.Tools.AST.Kinds -import Language.Haskell.Tools.AST.Literals -import Language.Haskell.Tools.AST.Base -import Language.Haskell.Tools.AST.Ann - --- Annotations -instance StructuralTraversable elem => StructuralTraversable (Ann elem) where - traverseUp desc asc f (Ann ann e) = flip Ann <$> (desc *> traverseUp desc asc f e <* asc) <*> f ann - traverseDown desc asc f (Ann ann e) = Ann <$> f ann <*> (desc *> traverseDown desc asc f e <* asc) - -instance StructuralTraversable elem => StructuralTraversable (AnnMaybe elem) where - traverseUp desc asc f (AnnMaybe a (Just annotated)) - = flip AnnMaybe <$> (Just <$> (desc *> traverseUp desc asc f annotated <* asc)) <*> f a - traverseUp desc asc f (AnnMaybe a Nothing) = AnnMaybe <$> f a <*> pure Nothing - - traverseDown desc asc f (AnnMaybe a (Just annotated)) - = AnnMaybe <$> f a <*> (Just <$> (desc *> traverseDown desc asc f annotated <* asc)) - traverseDown desc asc f (AnnMaybe a Nothing) = AnnMaybe <$> f a <*> pure Nothing - -instance StructuralTraversable elem => StructuralTraversable (AnnList elem) where - traverseUp desc asc f (AnnList a ls) - = flip AnnList <$> sequenceA (map (\e -> desc *> traverseUp desc asc f e <* asc) ls) <*> f a - traverseDown desc asc f (AnnList a ls) - = AnnList <$> f a <*> sequenceA (map (\e -> desc *> traverseDown desc asc f e <* asc) ls) - --- Modules -deriveStructTrav ''Module -deriveStructTrav ''ModuleHead -deriveStructTrav ''ExportSpecList -deriveStructTrav ''ExportSpec -deriveStructTrav ''IESpec -deriveStructTrav ''SubSpec -deriveStructTrav ''ModulePragma -deriveStructTrav ''FilePragma -deriveStructTrav ''ImportDecl -deriveStructTrav ''ImportSpec -deriveStructTrav ''ImportQualified -deriveStructTrav ''ImportSource -deriveStructTrav ''ImportSafe -deriveStructTrav ''TypeNamespace -deriveStructTrav ''ImportRenaming - --- Declarations -deriveStructTrav ''Decl -deriveStructTrav ''ClassBody -deriveStructTrav ''ClassElement -deriveStructTrav ''DeclHead -deriveStructTrav ''InstBody -deriveStructTrav ''InstBodyDecl -deriveStructTrav ''GadtConDecl -deriveStructTrav ''GadtConType -deriveStructTrav ''GadtField -deriveStructTrav ''FunDeps -deriveStructTrav ''FunDep -deriveStructTrav ''ConDecl -deriveStructTrav ''FieldDecl -deriveStructTrav ''Deriving -deriveStructTrav ''InstanceRule -deriveStructTrav ''InstanceHead -deriveStructTrav ''TypeEqn -deriveStructTrav ''KindConstraint -deriveStructTrav ''TyVar -deriveStructTrav ''Type -deriveStructTrav ''Kind -deriveStructTrav ''Context -deriveStructTrav ''Assertion -deriveStructTrav ''Expr -deriveStructTrav ''CompStmt -deriveStructTrav ''ValueBind -deriveStructTrav ''Pattern -deriveStructTrav ''PatternField -deriveStructTrav ''Splice -deriveStructTrav ''QQString -deriveStructTrav ''Match -deriveStructTrav ''Rhs -deriveStructTrav ''GuardedRhs -deriveStructTrav ''FieldUpdate -deriveStructTrav ''Bracket -deriveStructTrav ''TopLevelPragma -deriveStructTrav ''Rule -deriveStructTrav ''AnnotationSubject -deriveStructTrav ''MinimalFormula -deriveStructTrav ''ExprPragma -deriveStructTrav ''SourceRange -deriveStructTrav ''Number -deriveStructTrav ''QuasiQuote -deriveStructTrav ''RhsGuard -deriveStructTrav ''LocalBind -deriveStructTrav ''LocalBinds -deriveStructTrav ''FixitySignature -deriveStructTrav ''TypeSignature -deriveStructTrav ''ListCompBody -deriveStructTrav ''TupSecElem -deriveStructTrav ''TypeFamily -deriveStructTrav ''TypeFamilySpec -deriveStructTrav ''InjectivityAnn -deriveStructTrav ''PatternSynonym -deriveStructTrav ''PatSynRhs -deriveStructTrav ''PatSynLhs -deriveStructTrav ''PatSynWhere -deriveStructTrav ''PatternTypeSignature -deriveStructTrav ''Role -deriveStructTrav ''Cmd -deriveStructTrav ''LanguageExtension -deriveStructTrav ''MatchLhs - - --- FIXME: structural traversal deriving does not respect the instance requirements for type like Ann expr a -instance StructuralTraversable expr => StructuralTraversable (Stmt' expr) where - traverseUp desc asc f (BindStmt p e) = BindStmt <$> traverseUp desc asc f p <*> traverseUp desc asc f e - traverseUp desc asc f (ExprStmt e) = ExprStmt <$> traverseUp desc asc f e - traverseUp desc asc f (LetStmt bs) = LetStmt <$> traverseUp desc asc f bs - traverseUp desc asc f (RecStmt stmts) = RecStmt <$> traverseUp desc asc f stmts - traverseDown desc asc f (BindStmt p e) = BindStmt <$> traverseDown desc asc f p <*> traverseDown desc asc f e - traverseDown desc asc f (ExprStmt e) = ExprStmt <$> traverseDown desc asc f e - traverseDown desc asc f (LetStmt bs) = LetStmt <$> traverseDown desc asc f bs - traverseDown desc asc f (RecStmt stmts) = RecStmt <$> traverseDown desc asc f stmts - -instance StructuralTraversable expr => StructuralTraversable (Alt' expr) where - traverseUp desc asc f (Alt p r b) = Alt <$> traverseUp desc asc f p <*> traverseUp desc asc f r <*> traverseUp desc asc f b - traverseDown desc asc f (Alt p r b) = Alt <$> traverseDown desc asc f p <*> traverseDown desc asc f r <*> traverseDown desc asc f b - --- FIXME: structural traversal deriving does not respect the instance requirements for type like Ann expr a -instance StructuralTraversable expr => StructuralTraversable (CaseRhs' expr) where - traverseUp desc asc f (UnguardedCaseRhs e) = UnguardedCaseRhs <$> traverseUp desc asc f e - traverseUp desc asc f (GuardedCaseRhss g) = GuardedCaseRhss <$> traverseUp desc asc f g - traverseDown desc asc f (UnguardedCaseRhs e) = UnguardedCaseRhs <$> traverseDown desc asc f e - traverseDown desc asc f (GuardedCaseRhss g) = GuardedCaseRhss <$> traverseDown desc asc f g - -instance StructuralTraversable expr => StructuralTraversable (GuardedCaseRhs' expr) where - traverseUp desc asc f (GuardedCaseRhs g e) = GuardedCaseRhs <$> traverseUp desc asc f g <*> traverseUp desc asc f e - traverseDown desc asc f (GuardedCaseRhs g e) = GuardedCaseRhs <$> traverseDown desc asc f g <*> traverseDown desc asc f e - --- Literal -deriveStructTrav ''Literal - -instance StructuralTraversable k => StructuralTraversable (Promoted k) where - traverseUp desc asc f (PromotedInt i) = pure $ PromotedInt i - traverseUp desc asc f (PromotedString str) = pure $ PromotedString str - traverseUp desc asc f (PromotedCon name) = PromotedCon <$> traverseUp desc asc f name - traverseUp desc asc f (PromotedList elems) = PromotedList <$> traverseUp desc asc f elems - traverseUp desc asc f (PromotedTuple elems) = PromotedTuple <$> traverseUp desc asc f elems - traverseDown desc asc f (PromotedInt i) = pure $ PromotedInt i - traverseDown desc asc f (PromotedString str) = pure $ PromotedString str - traverseDown desc asc f (PromotedCon name) = PromotedCon <$> traverseDown desc asc f name - traverseDown desc asc f (PromotedList elems) = PromotedList <$> traverseDown desc asc f elems - traverseDown desc asc f (PromotedTuple elems) = PromotedTuple <$> traverseDown desc asc f elems - --- Base -deriveStructTrav ''Operator -deriveStructTrav ''Name -deriveStructTrav ''SimpleName -deriveStructTrav ''UnqualName -deriveStructTrav ''StringNode -deriveStructTrav ''DataOrNewtypeKeyword -deriveStructTrav ''DoKind -deriveStructTrav ''TypeKeyword -deriveStructTrav ''OverlapPragma -deriveStructTrav ''CallConv -deriveStructTrav ''ArrowAppl -deriveStructTrav ''Safety -deriveStructTrav ''ConlikeAnnot -deriveStructTrav ''Assoc -deriveStructTrav ''Precedence -deriveStructTrav ''LineNumber -deriveStructTrav ''PhaseControl -deriveStructTrav ''PhaseNumber -deriveStructTrav ''PhaseInvert
Language/Haskell/Tools/AST/Kinds.hs view
@@ -6,33 +6,33 @@ import Language.Haskell.Tools.AST.Base -- | Kind constraint (@ :: * -> * @) -data KindConstraint a - = KindConstraint { _kindConstr :: Ann Kind a +data KindConstraint dom stage + = KindConstraint { _kindConstr :: Ann Kind dom stage } -- | Haskell kinds -data Kind a +data Kind dom stage = KindStar -- ^ @*@, the kind of types | KindUnbox -- ^ @#@, the kind of unboxed types - | KindFn { _kindLeft :: Ann Kind a - , _kindRight :: Ann Kind a + | KindFn { _kindLeft :: Ann Kind dom stage + , _kindRight :: Ann Kind dom stage } -- ^ @->@, the kind of type constructor - | KindParen { _kindParen :: Ann Kind a + | KindParen { _kindParen :: Ann Kind dom stage } -- ^ A parenthesised kind - | KindVar { _kindVar :: Ann Name a + | KindVar { _kindVar :: Ann Name dom stage } -- ^ kind variable (using @PolyKinds@ extension) - | KindApp { _kindAppFun :: Ann Kind a - , _kindAppArg :: Ann Kind a + | KindApp { _kindAppFun :: Ann Kind dom stage + , _kindAppArg :: Ann Kind dom stage } -- ^ Kind application (@ k1 k2 @) - | KindList { _kindElem :: Ann Kind a + | KindList { _kindElem :: Ann Kind dom stage } -- ^ A list kind (@ [k] @) - | KindPromoted { _kindPromoted :: Ann (Promoted Kind) a + | KindPromoted { _kindPromoted :: Ann (Promoted Kind) dom stage } -- ^ A promoted kind (@ '(k1,k2,k3) @) -data Promoted t a +data Promoted t dom stage = PromotedInt { _promotedIntValue :: Integer } | PromotedString { _promotedStringValue :: String } - | PromotedCon { _promotedConName :: Ann Name a } - | PromotedList { _promotedElements :: AnnList t a } - | PromotedTuple { _promotedElements :: AnnList t a } + | PromotedCon { _promotedConName :: Ann Name dom stage } + | PromotedList { _promotedElements :: AnnList t dom stage } + | PromotedTuple { _promotedElements :: AnnList t dom stage } | PromotedUnit
Language/Haskell/Tools/AST/Literals.hs view
@@ -5,7 +5,7 @@ import Language.Haskell.Tools.AST.Base -- | Haskell literals -data Literal a +data Literal dom stage = CharLit { _charLitValue :: Char } -- ^ Character literal: @'c'@ | StringLit { _stringLitValue :: String
Language/Haskell/Tools/AST/Modules.hs view
@@ -7,88 +7,87 @@ import Language.Haskell.Tools.AST.Binds import Language.Haskell.Tools.AST.Decls -data Module a - = Module { _filePragmas :: AnnList FilePragma a - , _modHead :: AnnMaybe ModuleHead a - , _modImports :: AnnList ImportDecl a - , _modDecl :: AnnList Decl a +data Module dom stage + = Module { _filePragmas :: AnnList FilePragma dom stage + , _modHead :: AnnMaybe ModuleHead dom stage + , _modImports :: AnnList ImportDecl dom stage + , _modDecl :: AnnList Decl dom stage } -- | Module declaration with name and (optional) exports -data ModuleHead a - = ModuleHead { _mhName :: Ann SimpleName a - , _mhExports :: AnnMaybe ExportSpecList a - , _mhPragma :: AnnMaybe ModulePragma a +data ModuleHead dom stage + = ModuleHead { _mhName :: Ann ModuleName dom stage + , _mhExports :: AnnMaybe ExportSpecList dom stage + , _mhPragma :: AnnMaybe ModulePragma dom stage } -- | A list of export specifications surrounded by parentheses -data ExportSpecList a - = ExportSpecList { _espExports :: AnnList ExportSpec a } +data ExportSpecList dom stage + = ExportSpecList { _espExports :: AnnList ExportSpec dom stage } -- | Export specifier -data ExportSpec a - = DeclExport { _exportDecl :: Ann IESpec a +data ExportSpec dom stage + = DeclExport { _exportDecl :: Ann IESpec dom stage } -- ^ Export a name and related names - | ModuleExport { _exportModuleName :: Ann SimpleName a + | ModuleExport { _exportModuleName :: Ann ModuleName dom stage } -- ^ The export of an imported module (@ module A @) -- | Marks a name to be imported or exported with related names (subspecifier) -data IESpec a - = IESpec { _ieName :: Ann Name a - , _ieSubspec :: AnnMaybe SubSpec a +data IESpec dom stage + = IESpec { _ieName :: Ann Name dom stage + , _ieSubspec :: AnnMaybe SubSpec dom stage } -- | Marks how related names will be imported or exported with a given name -data SubSpec a +data SubSpec dom stage = SubSpecAll -- @(..)@: a class exported with all of its methods, or a datatype exported with all of its constructors. - | SubSpecList { _essList :: AnnList Name a } -- @(a,b,c)@: a class exported with some of its methods, or a datatype exported with some of its constructors. + | SubSpecList { _essList :: AnnList Name dom stage } -- @(a,b,c)@: a class exported with some of its methods, or a datatype exported with some of its constructors. -- | Pragmas that must be used before defining the module -data FilePragma a - = LanguagePragma { _lpPragmas :: AnnList LanguageExtension a - } -- ^ LANGUAGE pragma - | OptionsPragma { _opStr :: Ann StringNode a +data FilePragma dom stage + = LanguagePragma { _lpPragmas :: AnnList LanguageExtension dom stage + } -- ^ LANGUAGE pragmdom stage + | OptionsPragma { _opStr :: Ann StringNode dom stage } -- ^ OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC -- | Pragmas that must be used after the module head -data ModulePragma a - = ModuleWarningPragma { _modWarningStr :: AnnList StringNode a +data ModulePragma dom stage + = ModuleWarningPragma { _modWarningStr :: AnnList StringNode dom stage } -- ^ a warning pragma attached to the module - | ModuleDeprecatedPragma { _modDeprecatedPragma :: AnnList StringNode a + | ModuleDeprecatedPragma { _modDeprecatedPragma :: AnnList StringNode dom stage } -- ^ a deprecated pragma attached to the module -data LanguageExtension a = LanguageExtension { _langExt :: String } +data LanguageExtension dom stage = LanguageExtension { _langExt :: String } -- | An import declaration: @import Module.Name@ -data ImportDecl a - = ImportDecl { _importSource :: AnnMaybe ImportSource a - , _importQualified :: AnnMaybe ImportQualified a - , _importSafe :: AnnMaybe ImportSafe a - , _importPkg :: AnnMaybe StringNode a - , _importModule :: Ann SimpleName a - , _importAs :: AnnMaybe ImportRenaming a - , _importSpec :: AnnMaybe ImportSpec a +data ImportDecl dom stage + = ImportDecl { _importSource :: AnnMaybe ImportSource dom stage + , _importQualified :: AnnMaybe ImportQualified dom stage + , _importSafe :: AnnMaybe ImportSafe dom stage + , _importPkg :: AnnMaybe StringNode dom stage + , _importModule :: Ann ModuleName dom stage + , _importAs :: AnnMaybe ImportRenaming dom stage + , _importSpec :: AnnMaybe ImportSpec dom stage } -- | Restriction on the imported names -data ImportSpec a - = ImportSpecList { _importSpecList :: AnnList IESpec a +data ImportSpec dom stage + = ImportSpecList { _importSpecList :: AnnList IESpec dom stage } -- ^ Restrict the import definition to ONLY import the listed names - | ImportSpecHiding { _importSpecHiding :: AnnList IESpec a + | ImportSpecHiding { _importSpecHiding :: AnnList IESpec dom stage } -- ^ Restrict the import definition to DONT import the listed names -- | Marks the import as qualified: @qualified@ -data ImportQualified a = ImportQualified +data ImportQualified dom stage = ImportQualified -- | Marks the import as source: @{-# SOURCE #-}@ -data ImportSource a = ImportSource +data ImportSource dom stage = ImportSource -- | Marks the import as safe: @safe@ -data ImportSafe a = ImportSafe +data ImportSafe dom stage = ImportSafe -- | Marks an imported name to belong to the type namespace: @type@ -data TypeNamespace a = TypeNamespace +data TypeNamespace dom stage = TypeNamespace -- | Renaming imports (@ as A @) -data ImportRenaming a = ImportRenaming { _importRename :: Ann SimpleName a } - +data ImportRenaming dom stage = ImportRenaming { _importRename :: Ann ModuleName dom stage }
+ Language/Haskell/Tools/AST/Modules.hs-boot view
@@ -0,0 +1,8 @@+{-# LANGUAGE RoleAnnotations #-} +module Language.Haskell.Tools.AST.Modules where + +type role Module nominal nominal +data Module dom stage + +type role ImportDecl nominal nominal +data ImportDecl dom stage
Language/Haskell/Tools/AST/Patterns.hs view
@@ -10,60 +10,60 @@ -- | Representation of patterns for pattern bindings -data Pattern a - = VarPat { _patternName :: Ann Name a +data Pattern dom stage + = VarPat { _patternName :: Ann Name dom stage } -- ^ Pattern name binding - | LitPat { _patternLiteral :: Ann Literal a + | LitPat { _patternLiteral :: Ann Literal dom stage } -- ^ Literal pattern - | InfixPat { _patternLhs :: Ann Pattern a - , _patternOperator :: Ann Operator a - , _patternRhs :: Ann Pattern a + | InfixPat { _patternLhs :: Ann Pattern dom stage + , _patternOperator :: Ann Operator dom stage + , _patternRhs :: Ann Pattern dom stage } -- ^ Infix constructor application pattern (@ a :+: b @) - | AppPat { _patternName :: Ann Name a - , _patternArgs :: AnnList Pattern a + | AppPat { _patternName :: Ann Name dom stage + , _patternArgs :: AnnList Pattern dom stage } -- ^ Constructor application pattern (@ Point x y @) - | TuplePat { _patternElems :: AnnList Pattern a + | TuplePat { _patternElems :: AnnList Pattern dom stage } -- ^ Tuple pattern (@ (x,y) @) - | UnboxTuplePat { _patternElems :: AnnList Pattern a + | UnboxTuplePat { _patternElems :: AnnList Pattern dom stage } -- ^ Unboxed tuple pattern (@ (# x, y #) @) - | ListPat { _patternElems :: AnnList Pattern a + | ListPat { _patternElems :: AnnList Pattern dom stage } -- ^ List pattern (@ [1,2,a,x] @) - | ParArrPat { _patternElems :: AnnList Pattern a + | ParArrPat { _patternElems :: AnnList Pattern dom stage } -- ^ Parallel array pattern (@ [:1,2,a,x:] @) - | ParenPat { _patternInner :: Ann Pattern a + | ParenPat { _patternInner :: Ann Pattern dom stage } -- ^ Parenthesised patterns - | RecPat { _patternName :: Ann Name a - , _patternFields :: AnnList PatternField a + | RecPat { _patternName :: Ann Name dom stage + , _patternFields :: AnnList PatternField dom stage } -- ^ Record pattern (@ Point { x = 3, y } @) - | AsPat { _patternName :: Ann Name a - , _patternInner :: Ann Pattern a + | AsPat { _patternName :: Ann Name dom stage + , _patternInner :: Ann Pattern dom stage } -- ^ As-pattern (explicit name binding) (@ ls\@(hd:_) @) | WildPat -- ^ Wildcard pattern: (@ _ @) - | IrrPat { _patternInner :: Ann Pattern a + | IrrPat { _patternInner :: Ann Pattern dom stage } -- ^ Irrefutable pattern (@ ~(x:_) @) - | BangPat { _patternInner :: Ann Pattern a + | BangPat { _patternInner :: Ann Pattern dom stage } -- ^ Bang pattern (@ !x @) - | TypeSigPat { _patternInner :: Ann Pattern a - , _patternType :: Ann Type a + | TypeSigPat { _patternInner :: Ann Pattern dom stage + , _patternType :: Ann Type dom stage } -- ^ Pattern with explicit type signature (@ __ :: Int @) - | ViewPat { _patternExpr :: Ann Expr a - , _patternInner :: Ann Pattern a + | ViewPat { _patternExpr :: Ann Expr dom stage + , _patternInner :: Ann Pattern dom stage } -- ^ View pattern (@ f -> Just 1 @) -- regular list pattern omitted -- xml patterns omitted - | SplicePat { _patternSplice :: Ann Splice a + | SplicePat { _patternSplice :: Ann Splice dom stage } -- ^ Splice patterns: @$(generateX inp)@ - | QuasiQuotePat { _patQQ :: Ann QuasiQuote a + | QuasiQuotePat { _patQQ :: Ann QuasiQuote dom stage } -- ^ Quasi-quoted patterns: @[| 1 + 2 |]@ - | NPlusKPat { _patternName :: Ann Name a - , _patternLit :: Ann Literal a + | NPlusKPat { _patternName :: Ann Name dom stage + , _patternLit :: Ann Literal dom stage } -- Field specification of a record pattern -data PatternField a - = NormalFieldPattern { _fieldPatternName :: Ann Name a - , _fieldPattern :: Ann Pattern a +data PatternField dom stage + = NormalFieldPattern { _fieldPatternName :: Ann Name dom stage + , _fieldPattern :: Ann Pattern dom stage } -- ^ Named field pattern (@ p = Point 3 2 @) - | FieldPunPattern { _fieldPatternName :: Ann Name a + | FieldPunPattern { _fieldPatternName :: Ann Name dom stage } -- ^ Named field pun (@ p @) | FieldWildcardPattern -- ^ Wildcard field pattern (@ .. @)
Language/Haskell/Tools/AST/References.hs view
@@ -108,6 +108,7 @@ makeReferences ''Operator makeReferences ''Name makeReferences ''SimpleName +makeReferences ''ModuleName makeReferences ''UnqualName makeReferences ''StringNode makeReferences ''DataOrNewtypeKeyword
+ Language/Haskell/Tools/AST/SemaInfoTypes.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE DeriveDataTypeable + , TemplateHaskell + , UndecidableInstances + , FlexibleContexts + , FlexibleInstances + #-} +module Language.Haskell.Tools.AST.SemaInfoTypes where + +import Name +import Id +import Module +import SrcLoc +import RdrName +import Outputable + +import Data.Data + +import Control.Reference + +-- | Semantic info type for any node not +-- carrying additional semantic information +data NoSemanticInfo = NoSemanticInfo + deriving (Eq, Data) + +-- | Info for expressions that tells which definitions are in scope +data ScopeInfo = ScopeInfo { _exprScopedLocals :: [[Name]] + } + deriving (Eq, Data) + +-- | Info corresponding to a name +data NameInfo n = NameInfo { _nameScopedLocals :: [[Name]] + , _nameIsDefined :: Bool + , _nameInfo :: n + } + | AmbiguousNameInfo { _nameScopedLocals :: [[Name]] + , _nameIsDefined :: Bool + , _ambiguousName :: RdrName + , _ambiguousLocation :: SrcSpan + } + | ImplicitNameInfo { _nameScopedLocals :: [[Name]] + , _nameIsDefined :: Bool + , _implicitName :: String + } + + deriving (Eq, Data) + +-- | Info corresponding to a name that is correctly identified +data CNameInfo = CNameInfo { _cnameScopedLocals :: [[Name]] + , _cnameIsDefined :: Bool + , _cnameInfo :: Id + } + deriving (Eq, Data) + +-- | Info for the module element +data ModuleInfo n = ModuleInfo { _defModuleName :: Module + , _implicitNames :: [n] -- ^ Implicitely imported names + } + deriving (Eq, Data) + +-- | Info corresponding to an import declaration +data ImportInfo n = ImportInfo { _importedModule :: Module -- ^ The name and package of the imported module + , _availableNames :: [n] -- ^ Names available from the imported module + , _importedNames :: [n] -- ^ Names actually imported from the module. + } + deriving (Eq, Data) + +instance Show ScopeInfo where + show (ScopeInfo locals) = "(ScopeInfo " ++ showSDocUnsafe (ppr locals) ++ ")" + +instance Outputable n => Show (NameInfo n) where + show (NameInfo locals defined nameInfo) = "(NameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ ")" + show (AmbiguousNameInfo locals defined nameInfo span) = "(AmbiguousNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ " " ++ show span ++ ")" + show (ImplicitNameInfo locals defined nameInfo) = "(ImplicitNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ ")" + +instance Show CNameInfo where + show (CNameInfo locals defined nameInfo) = "(CNameInfo " ++ showSDocUnsafe (ppr locals) ++ " " ++ show defined ++ " " ++ showSDocUnsafe (ppr nameInfo) ++ ")" + +instance Outputable n => Show (ModuleInfo n) where + show (ModuleInfo mod imp) = "(ModuleInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr imp) ++ ")" + +instance Outputable n => Show (ImportInfo n) where + show (ImportInfo mod avail imported) = "(ImportInfo " ++ showSDocUnsafe (ppr mod) ++ " " ++ showSDocUnsafe (ppr avail) ++ " " ++ showSDocUnsafe (ppr imported) ++ ")" + +instance Show NoSemanticInfo where + show NoSemanticInfo = "NoSemanticInfo" + +makeReferences ''NoSemanticInfo +makeReferences ''ScopeInfo +makeReferences ''NameInfo +makeReferences ''CNameInfo +makeReferences ''ModuleInfo +makeReferences ''ImportInfo + +-- | Infos that may have a name that can be extracted +class HasNameInfo si where + semanticsName :: si -> Maybe Name + +instance HasNameInfo (NameInfo Name) where + semanticsName = (^? nameInfo) + +instance HasNameInfo CNameInfo where + semanticsName = fmap idName . (^? cnameInfo) + +-- | Infos that may have a typed name that can be extracted +class HasIdInfo si where + semanticsId :: si -> Maybe Id + +instance HasIdInfo (NameInfo Id) where + semanticsId = (^? nameInfo) + +instance HasIdInfo CNameInfo where + semanticsId = (^? cnameInfo) + +-- | Infos that contain the names that are available in theirs scope +class HasScopeInfo si where + semanticsScope :: si -> [[Name]] + +instance HasScopeInfo (NameInfo n) where + semanticsScope = (^. nameScopedLocals) + +instance HasScopeInfo CNameInfo where + semanticsScope = (^. cnameScopedLocals) + +instance HasScopeInfo ScopeInfo where + semanticsScope = (^. exprScopedLocals) + +-- | Infos that store if they were used to define a name +class HasDefiningInfo si where + semanticsDefining :: si -> Bool + +instance HasDefiningInfo (NameInfo n) where + semanticsDefining = (^. nameIsDefined) + +instance HasDefiningInfo CNameInfo where + semanticsDefining = (^. cnameIsDefined) + +-- | Semantic and source code related information for an AST node. +data NodeInfo sema src + = NodeInfo { _semanticInfo :: sema + , _sourceInfo :: src + } + deriving (Eq, Show, Data) + +makeReferences ''NodeInfo
Language/Haskell/Tools/AST/Stmts.hs view
@@ -8,31 +8,31 @@ import {-# SOURCE #-} Language.Haskell.Tools.AST.Binds (LocalBind) -- | Normal monadic statements -data Stmt' expr a - = BindStmt { _stmtPattern :: Ann Pattern a - , _stmtExpr :: Ann expr a +data Stmt' expr dom stage + = BindStmt { _stmtPattern :: Ann Pattern dom stage + , _stmtExpr :: Ann expr dom stage } -- ^ Binding statement (@ x <- action @) - | ExprStmt { _stmtExpr :: Ann expr a + | ExprStmt { _stmtExpr :: Ann expr dom stage } -- ^ Non-binding statement (@ action @) - | LetStmt { _stmtBinds :: AnnList LocalBind a + | LetStmt { _stmtBinds :: AnnList LocalBind dom stage } -- ^ Let statement (@ let x = 3; y = 4 @) - | RecStmt { _cmdStmtBinds :: AnnList (Stmt' expr) a + | RecStmt { _cmdStmtBinds :: AnnList (Stmt' expr) dom stage } -- ^ A recursive binding statement with (@ rec b <- f a c; c <- f b a @) type Stmt = Stmt' Expr -- | Body of a list comprehension: (@ | x <- [1..10] @) -data ListCompBody a - = ListCompBody { _compStmts :: AnnList CompStmt a +data ListCompBody dom stage + = ListCompBody { _compStmts :: AnnList CompStmt dom stage } -- | List comprehension statement -data CompStmt a - = CompStmt { _compStmt :: Ann Stmt a +data CompStmt dom stage + = CompStmt { _compStmt :: Ann Stmt dom stage } -- ^ Normal monadic statement of a list comprehension - | ThenStmt { _thenExpr :: Ann Expr a - , _byExpr :: AnnMaybe Expr a + | ThenStmt { _thenExpr :: Ann Expr dom stage + , _byExpr :: AnnMaybe Expr dom stage } -- ^ Then statements by @TransformListComp@ (@ then sortWith by (x + y) @) - | GroupStmt { _byExpr :: AnnMaybe Expr a - , _usingExpr :: AnnMaybe Expr a + | GroupStmt { _byExpr :: AnnMaybe Expr dom stage + , _usingExpr :: AnnMaybe Expr dom stage } -- ^ Grouping statements by @TransformListComp@ (@ then group by (x + y) using groupWith @) -- Note: either byExpr or usingExpr must have a value
Language/Haskell/Tools/AST/TH.hs view
@@ -10,32 +10,32 @@ import Language.Haskell.Tools.AST.Ann -- | A template haskell splice -data Splice a - = IdSplice { _spliceId :: Ann Name a +data Splice dom stage + = IdSplice { _spliceId :: Ann Name dom stage } -- ^ A simple name splice: @$generateX@ - | ParenSplice { _spliceExpr :: Ann Expr a + | ParenSplice { _spliceExpr :: Ann Expr dom stage } -- ^ A splice with parentheses: @$(generate input)@ -- | Template haskell quasi-quotation: @[quoter|str]@ -data QuasiQuote a - = QuasiQuote { _qqExprName :: Ann Name a - , _qqExprBody :: Ann QQString a +data QuasiQuote dom stage + = QuasiQuote { _qqExprName :: Ann Name dom stage + , _qqExprBody :: Ann QQString dom stage } -- | Template Haskell Quasi-quotation content -data QQString a +data QQString dom stage = QQString { _qqString :: String } -- | Template Haskell bracket expressions -data Bracket a - = ExprBracket { _bracketExpr :: Ann Expr a +data Bracket dom stage + = ExprBracket { _bracketExpr :: Ann Expr dom stage } -- ^ Expression bracket (@ [| x + y |] @) - | PatternBracket { _bracketPattern :: Ann Pattern a + | PatternBracket { _bracketPattern :: Ann Pattern dom stage } -- ^ Pattern bracket (@ [| Point x y |] @) - | TypeBracket { _bracketType :: Ann Type a + | TypeBracket { _bracketType :: Ann Type dom stage } -- ^ Pattern bracket (@ [| (Int,Int) |] @) - | DeclsBracket { _bracketDecl :: AnnList Decl a + | DeclsBracket { _bracketDecl :: AnnList Decl dom stage } -- ^ Declaration bracket (@ [| _f :: Int -> Int; f x = x*x |] @)
Language/Haskell/Tools/AST/TH.hs-boot view
@@ -1,8 +1,11 @@ {-# LANGUAGE RoleAnnotations #-} module Language.Haskell.Tools.AST.TH where -type role Splice nominal -data Splice a -type role QuasiQuote nominal -data QuasiQuote a -type role Bracket nominal -data Bracket a+ +type role Splice nominal nominal +data Splice dom stage + +type role QuasiQuote nominal nominal +data QuasiQuote dom stage + +type role Bracket nominal nominal +data Bracket dom stage
+ Language/Haskell/Tools/AST/TH/SemanticTraversal.hs view
@@ -0,0 +1,76 @@+{-# LANGUAGE LambdaCase + , CPP + , TemplateHaskell + #-} +-- | Generating instances for traversal on semantic information +module Language.Haskell.Tools.AST.TH.SemanticTraversal where + +import Control.Monad +import Language.Haskell.TH.Syntax +import Language.Haskell.TH.Ppr +import Language.Haskell.Tools.AST.Ann + +-- | Generate the instances for semantic information +deriveSemanticTraversal :: Name -> Q [Dec] +deriveSemanticTraversal nm = reify nm >>= \case + TyConI dt -> case dt of + DataD _ tyConName typArgs _ dataCons _ -> + createInstance tyConName typArgs dataCons + NewtypeD _ tyConName typArgs _ dataCon _ -> + createInstance tyConName typArgs [dataCon] + _ -> fail "Unsupported data type" + _ -> fail "Expected the name of a data type or newtype" + +createInstance :: Name -> [TyVarBndr] -> [Con] -> Q [Dec] +createInstance tyConName typArgs dataCons + = do clauses <- mapM createClause dataCons + return [InstanceD Nothing (map (AppT (ConT className) . VarT) astParams) + (AppT (ConT className) (foldl AppT (ConT tyConName) (map VarT astParams))) + [FunD funName clauses]] + where -- | Creates a clause for a constructor, the needed context is also generated + createClause :: Con -> Q Clause + createClause (RecC conName conArgs) = createClause' conName (map (\(_,_,t) -> t) conArgs) + createClause (NormalC conName conArgs) = createClause' conName (map snd conArgs) + createClause (InfixC conArg1 conName conArg2) = createClause' conName [snd conArg1, snd conArg2] + + createClause' :: Name -> [Type] -> Q Clause + createClause' conName args + = do bindedNames <- replicateM (length args) (newName "p") + return $ Clause [ VarP trf, ConP conName (map VarP bindedNames) ] + (NormalB (createExpr conName (zipWith processParam bindedNames args))) [] + + (tstage:tdom:_) = map getTyVar $ reverse typArgs + astParams = reverse $ map getTyVar $ drop 2 $ reverse typArgs + + -- | Creates an expression for the body of a smartTrav clause + -- using the matches created for parameters + createExpr :: Name -> [Exp] -> Exp + createExpr ctrName [] + = AppE applPure $ ConE ctrName + createExpr ctrName (param1:params) + = foldl (\coll new -> InfixE (Just coll) applStar (Just new)) + (InfixE (Just $ ConE ctrName) applDollar (Just param1)) + params + + applStar = VarE (mkName "Control.Applicative.<*>") + applDollar = VarE (mkName "Control.Applicative.<$>") + applPure = VarE (mkName "Control.Applicative.pure") + + className = ''SemanticTraversal + funName = 'semaTraverse + trf = mkName "f" + + -- | Creates the expression and the predicate for a parameter + processParam :: Name -> Type -> Exp + processParam arg (AppT (AppT t (VarT dom)) (VarT stage)) | dom == tdom && stage == tstage + = AppE (AppE (VarE funName) (VarE trf)) (VarE arg) + processParam arg _ = AppE applPure (VarE arg) + + getTyVar :: TyVarBndr -> Name + getTyVar (PlainTV tv) = tv + getTyVar (KindedTV tv _) = tv + +thExamine :: Q [Dec] -> Q [Dec] +thExamine decl = do d <- decl + runIO (putStrLn (pprint d)) + return d
+ Language/Haskell/Tools/AST/TH/SourceInfoTraversal.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE LambdaCase + , CPP + , TemplateHaskell + #-} +-- | Generating instances for traversal on semantic information +module Language.Haskell.Tools.AST.TH.SourceInfoTraversal where + +import Control.Monad +import Language.Haskell.TH.Syntax +import Language.Haskell.TH.Ppr +import Language.Haskell.Tools.AST.Ann + +-- | Generate the instances for semantic information +deriveSourceInfoTraversal :: Name -> Q [Dec] +deriveSourceInfoTraversal nm = reify nm >>= \case + TyConI dt -> case dt of + DataD _ tyConName typArgs _ dataCons _ -> + createInstance tyConName typArgs dataCons + NewtypeD _ tyConName typArgs _ dataCon _ -> + createInstance tyConName typArgs [dataCon] + _ -> fail "Unsupported data type" + _ -> fail "Expected the name of a data type or newtype" + +createInstance :: Name -> [TyVarBndr] -> [Con] -> Q [Dec] +createInstance tyConName typArgs dataCons + = do simpleClauses <- mapM (createClause simpleFunName False) dataCons + upClauses <- mapM (createClause upFunName True) dataCons + downClauses <- mapM (createClause downFunName True) dataCons + return [InstanceD Nothing (map (AppT (ConT className) . VarT) astParams) + (AppT (ConT className) (foldl AppT (ConT tyConName) (map VarT astParams))) + [FunD simpleFunName simpleClauses, FunD upFunName upClauses, FunD downFunName downClauses]] + where -- | Creates a clause for a constructor, the needed context is also generated + createClause :: Name -> Bool -> Con -> Q Clause + createClause funName updown (RecC conName conArgs) = createClause' funName updown conName (map (\(_,_,t) -> t) conArgs) + createClause funName updown (NormalC conName conArgs) = createClause' funName updown conName (map snd conArgs) + createClause funName updown (InfixC conArg1 conName conArg2) = createClause' funName updown conName [snd conArg1, snd conArg2] + + createClause' :: Name -> Bool -> Name -> [Type] -> Q Clause + createClause' funName updown conName args + = do bindedNames <- replicateM (length args) (newName "p") + return $ Clause ([ VarP trf ] ++ (if updown then [VarP desc, VarP asc] else []) ++ [ ConP conName (map VarP bindedNames) ]) + (NormalB (createExpr conName (zipWith (processParam funName updown) bindedNames args))) [] + + (tstage:tdom:_) = map getTyVar $ reverse typArgs + astParams = reverse $ map getTyVar $ drop 2 $ reverse typArgs + + createExpr :: Name -> [Exp] -> Exp + createExpr ctrName [] + = AppE applPure $ ConE ctrName + createExpr ctrName (param1:params) + = foldl (\coll new -> InfixE (Just coll) applStar (Just new)) + (InfixE (Just $ ConE ctrName) applDollar (Just param1)) + params + + applStar = VarE (mkName "Control.Applicative.<*>") + applDollar = VarE (mkName "Control.Applicative.<$>") + applPure = VarE (mkName "Control.Applicative.pure") + + className = ''SourceInfoTraversal + simpleFunName = 'sourceInfoTraverse + upFunName = 'sourceInfoTraverseUp + downFunName = 'sourceInfoTraverseDown + trf = mkName "trf" + desc = mkName "desc" + asc = mkName "asc" + + -- | Creates the expression and the predicate for a parameter + processParam :: Name -> Bool -> Name -> Type -> Exp + processParam funName updown arg (AppT (AppT t (VarT dom)) (VarT stage)) | dom == tdom && stage == tstage + = AppE (wrapUpdown $ AppE (VarE funName) (VarE trf)) (VarE arg) + where wrapUpdown | updown = flip AppE (VarE asc) . flip AppE (VarE desc) + | otherwise = id + processParam _ _ arg _ = AppE applPure (VarE arg) + + getTyVar :: TyVarBndr -> Name + getTyVar (PlainTV tv) = tv + getTyVar (KindedTV tv _) = tv + +thExamine :: Q [Dec] -> Q [Dec] +thExamine decl = do d <- decl + runIO (putStrLn (pprint d)) + return d
Language/Haskell/Tools/AST/Types.hs view
@@ -8,77 +8,77 @@ import {-# SOURCE #-} Language.Haskell.Tools.AST.TH -- | Type variable declaration -data TyVar a - = TyVarDecl { _tyVarName :: Ann Name a - , _tyVarKind :: AnnMaybe KindConstraint a +data TyVar dom stage + = TyVarDecl { _tyVarName :: Ann Name dom stage + , _tyVarKind :: AnnMaybe KindConstraint dom stage } -- | Haskell types -data Type a - = TyForall { _typeBounded :: AnnList TyVar a - , _typeType :: Ann Type a +data Type dom stage + = TyForall { _typeBounded :: AnnList TyVar dom stage + , _typeType :: Ann Type dom stage } -- ^ Forall types (@ forall x y . type @) - | TyCtx { _typeCtx :: Ann Context a - , _typeType :: Ann Type a + | TyCtx { _typeCtx :: Ann Context dom stage + , _typeType :: Ann Type dom stage } -- ^ Type with a context (@ forall x y . type @) - | TyFun { _typeParam :: Ann Type a - , _typeResult :: Ann Type a + | TyFun { _typeParam :: Ann Type dom stage + , _typeResult :: Ann Type dom stage } -- ^ Function types (@ a -> b @) - | TyTuple { _typeElements :: AnnList Type a + | TyTuple { _typeElements :: AnnList Type dom stage } -- ^ Tuple types (@ (a,b) @) - | TyUnbTuple { _typeElements :: AnnList Type a + | TyUnbTuple { _typeElements :: AnnList Type dom stage } -- ^ Unboxed tuple types (@ (#a,b#) @) - | TyList { _typeElement :: Ann Type a + | TyList { _typeElement :: Ann Type dom stage } -- ^ List type with special syntax (@ [a] @) - | TyParArray { _typeElement :: Ann Type a + | TyParArray { _typeElement :: Ann Type dom stage } -- ^ Parallel array type (@ [:a:] @) - | TyApp { _typeCon :: Ann Type a - , _typeArg :: Ann Type a + | TyApp { _typeCon :: Ann Type dom stage + , _typeArg :: Ann Type dom stage } -- ^ Type application (@ F a @) - | TyVar { _typeName :: Ann Name a + | TyVar { _typeName :: Ann Name dom stage } -- ^ type variable or constructor (@ a @) - | TyParen { _typeInner :: Ann Type a + | TyParen { _typeInner :: Ann Type dom stage } -- ^ type surrounded by parentheses (@ (T a) @) - | TyInfix { _typeLeft :: Ann Type a - , _typeOperator :: Ann Operator a - , _typeRight :: Ann Type a + | TyInfix { _typeLeft :: Ann Type dom stage + , _typeOperator :: Ann Operator dom stage + , _typeRight :: Ann Type dom stage } -- ^ Infix type constructor (@ (a <: b) @) - | TyKinded { _typeInner :: Ann Type a - , _typeKind :: Ann Kind a + | TyKinded { _typeInner :: Ann Type dom stage + , _typeKind :: Ann Kind dom stage } -- ^ Type with explicit kind signature (@ _a :: * @) - | TyPromoted { _tpPromoted :: Ann (Promoted Type) a + | TyPromoted { _tpPromoted :: Ann (Promoted Type) dom stage } -- A promoted data type with @-XDataKinds@ (@ 3 @, @ Left @, @ 'Left @). - | TySplice { _tsSplice :: Splice a + | TySplice { _tsSplice :: Splice dom stage } -- ^ a Template Haskell splice type (@ $(genType) @). - | TyQuasiQuote { _typeQQ :: QuasiQuote a + | TyQuasiQuote { _typeQQ :: QuasiQuote dom stage } -- ^ a Template Haskell quasi-quote type (@ [quoter| ... ] @). - | TyBang { _typeInner :: Ann Type a + | TyBang { _typeInner :: Ann Type dom stage } -- ^ Strict type marked with @!@. - | TyLazy { _typeInner :: Ann Type a + | TyLazy { _typeInner :: Ann Type dom stage } -- ^ Lazy type marked with @~@. (Should only be used if @Strict@ or @StrictData@ language extension is used) - | TyUnpack { _typeInner :: Ann Type a + | TyUnpack { _typeInner :: Ann Type dom stage } -- ^ Strict type marked with UNPACK pragma. (Usually contains the bang mark.) - | TyNoUnpack { _typeInner :: Ann Type a + | TyNoUnpack { _typeInner :: Ann Type dom stage } -- ^ Strict type marked with NOUNPACK pragma. (Usually contains the bang mark.) | TyWildcard -- ^ A wildcard type (@ _ @) with @-XPartialTypeSignatures@ - | TyNamedWildc { _typeWildcardName :: Ann Name a + | TyNamedWildc { _typeWildcardName :: Ann Name dom stage } -- ^ A named wildcard type (@ _t @) with @-XPartialTypeSignatures@ -- One or more assertions -data Context a - = ContextOne { _contextAssertion :: Ann Assertion a +data Context dom stage + = ContextOne { _contextAssertion :: Ann Assertion dom stage } -- ^ One assertion (@ C a => ... @) - | ContextMulti { _contextAssertions :: AnnList Assertion a + | ContextMulti { _contextAssertions :: AnnList Assertion dom stage } -- ^ A set of assertions (@ (C1 a, C2 b) => ... @, but can be one: @ (C a) => ... @) -- | A single assertion in the context -data Assertion a - = ClassAssert { _assertClsName :: Ann Name a - , _assertTypes :: AnnList Type a +data Assertion dom stage + = ClassAssert { _assertClsName :: Ann Name dom stage + , _assertTypes :: AnnList Type dom stage } -- ^ Class assertion (@Cls x@) - | InfixAssert { _assertLhs :: Ann Type a - , _assertOp :: Ann Operator a - , _assertRhs :: Ann Type a + | InfixAssert { _assertLhs :: Ann Type dom stage + , _assertOp :: Ann Operator dom stage + , _assertRhs :: Ann Type dom stage } -- ^ Infix class assertion, also contains type equations (@ a ~ X y @)
haskell-tools-ast.cabal view
@@ -1,5 +1,5 @@ name: haskell-tools-ast -version: 0.1.2.1 +version: 0.1.3.0 synopsis: Haskell AST for efficient tooling description: A representation of a Haskell Syntax tree that contain source-related and semantic annotations. These annotations help developer tools to work with the defined program. The source information enables refactoring and program transformation tools to change the source code without losing the original format (layout, comments) of the source. Semantic information helps analyzing the program. The representation is different from the GHC's syntax tree. It contains information from all representations in GHC (different version of syntax trees, lexical and module-level information). @@ -26,13 +26,17 @@ , Language.Haskell.Tools.AST.Literals , Language.Haskell.Tools.AST.Base , Language.Haskell.Tools.AST.Ann + , Language.Haskell.Tools.AST.SemaInfoTypes , Language.Haskell.Tools.AST.Instances , Language.Haskell.Tools.AST.Instances.Eq , Language.Haskell.Tools.AST.Instances.Show , Language.Haskell.Tools.AST.Instances.Data , Language.Haskell.Tools.AST.Instances.Generic - , Language.Haskell.Tools.AST.Instances.StructuralTraversal + , Language.Haskell.Tools.AST.Instances.SemanticTraversal + , Language.Haskell.Tools.AST.Instances.SourceInfoTraversal + , Language.Haskell.Tools.AST.TH.SemanticTraversal + , Language.Haskell.Tools.AST.TH.SourceInfoTraversal , Language.Haskell.Tools.AST.References , Language.Haskell.Tools.AST.Helpers , Language.Haskell.Tools.AST.Utils.OrdSrcSpan @@ -42,5 +46,6 @@ , ghc >=8.0 && <8.1 , references >=0.3.2 && <1.0 , uniplate >=1.6 && <2.0 - , structural-traversal >=0.1 && <0.2 + , mtl >=2.2 && <3.0 + , template-haskell >=2.11 && <3.0 default-language: Haskell2010