-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer -- -- Haskell-Source with Extensions (HSE, haskell-src-exts) is an extension -- of the standard haskell-src package, and handles most registered -- syntactic extensions to Haskell, including: -- -- -- -- and a few more. All extensions implemented in GHC are supported. Apart -- from these standard extensions, it also handles regular patterns as -- per the HaRP extension as well as HSX-style embedded XML syntax. @package haskell-src-exts @version 1.10.2 -- | This module defines various data types representing source location -- information, of varying degree of preciseness. module Language.Haskell.Exts.SrcLoc -- | A single position in the source. data SrcLoc SrcLoc :: String -> Int -> Int -> SrcLoc srcFilename :: SrcLoc -> String srcLine :: SrcLoc -> Int srcColumn :: SrcLoc -> Int -- | A portion of the source, spanning one or more lines and zero or more -- columns. data SrcSpan SrcSpan :: String -> Int -> Int -> Int -> Int -> SrcSpan srcSpanFilename :: SrcSpan -> String srcSpanStartLine :: SrcSpan -> Int srcSpanStartColumn :: SrcSpan -> Int srcSpanEndLine :: SrcSpan -> Int srcSpanEndColumn :: SrcSpan -> Int -- | Returns srcSpanStartLine and srcSpanStartColumn in a -- pair. srcSpanStart :: SrcSpan -> (Int, Int) -- | Returns srcSpanEndLine and srcSpanEndColumn in a pair. srcSpanEnd :: SrcSpan -> (Int, Int) -- | Combine two locations in the source to denote a span. mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan -- | Merge two source spans into a single span from the start of the first -- to the end of the second. Assumes that the two spans relate to the -- same source file. mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan -- | Test if a given span starts and ends at the same location. isNullSpan :: SrcSpan -> Bool -- | An entity located in the source. data Loc a Loc :: SrcSpan -> a -> Loc a loc :: Loc a -> SrcSpan unLoc :: Loc a -> a -- | A portion of the source, extended with information on the position of -- entities within the span. data SrcSpanInfo SrcSpanInfo :: SrcSpan -> [SrcSpan] -> SrcSpanInfo srcInfoSpan :: SrcSpanInfo -> SrcSpan srcInfoPoints :: SrcSpanInfo -> [SrcSpan] -- | Generate a SrcSpanInfo with no positional information for -- entities. noInfoSpan :: SrcSpan -> SrcSpanInfo -- | Generate a SrcSpanInfo with the supplied positional information -- for entities. infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo -- | Combine two SrcSpanInfos into one that spans the combined -- source area of the two arguments, leaving positional information -- blank. combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo -- | Short name for combSpanInfo (<++>) :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo -- | Optionally combine the first argument with the second, or return it -- unchanged if the second argument is Nothing. (<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo -- | Optionally combine the second argument with the first, or return it -- unchanged if the first argument is Nothing. () :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo -- | Add more positional information for entities of a span. (<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo -- | Merge two SrcSpans and lift them to a SrcInfoSpan with -- no positional information for entities. (<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo -- | A class to work over all kinds of source location information. class SrcInfo si toSrcInfo :: SrcInfo si => SrcLoc -> [SrcSpan] -> SrcLoc -> si fromSrcInfo :: SrcInfo si => SrcSpanInfo -> si getPointLoc :: SrcInfo si => si -> SrcLoc fileName :: SrcInfo si => si -> String startLine :: SrcInfo si => si -> Int startColumn :: SrcInfo si => si -> Int instance Typeable SrcLoc instance Typeable SrcSpan instance Typeable SrcSpanInfo instance Eq SrcLoc instance Ord SrcLoc instance Show SrcLoc instance Data SrcLoc instance Eq SrcSpan instance Ord SrcSpan instance Show SrcSpan instance Data SrcSpan instance Eq a => Eq (Loc a) instance Ord a => Ord (Loc a) instance Show a => Show (Loc a) instance Eq SrcSpanInfo instance Ord SrcSpanInfo instance Show SrcSpanInfo instance Data SrcSpanInfo instance SrcInfo SrcSpanInfo instance SrcInfo SrcSpan instance SrcInfo SrcLoc -- | A suite of datatypes describing the (semi-concrete) abstract syntax of -- Haskell 98 http://www.haskell.org/onlinereport/ plus registered -- extensions, including: -- -- -- -- All nodes in the syntax tree are annotated with something of a -- user-definable data type. When parsing, this annotation will contain -- information about the source location that the particular node comes -- from. module Language.Haskell.Exts.Annotated.Syntax -- | A complete Haskell source module. data Module l -- | an ordinary Haskell module Module :: l -> (Maybe (ModuleHead l)) -> [ModulePragma l] -> [ImportDecl l] -> [Decl l] -> Module l -- | a module consisting of a single XML document. The ModuleName never -- appears in the source but is needed for semantic purposes, it will be -- the same as the file name. XmlPage :: l -> (ModuleName l) -> [ModulePragma l] -> (XName l) -> [XAttr l] -> (Maybe (Exp l)) -> [Exp l] -> Module l -- | a hybrid module combining an XML document with an ordinary module XmlHybrid :: l -> (Maybe (ModuleHead l)) -> [ModulePragma l] -> [ImportDecl l] -> [Decl l] -> (XName l) -> [XAttr l] -> (Maybe (Exp l)) -> [Exp l] -> Module l -- | The head of a module, including the name and export specification. data ModuleHead l ModuleHead :: l -> (ModuleName l) -> (Maybe (WarningText l)) -> (Maybe (ExportSpecList l)) -> ModuleHead l -- | Warning text to optionally use in the module header of e.g. a -- deprecated module. data WarningText l DeprText :: l -> String -> WarningText l WarnText :: l -> String -> WarningText l -- | An explicit export specification. data ExportSpecList l ExportSpecList :: l -> [ExportSpec l] -> ExportSpecList l -- | An item in a module's export specification. data ExportSpec l -- | variable EVar :: l -> (QName l) -> ExportSpec l -- | T: a class or datatype exported abstractly, or a type -- synonym. EAbs :: l -> (QName l) -> ExportSpec l -- | T(..): a class exported with all of its methods, or a -- datatype exported with all of its constructors. EThingAll :: l -> (QName l) -> ExportSpec l -- | T(C_1,...,C_n): a class exported with some of its methods, or -- a datatype exported with some of its constructors. EThingWith :: l -> (QName l) -> [CName l] -> ExportSpec l -- | module M: re-export a module. EModuleContents :: l -> (ModuleName l) -> ExportSpec l -- | An import declaration. data ImportDecl l ImportDecl :: l -> (ModuleName l) -> Bool -> Bool -> Maybe String -> Maybe (ModuleName l) -> Maybe (ImportSpecList l) -> ImportDecl l -- | annotation, used by parser for position of the import -- keyword. importAnn :: ImportDecl l -> l -- | name of the module imported. importModule :: ImportDecl l -> (ModuleName l) -- | imported qualified? importQualified :: ImportDecl l -> Bool -- | imported with {-# SOURCE #-}? importSrc :: ImportDecl l -> Bool -- | imported with explicit package name importPkg :: ImportDecl l -> Maybe String -- | optional alias name in an as clause. importAs :: ImportDecl l -> Maybe (ModuleName l) -- | optional list of import specifications. importSpecs :: ImportDecl l -> Maybe (ImportSpecList l) -- | An explicit import specification list. data ImportSpecList l ImportSpecList :: l -> Bool -> [ImportSpec l] -> ImportSpecList l -- | An import specification, representing a single explicit item imported -- (or hidden) from a module. data ImportSpec l -- | variable IVar :: l -> (Name l) -> ImportSpec l -- | T: the name of a class, datatype or type synonym. IAbs :: l -> (Name l) -> ImportSpec l -- | T(..): a class imported with all of its methods, or a -- datatype imported with all of its constructors. IThingAll :: l -> (Name l) -> ImportSpec l -- | T(C_1,...,C_n): a class imported with some of its methods, or -- a datatype imported with some of its constructors. IThingWith :: l -> (Name l) -> [CName l] -> ImportSpec l -- | Associativity of an operator. data Assoc l -- | non-associative operator (declared with infix) AssocNone :: l -> Assoc l -- | left-associative operator (declared with infixl). AssocLeft :: l -> Assoc l -- | right-associative operator (declared with infixr) AssocRight :: l -> Assoc l -- | A top-level declaration. data Decl l -- | A type declaration TypeDecl :: l -> (DeclHead l) -> (Type l) -> Decl l -- | A type family declaration TypeFamDecl :: l -> (DeclHead l) -> (Maybe (Kind l)) -> Decl l -- | A data OR newtype declaration DataDecl :: l -> (DataOrNew l) -> (Maybe (Context l)) -> (DeclHead l) -> [QualConDecl l] -> (Maybe (Deriving l)) -> Decl l -- | A data OR newtype declaration, GADT style GDataDecl :: l -> (DataOrNew l) -> (Maybe (Context l)) -> (DeclHead l) -> (Maybe (Kind l)) -> [GadtDecl l] -> (Maybe (Deriving l)) -> Decl l -- | A data family declaration DataFamDecl :: l -> (Maybe (Context l)) -> (DeclHead l) -> (Maybe (Kind l)) -> Decl l -- | A type family instance declaration TypeInsDecl :: l -> (Type l) -> (Type l) -> Decl l -- | A data family instance declaration DataInsDecl :: l -> (DataOrNew l) -> (Type l) -> [QualConDecl l] -> (Maybe (Deriving l)) -> Decl l -- | A data family instance declaration, GADT style GDataInsDecl :: l -> (DataOrNew l) -> (Type l) -> (Maybe (Kind l)) -> [GadtDecl l] -> (Maybe (Deriving l)) -> Decl l -- | A declaration of a type class ClassDecl :: l -> (Maybe (Context l)) -> (DeclHead l) -> [FunDep l] -> (Maybe [ClassDecl l]) -> Decl l -- | An declaration of a type class instance InstDecl :: l -> (Maybe (Context l)) -> (InstHead l) -> (Maybe [InstDecl l]) -> Decl l -- | A standalone deriving declaration DerivDecl :: l -> (Maybe (Context l)) -> (InstHead l) -> Decl l -- | A declaration of operator fixity InfixDecl :: l -> (Assoc l) -> (Maybe Int) -> [Op l] -> Decl l -- | A declaration of default types DefaultDecl :: l -> [Type l] -> Decl l -- | A Template Haskell splicing declaration SpliceDecl :: l -> (Exp l) -> Decl l -- | A type signature declaration TypeSig :: l -> [Name l] -> (Type l) -> Decl l -- | A set of function binding clauses FunBind :: l -> [Match l] -> Decl l -- | A pattern binding PatBind :: l -> (Pat l) -> (Maybe (Type l)) -> (Rhs l) -> (Maybe (Binds l)) -> Decl l -- | A foreign import declaration ForImp :: l -> (CallConv l) -> (Maybe (Safety l)) -> (Maybe String) -> (Name l) -> (Type l) -> Decl l -- | A foreign export declaration ForExp :: l -> (CallConv l) -> (Maybe String) -> (Name l) -> (Type l) -> Decl l -- | A RULES pragma RulePragmaDecl :: l -> [Rule l] -> Decl l -- | A DEPRECATED pragma DeprPragmaDecl :: l -> [([Name l], String)] -> Decl l -- | A WARNING pragma WarnPragmaDecl :: l -> [([Name l], String)] -> Decl l -- | An INLINE pragma InlineSig :: l -> Bool -> (Maybe (Activation l)) -> (QName l) -> Decl l -- | An INLINE CONLIKE pragma InlineConlikeSig :: l -> (Maybe (Activation l)) -> (QName l) -> Decl l -- | A SPECIALISE pragma SpecSig :: l -> (QName l) -> [Type l] -> Decl l -- | A SPECIALISE INLINE pragma SpecInlineSig :: l -> Bool -> (Maybe (Activation l)) -> (QName l) -> [Type l] -> Decl l -- | A SPECIALISE instance pragma InstSig :: l -> (Maybe (Context l)) -> (InstHead l) -> Decl l -- | An ANN pragma AnnPragma :: l -> (Annotation l) -> Decl l -- | The head of a type or class declaration. data DeclHead l DHead :: l -> (Name l) -> [TyVarBind l] -> DeclHead l DHInfix :: l -> (TyVarBind l) -> (Name l) -> (TyVarBind l) -> DeclHead l DHParen :: l -> (DeclHead l) -> DeclHead l -- | The head of an instance declaration. data InstHead l IHead :: l -> (QName l) -> [Type l] -> InstHead l IHInfix :: l -> (Type l) -> (QName l) -> (Type l) -> InstHead l IHParen :: l -> (InstHead l) -> InstHead l -- | A binding group inside a let or where clause. data Binds l -- | An ordinary binding group BDecls :: l -> [Decl l] -> Binds l -- | A binding group for implicit parameters IPBinds :: l -> [IPBind l] -> Binds l -- | A binding of an implicit parameter. data IPBind l IPBind :: l -> (IPName l) -> (Exp l) -> IPBind l -- | Declarations inside a class declaration. data ClassDecl l -- | ordinary declaration ClsDecl :: l -> (Decl l) -> ClassDecl l -- | declaration of an associated data type ClsDataFam :: l -> (Maybe (Context l)) -> (DeclHead l) -> (Maybe (Kind l)) -> ClassDecl l -- | declaration of an associated type synonym ClsTyFam :: l -> (DeclHead l) -> (Maybe (Kind l)) -> ClassDecl l -- | default choice for an associated type synonym ClsTyDef :: l -> (Type l) -> (Type l) -> ClassDecl l -- | Declarations inside an instance declaration. data InstDecl l -- | ordinary declaration InsDecl :: l -> (Decl l) -> InstDecl l -- | an associated type definition InsType :: l -> (Type l) -> (Type l) -> InstDecl l -- | an associated data type implementation InsData :: l -> (DataOrNew l) -> (Type l) -> [QualConDecl l] -> (Maybe (Deriving l)) -> InstDecl l -- | an associated data type implemented using GADT style InsGData :: l -> (DataOrNew l) -> (Type l) -> (Maybe (Kind l)) -> [GadtDecl l] -> (Maybe (Deriving l)) -> InstDecl l -- | A deriving clause following a data type declaration. data Deriving l Deriving :: l -> [InstHead l] -> Deriving l -- | A flag stating whether a declaration is a data or newtype declaration. data DataOrNew l DataType :: l -> DataOrNew l NewType :: l -> DataOrNew l -- | Declaration of an ordinary data constructor. data ConDecl l -- | ordinary data constructor ConDecl :: l -> (Name l) -> [BangType l] -> ConDecl l -- | infix data constructor InfixConDecl :: l -> (BangType l) -> (Name l) -> (BangType l) -> ConDecl l -- | record constructor RecDecl :: l -> (Name l) -> [FieldDecl l] -> ConDecl l -- | Declaration of a (list of) named field(s). data FieldDecl l FieldDecl :: l -> [Name l] -> (BangType l) -> FieldDecl l -- | A single constructor declaration within a data type declaration, which -- may have an existential quantification binding. data QualConDecl l QualConDecl :: l -> (Maybe [TyVarBind l]) -> (Maybe (Context l)) -> (ConDecl l) -> QualConDecl l -- | A single constructor declaration in a GADT data type declaration. data GadtDecl l GadtDecl :: l -> (Name l) -> (Type l) -> GadtDecl l -- | The type of a constructor argument or field, optionally including a -- strictness annotation. data BangType l -- | strict component, marked with "!" BangedTy :: l -> (Type l) -> BangType l -- | non-strict component UnBangedTy :: l -> (Type l) -> BangType l -- | unboxed component, marked with an UNPACK pragma UnpackedTy :: l -> (Type l) -> BangType l -- | Clauses of a function binding. data Match l -- | A clause defined with prefix notation, i.e. the function name followed -- by its argument patterns, the right-hand side and an optional where -- clause. Match :: l -> (Name l) -> [Pat l] -> (Rhs l) -> (Maybe (Binds l)) -> Match l -- | A clause defined with infix notation, i.e. first its first argument -- pattern, then the function name, then its following argument(s), the -- right-hand side and an optional where clause. Note that there can be -- more than two arguments to a function declared infix, hence the list -- of pattern arguments. InfixMatch :: l -> (Pat l) -> (Name l) -> [Pat l] -> (Rhs l) -> (Maybe (Binds l)) -> Match l -- | The right hand side of a function or pattern binding. data Rhs l -- | unguarded right hand side (exp) UnGuardedRhs :: l -> (Exp l) -> Rhs l -- | guarded right hand side (gdrhs) GuardedRhss :: l -> [GuardedRhs l] -> Rhs l -- | A guarded right hand side | stmts = -- exp. The guard is a series of statements when using pattern -- guards, otherwise it will be a single qualifier expression. data GuardedRhs l GuardedRhs :: l -> [Stmt l] -> (Exp l) -> GuardedRhs l -- | A context is a set of assertions data Context l CxSingle :: l -> (Asst l) -> Context l CxTuple :: l -> [Asst l] -> Context l CxParen :: l -> (Context l) -> Context l CxEmpty :: l -> Context l -- | A functional dependency, given on the form l1 l2 ... ln -> r2 r3 .. -- rn data FunDep l FunDep :: l -> [Name l] -> [Name l] -> FunDep l -- | Class assertions. In Haskell 98, the argument would be a tyvar, -- but this definition allows multiple parameters, and allows them to be -- types. Also extended with support for implicit parameters and -- equality constraints. data Asst l -- | ordinary class assertion ClassA :: l -> (QName l) -> [Type l] -> Asst l -- | class assertion where the class name is given infix InfixA :: l -> (Type l) -> (QName l) -> (Type l) -> Asst l -- | implicit parameter assertion IParam :: l -> (IPName l) -> (Type l) -> Asst l -- | type equality constraint EqualP :: l -> (Type l) -> (Type l) -> Asst l -- | A type qualified with a context. An unqualified type has an empty -- context. data Type l -- | qualified type TyForall :: l -> (Maybe [TyVarBind l]) -> (Maybe (Context l)) -> (Type l) -> Type l -- | function type TyFun :: l -> (Type l) -> (Type l) -> Type l -- | tuple type, possibly boxed TyTuple :: l -> Boxed -> [Type l] -> Type l -- | list syntax, e.g. [a], as opposed to [] a TyList :: l -> (Type l) -> Type l -- | application of a type constructor TyApp :: l -> (Type l) -> (Type l) -> Type l -- | type variable TyVar :: l -> (Name l) -> Type l -- | named type or type constructor TyCon :: l -> (QName l) -> Type l -- | type surrounded by parentheses TyParen :: l -> (Type l) -> Type l -- | infix type constructor TyInfix :: l -> (Type l) -> (QName l) -> (Type l) -> Type l -- | type with explicit kind signature TyKind :: l -> (Type l) -> (Kind l) -> Type l -- | Flag denoting whether a tuple is boxed or unboxed. data Boxed Boxed :: Boxed Unboxed :: Boxed -- | An explicit kind annotation. data Kind l -- | *, the kind of types KindStar :: l -> Kind l -- | !, the kind of unboxed types KindBang :: l -> Kind l -- | ->, the kind of a type constructor KindFn :: l -> (Kind l) -> (Kind l) -> Kind l -- | a parenthesised kind KindParen :: l -> (Kind l) -> Kind l -- | a kind variable (as-of-yet unsupported by compilers) KindVar :: l -> (Name l) -> Kind l -- | A type variable declaration, optionally with an explicit kind -- annotation. data TyVarBind l -- | variable binding with kind annotation KindedVar :: l -> (Name l) -> (Kind l) -> TyVarBind l -- | ordinary variable binding UnkindedVar :: l -> (Name l) -> TyVarBind l -- | Haskell expressions. data Exp l -- | variable Var :: l -> (QName l) -> Exp l -- | implicit parameter variable IPVar :: l -> (IPName l) -> Exp l -- | data constructor Con :: l -> (QName l) -> Exp l -- | literal constant Lit :: l -> (Literal l) -> Exp l -- | infix application InfixApp :: l -> (Exp l) -> (QOp l) -> (Exp l) -> Exp l -- | ordinary application App :: l -> (Exp l) -> (Exp l) -> Exp l -- | negation expression -exp (unary minus) NegApp :: l -> (Exp l) -> Exp l -- | lambda expression Lambda :: l -> [Pat l] -> (Exp l) -> Exp l -- | local declarations with let ... in ... Let :: l -> (Binds l) -> (Exp l) -> Exp l -- | if exp then exp else -- exp If :: l -> (Exp l) -> (Exp l) -> (Exp l) -> Exp l -- | case exp of alts Case :: l -> (Exp l) -> [Alt l] -> Exp l -- | do-expression: the last statement in the list should be an -- expression. Do :: l -> [Stmt l] -> Exp l -- | mdo-expression MDo :: l -> [Stmt l] -> Exp l -- | tuple expression Tuple :: l -> [Exp l] -> Exp l -- | tuple section expression, e.g. (,,3) TupleSection :: l -> [Maybe (Exp l)] -> Exp l -- | list expression List :: l -> [Exp l] -> Exp l -- | parenthesised expression Paren :: l -> (Exp l) -> Exp l -- | left section (exp qop) LeftSection :: l -> (Exp l) -> (QOp l) -> Exp l -- | right section (qop exp) RightSection :: l -> (QOp l) -> (Exp l) -> Exp l -- | record construction expression RecConstr :: l -> (QName l) -> [FieldUpdate l] -> Exp l -- | record update expression RecUpdate :: l -> (Exp l) -> [FieldUpdate l] -> Exp l -- | unbounded arithmetic sequence, incrementing by 1: [from ..] EnumFrom :: l -> (Exp l) -> Exp l -- | bounded arithmetic sequence, incrementing by 1 [from .. to] EnumFromTo :: l -> (Exp l) -> (Exp l) -> Exp l -- | unbounded arithmetic sequence, with first two elements given -- [from, then ..] EnumFromThen :: l -> (Exp l) -> (Exp l) -> Exp l -- | bounded arithmetic sequence, with first two elements given [from, -- then .. to] EnumFromThenTo :: l -> (Exp l) -> (Exp l) -> (Exp l) -> Exp l -- | ordinary list comprehension ListComp :: l -> (Exp l) -> [QualStmt l] -> Exp l -- | parallel list comprehension ParComp :: l -> (Exp l) -> [[QualStmt l]] -> Exp l -- | expression with explicit type signature ExpTypeSig :: l -> (Exp l) -> (Type l) -> Exp l -- | 'x for template haskell reifying of expressions VarQuote :: l -> (QName l) -> Exp l -- | ''T for template haskell reifying of types TypQuote :: l -> (QName l) -> Exp l -- | template haskell bracket expression BracketExp :: l -> (Bracket l) -> Exp l -- | template haskell splice expression SpliceExp :: l -> (Splice l) -> Exp l -- | quasi-quotaion: [$name| string |] QuasiQuote :: l -> String -> String -> Exp l -- | xml element, with attributes and children XTag :: l -> (XName l) -> [XAttr l] -> (Maybe (Exp l)) -> [Exp l] -> Exp l -- | empty xml element, with attributes XETag :: l -> (XName l) -> [XAttr l] -> (Maybe (Exp l)) -> Exp l -- | PCDATA child element XPcdata :: l -> String -> Exp l -- | escaped haskell expression inside xml XExpTag :: l -> (Exp l) -> Exp l -- | children of an xml element XChildTag :: l -> [Exp l] -> Exp l -- | CORE pragma CorePragma :: l -> String -> (Exp l) -> Exp l -- | SCC pragma SCCPragma :: l -> String -> (Exp l) -> Exp l -- | GENERATED pragma GenPragma :: l -> String -> (Int, Int) -> (Int, Int) -> (Exp l) -> Exp l -- | arrows proc: proc pat -> exp Proc :: l -> (Pat l) -> (Exp l) -> Exp l -- | arrow application (from left): exp -< exp LeftArrApp :: l -> (Exp l) -> (Exp l) -> Exp l -- | arrow application (from right): exp >- exp RightArrApp :: l -> (Exp l) -> (Exp l) -> Exp l -- | higher-order arrow application (from left): exp -- -<< exp LeftArrHighApp :: l -> (Exp l) -> (Exp l) -> Exp l -- | higher-order arrow application (from right): exp -- >>- exp RightArrHighApp :: l -> (Exp l) -> (Exp l) -> Exp l -- | A statement, representing both a stmt in a -- do-expression, an ordinary qual in a list -- comprehension, as well as a stmt in a pattern guard. data Stmt l -- | a generator: pat <- exp Generator :: l -> (Pat l) -> (Exp l) -> Stmt l -- | an exp by itself: in a do-expression, an action whose -- result is discarded; in a list comprehension and pattern guard, a -- guard expression Qualifier :: l -> (Exp l) -> Stmt l -- | local bindings LetStmt :: l -> (Binds l) -> Stmt l -- | a recursive binding group for arrows RecStmt :: l -> [Stmt l] -> Stmt l -- | A general transqual in a list comprehension, which could -- potentially be a transform of the kind enabled by TransformListComp. data QualStmt l -- | an ordinary statement QualStmt :: l -> (Stmt l) -> QualStmt l -- | then exp ThenTrans :: l -> (Exp l) -> QualStmt l -- | then exp by exp ThenBy :: l -> (Exp l) -> (Exp l) -> QualStmt l -- | then group by exp GroupBy :: l -> (Exp l) -> QualStmt l -- | then group using exp GroupUsing :: l -> (Exp l) -> QualStmt l -- | then group by exp using -- exp GroupByUsing :: l -> (Exp l) -> (Exp l) -> QualStmt l -- | An fbind in a labeled construction or update expression. data FieldUpdate l -- | ordinary label-expresion pair FieldUpdate :: l -> (QName l) -> (Exp l) -> FieldUpdate l -- | record field pun FieldPun :: l -> (Name l) -> FieldUpdate l -- | record field wildcard FieldWildcard :: l -> FieldUpdate l -- | An alt alternative in a case expression. data Alt l Alt :: l -> (Pat l) -> (GuardedAlts l) -> (Maybe (Binds l)) -> Alt l -- | The right-hand sides of a case alternative, which may be a -- single right-hand side or a set of guarded ones. data GuardedAlts l -- | -> exp UnGuardedAlt :: l -> (Exp l) -> GuardedAlts l -- | gdpat GuardedAlts :: l -> [GuardedAlt l] -> GuardedAlts l -- | A guarded case alternative | stmts -> -- exp. data GuardedAlt l GuardedAlt :: l -> [Stmt l] -> (Exp l) -> GuardedAlt l -- | An xml attribute, which is a name-expression pair. data XAttr l XAttr :: l -> (XName l) -> (Exp l) -> XAttr l -- | A pattern, to be matched against a value. data Pat l -- | variable PVar :: l -> (Name l) -> Pat l -- | literal constant PLit :: l -> (Literal l) -> Pat l -- | negated pattern PNeg :: l -> (Pat l) -> Pat l -- | n+k pattern PNPlusK :: l -> (Name l) -> Integer -> Pat l -- | pattern with an infix data constructor PInfixApp :: l -> (Pat l) -> (QName l) -> (Pat l) -> Pat l -- | data constructor and argument patterns PApp :: l -> (QName l) -> [Pat l] -> Pat l -- | tuple pattern PTuple :: l -> [Pat l] -> Pat l -- | list pattern PList :: l -> [Pat l] -> Pat l -- | parenthesized pattern PParen :: l -> (Pat l) -> Pat l -- | labelled pattern, record style PRec :: l -> (QName l) -> [PatField l] -> Pat l -- | @-pattern PAsPat :: l -> (Name l) -> (Pat l) -> Pat l -- | wildcard pattern: _ PWildCard :: l -> Pat l -- | irrefutable pattern: ~pat PIrrPat :: l -> (Pat l) -> Pat l -- | pattern with type signature PatTypeSig :: l -> (Pat l) -> (Type l) -> Pat l -- | view patterns of the form (exp -> pat) PViewPat :: l -> (Exp l) -> (Pat l) -> Pat l -- | regular list pattern PRPat :: l -> [RPat l] -> Pat l -- | XML element pattern PXTag :: l -> (XName l) -> [PXAttr l] -> (Maybe (Pat l)) -> [Pat l] -> Pat l -- | XML singleton element pattern PXETag :: l -> (XName l) -> [PXAttr l] -> (Maybe (Pat l)) -> Pat l -- | XML PCDATA pattern PXPcdata :: l -> String -> Pat l -- | XML embedded pattern PXPatTag :: l -> (Pat l) -> Pat l -- | XML regular list pattern PXRPats :: l -> [RPat l] -> Pat l -- | Explicit generics style type argument e.g. f {| Int |} x = -- ... PExplTypeArg :: l -> (QName l) -> (Type l) -> Pat l -- | quasi quote pattern: [$name| string |] PQuasiQuote :: l -> String -> String -> Pat l -- | strict (bang) pattern: f !x = ... PBangPat :: l -> (Pat l) -> Pat l -- | An fpat in a labeled record pattern. data PatField l -- | ordinary label-pattern pair PFieldPat :: l -> (QName l) -> (Pat l) -> PatField l -- | record field pun PFieldPun :: l -> (Name l) -> PatField l -- | record field wildcard PFieldWildcard :: l -> PatField l -- | An XML attribute in a pattern. data PXAttr l PXAttr :: l -> (XName l) -> (Pat l) -> PXAttr l -- | An entity in a regular pattern. data RPat l -- | operator pattern, e.g. pat* RPOp :: l -> (RPat l) -> (RPatOp l) -> RPat l -- | choice pattern, e.g. (1 | 2) RPEither :: l -> (RPat l) -> (RPat l) -> RPat l -- | sequence pattern, e.g. (| 1, 2, 3 |) RPSeq :: l -> [RPat l] -> RPat l -- | guarded pattern, e.g. (| p | p < 3 |) RPGuard :: l -> (Pat l) -> [Stmt l] -> RPat l -- | non-linear variable binding, e.g. (foo@:(1 | 2))* RPCAs :: l -> (Name l) -> (RPat l) -> RPat l -- | linear variable binding, e.g. foo@(1 | 2) RPAs :: l -> (Name l) -> (RPat l) -> RPat l -- | parenthesised pattern, e.g. (2*) RPParen :: l -> (RPat l) -> RPat l -- | an ordinary pattern RPPat :: l -> (Pat l) -> RPat l -- | A regular pattern operator. data RPatOp l -- | * = 0 or more RPStar :: l -> RPatOp l -- | *! = 0 or more, greedy RPStarG :: l -> RPatOp l -- | + = 1 or more RPPlus :: l -> RPatOp l -- | +! = 1 or more, greedy RPPlusG :: l -> RPatOp l -- | ? = 0 or 1 RPOpt :: l -> RPatOp l -- | ?! = 0 or 1, greedy RPOptG :: l -> RPatOp l -- | literal Values of this type hold the abstract value of the -- literal, along with the precise string representation used. For -- example, 10, 0o12 and 0xa have the same -- value representation, but each carry a different string -- representation. data Literal l -- | character literal Char :: l -> Char -> String -> Literal l -- | string literal String :: l -> String -> String -> Literal l -- | integer literal Int :: l -> Integer -> String -> Literal l -- | floating point literal Frac :: l -> Rational -> String -> Literal l -- | unboxed integer literal PrimInt :: l -> Integer -> String -> Literal l -- | unboxed word literal PrimWord :: l -> Integer -> String -> Literal l -- | unboxed float literal PrimFloat :: l -> Rational -> String -> Literal l -- | unboxed double literal PrimDouble :: l -> Rational -> String -> Literal l -- | unboxed character literal PrimChar :: l -> Char -> String -> Literal l -- | unboxed string literal PrimString :: l -> String -> String -> Literal l -- | The name of a Haskell module. data ModuleName l ModuleName :: l -> String -> ModuleName l -- | This type is used to represent qualified variables, and also qualified -- constructors. data QName l -- | name qualified with a module name Qual :: l -> (ModuleName l) -> (Name l) -> QName l -- | unqualified local name UnQual :: l -> (Name l) -> QName l -- | built-in constructor with special syntax Special :: l -> (SpecialCon l) -> QName l -- | This type is used to represent variables, and also constructors. data Name l -- | varid or conid. Ident :: l -> String -> Name l -- | varsym or consym Symbol :: l -> String -> Name l -- | Possibly qualified infix operators (qop), appearing in -- expressions. data QOp l -- | variable operator (qvarop) QVarOp :: l -> (QName l) -> QOp l -- | constructor operator (qconop) QConOp :: l -> (QName l) -> QOp l -- | Operators appearing in infix declarations are never -- qualified. data Op l -- | variable operator (varop) VarOp :: l -> (Name l) -> Op l -- | constructor operator (conop) ConOp :: l -> (Name l) -> Op l -- | Constructors with special syntax. These names are never qualified, and -- always refer to builtin type or data constructors. data SpecialCon l -- | unit type and data constructor () UnitCon :: l -> SpecialCon l -- | list type constructor [] ListCon :: l -> SpecialCon l -- | function type constructor -> FunCon :: l -> SpecialCon l -- | n-ary tuple type and data constructors (,) etc, -- possibly boxed (#,#) TupleCon :: l -> Boxed -> Int -> SpecialCon l -- | list data constructor (:) Cons :: l -> SpecialCon l -- | unboxed singleton tuple constructor (# #) UnboxedSingleCon :: l -> SpecialCon l -- | A name (cname) of a component of a class or data type in an -- import or export specification. data CName l -- | name of a method or field VarName :: l -> (Name l) -> CName l -- | name of a data constructor ConName :: l -> (Name l) -> CName l -- | An implicit parameter name. data IPName l -- | ?ident, non-linear implicit parameter IPDup :: l -> String -> IPName l -- | %ident, linear implicit parameter IPLin :: l -> String -> IPName l -- | The name of an xml element or attribute, possibly qualified with a -- namespace. data XName l XName :: l -> String -> XName l XDomName :: l -> String -> String -> XName l -- | A template haskell bracket expression. data Bracket l -- | expression bracket: [| ... |] ExpBracket :: l -> (Exp l) -> Bracket l -- | pattern bracket: [p| ... |] PatBracket :: l -> (Pat l) -> Bracket l -- | type bracket: [t| ... |] TypeBracket :: l -> (Type l) -> Bracket l -- | declaration bracket: [d| ... |] DeclBracket :: l -> [Decl l] -> Bracket l -- | A template haskell splice expression data Splice l -- | variable splice: $var IdSplice :: l -> String -> Splice l -- | parenthesised expression splice: $(exp) ParenSplice :: l -> (Exp l) -> Splice l -- | The safety of a foreign function call. data Safety l -- | unsafe PlayRisky :: l -> Safety l -- | safe (False) or threadsafe (True) PlaySafe :: l -> Bool -> Safety l -- | The calling convention of a foreign function call. data CallConv l StdCall :: l -> CallConv l CCall :: l -> CallConv l -- | A top level options pragma, preceding the module header. data ModulePragma l -- | LANGUAGE pragma LanguagePragma :: l -> [Name l] -> ModulePragma l -- | OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC OptionsPragma :: l -> (Maybe Tool) -> String -> ModulePragma l -- | ANN pragma with module scope AnnModulePragma :: l -> (Annotation l) -> ModulePragma l -- | Recognised tools for OPTIONS pragmas. data Tool GHC :: Tool HUGS :: Tool NHC98 :: Tool YHC :: Tool HADDOCK :: Tool UnknownTool :: String -> Tool -- | The body of a RULES pragma. data Rule l Rule :: l -> String -> (Maybe (Activation l)) -> (Maybe [RuleVar l]) -> (Exp l) -> (Exp l) -> Rule l -- | Variables used in a RULES pragma, optionally annotated with types data RuleVar l RuleVar :: l -> (Name l) -> RuleVar l TypedRuleVar :: l -> (Name l) -> (Type l) -> RuleVar l -- | Activation clause of a RULES pragma. data Activation l ActiveFrom :: l -> Int -> Activation l ActiveUntil :: l -> Int -> Activation l -- | An annotation through an ANN pragma. data Annotation l -- | An annotation for a declared name. Ann :: l -> (Name l) -> (Exp l) -> Annotation l -- | An annotation for a declared type. TypeAnn :: l -> (Name l) -> (Exp l) -> Annotation l -- | An annotation for the defining module. ModuleAnn :: l -> (Exp l) -> Annotation l prelude_mod :: l -> ModuleName l main_mod :: l -> ModuleName l main_name :: l -> Name l unit_con_name :: l -> QName l tuple_con_name :: l -> Boxed -> Int -> QName l list_cons_name :: l -> QName l unboxed_singleton_con_name :: l -> QName l unit_con :: l -> Exp l tuple_con :: l -> Boxed -> Int -> Exp l unboxed_singleton_con :: l -> Exp l as_name :: l -> Name l qualified_name :: l -> Name l hiding_name :: l -> Name l minus_name :: l -> Name l bang_name :: l -> Name l dot_name :: l -> Name l star_name :: l -> Name l export_name :: l -> Name l safe_name :: l -> Name l unsafe_name :: l -> Name l threadsafe_name :: l -> Name l stdcall_name :: l -> Name l ccall_name :: l -> Name l unit_tycon_name :: l -> QName l fun_tycon_name :: l -> QName l list_tycon_name :: l -> QName l tuple_tycon_name :: l -> Boxed -> Int -> QName l unboxed_singleton_tycon_name :: l -> QName l unit_tycon :: l -> Type l fun_tycon :: l -> Type l list_tycon :: l -> Type l tuple_tycon :: l -> Boxed -> Int -> Type l unboxed_singleton_tycon :: l -> Type l -- | AST nodes are annotated, and this class allows manipulation of the -- annotations. class Functor ast => Annotated ast ann :: Annotated ast => ast l -> l amap :: Annotated ast => (l -> l) -> ast l -> ast l -- | Test if two AST elements are equal modulo annotations. (=~=) :: (Annotated a, Eq (a ())) => a l1 -> a l2 -> Bool instance Typeable1 ModuleName instance Typeable1 Name instance Typeable1 IPName instance Typeable1 Op instance Typeable1 CName instance Typeable1 ImportSpec instance Typeable1 ImportSpecList instance Typeable1 ImportDecl instance Typeable1 Assoc instance Typeable1 DataOrNew instance Typeable Boxed instance Typeable1 SpecialCon instance Typeable1 QName instance Typeable1 ExportSpec instance Typeable1 ExportSpecList instance Typeable1 QOp instance Typeable1 Kind instance Typeable1 TyVarBind instance Typeable1 DeclHead instance Typeable1 FunDep instance Typeable1 Asst instance Typeable1 Type instance Typeable1 Context instance Typeable1 BangType instance Typeable1 FieldDecl instance Typeable1 ConDecl instance Typeable1 GadtDecl instance Typeable1 InstHead instance Typeable1 Deriving instance Typeable1 QualConDecl instance Typeable1 Literal instance Typeable1 XName instance Typeable1 Safety instance Typeable1 CallConv instance Typeable Tool instance Typeable1 Activation instance Typeable1 RuleVar instance Typeable1 WarningText instance Typeable1 ModuleHead instance Typeable1 RPatOp instance Typeable1 GuardedAlt instance Typeable1 Stmt instance Typeable1 Pat instance Typeable1 PatField instance Typeable1 RPat instance Typeable1 PXAttr instance Typeable1 Exp instance Typeable1 Alt instance Typeable1 GuardedAlts instance Typeable1 Binds instance Typeable1 IPBind instance Typeable1 Decl instance Typeable1 Rule instance Typeable1 Rhs instance Typeable1 GuardedRhs instance Typeable1 InstDecl instance Typeable1 ClassDecl instance Typeable1 Match instance Typeable1 Annotation instance Typeable1 FieldUpdate instance Typeable1 QualStmt instance Typeable1 Splice instance Typeable1 Bracket instance Typeable1 XAttr instance Typeable1 ModulePragma instance Typeable1 Module instance Eq l => Eq (ModuleName l) instance Ord l => Ord (ModuleName l) instance Show l => Show (ModuleName l) instance Data l => Data (ModuleName l) instance Eq l => Eq (Name l) instance Ord l => Ord (Name l) instance Show l => Show (Name l) instance Data l => Data (Name l) instance Eq l => Eq (IPName l) instance Ord l => Ord (IPName l) instance Show l => Show (IPName l) instance Data l => Data (IPName l) instance Eq l => Eq (Op l) instance Ord l => Ord (Op l) instance Show l => Show (Op l) instance Data l => Data (Op l) instance Eq l => Eq (CName l) instance Ord l => Ord (CName l) instance Show l => Show (CName l) instance Data l => Data (CName l) instance Eq l => Eq (ImportSpec l) instance Ord l => Ord (ImportSpec l) instance Show l => Show (ImportSpec l) instance Data l => Data (ImportSpec l) instance Eq l => Eq (ImportSpecList l) instance Ord l => Ord (ImportSpecList l) instance Show l => Show (ImportSpecList l) instance Data l => Data (ImportSpecList l) instance Eq l => Eq (ImportDecl l) instance Ord l => Ord (ImportDecl l) instance Show l => Show (ImportDecl l) instance Data l => Data (ImportDecl l) instance Eq l => Eq (Assoc l) instance Ord l => Ord (Assoc l) instance Show l => Show (Assoc l) instance Data l => Data (Assoc l) instance Eq l => Eq (DataOrNew l) instance Ord l => Ord (DataOrNew l) instance Show l => Show (DataOrNew l) instance Data l => Data (DataOrNew l) instance Eq Boxed instance Ord Boxed instance Show Boxed instance Data Boxed instance Eq l => Eq (SpecialCon l) instance Ord l => Ord (SpecialCon l) instance Show l => Show (SpecialCon l) instance Data l => Data (SpecialCon l) instance Eq l => Eq (QName l) instance Ord l => Ord (QName l) instance Show l => Show (QName l) instance Data l => Data (QName l) instance Eq l => Eq (ExportSpec l) instance Ord l => Ord (ExportSpec l) instance Show l => Show (ExportSpec l) instance Data l => Data (ExportSpec l) instance Eq l => Eq (ExportSpecList l) instance Ord l => Ord (ExportSpecList l) instance Show l => Show (ExportSpecList l) instance Data l => Data (ExportSpecList l) instance Eq l => Eq (QOp l) instance Ord l => Ord (QOp l) instance Show l => Show (QOp l) instance Data l => Data (QOp l) instance Eq l => Eq (Kind l) instance Ord l => Ord (Kind l) instance Show l => Show (Kind l) instance Data l => Data (Kind l) instance Eq l => Eq (TyVarBind l) instance Ord l => Ord (TyVarBind l) instance Show l => Show (TyVarBind l) instance Data l => Data (TyVarBind l) instance Eq l => Eq (DeclHead l) instance Ord l => Ord (DeclHead l) instance Show l => Show (DeclHead l) instance Data l => Data (DeclHead l) instance Eq l => Eq (FunDep l) instance Ord l => Ord (FunDep l) instance Show l => Show (FunDep l) instance Data l => Data (FunDep l) instance Eq l => Eq (Asst l) instance Ord l => Ord (Asst l) instance Show l => Show (Asst l) instance Data l => Data (Asst l) instance Eq l => Eq (Type l) instance Ord l => Ord (Type l) instance Show l => Show (Type l) instance Data l => Data (Type l) instance Eq l => Eq (Context l) instance Ord l => Ord (Context l) instance Show l => Show (Context l) instance Data l => Data (Context l) instance Eq l => Eq (BangType l) instance Ord l => Ord (BangType l) instance Show l => Show (BangType l) instance Data l => Data (BangType l) instance Eq l => Eq (FieldDecl l) instance Ord l => Ord (FieldDecl l) instance Show l => Show (FieldDecl l) instance Data l => Data (FieldDecl l) instance Eq l => Eq (ConDecl l) instance Ord l => Ord (ConDecl l) instance Show l => Show (ConDecl l) instance Data l => Data (ConDecl l) instance Eq l => Eq (GadtDecl l) instance Ord l => Ord (GadtDecl l) instance Show l => Show (GadtDecl l) instance Data l => Data (GadtDecl l) instance Eq l => Eq (InstHead l) instance Ord l => Ord (InstHead l) instance Show l => Show (InstHead l) instance Data l => Data (InstHead l) instance Eq l => Eq (Deriving l) instance Ord l => Ord (Deriving l) instance Show l => Show (Deriving l) instance Data l => Data (Deriving l) instance Eq l => Eq (QualConDecl l) instance Ord l => Ord (QualConDecl l) instance Show l => Show (QualConDecl l) instance Data l => Data (QualConDecl l) instance Eq l => Eq (Literal l) instance Ord l => Ord (Literal l) instance Show l => Show (Literal l) instance Data l => Data (Literal l) instance Eq l => Eq (XName l) instance Ord l => Ord (XName l) instance Show l => Show (XName l) instance Data l => Data (XName l) instance Eq l => Eq (Safety l) instance Ord l => Ord (Safety l) instance Show l => Show (Safety l) instance Data l => Data (Safety l) instance Eq l => Eq (CallConv l) instance Ord l => Ord (CallConv l) instance Show l => Show (CallConv l) instance Data l => Data (CallConv l) instance Eq Tool instance Ord Tool instance Show Tool instance Data Tool instance Eq l => Eq (Activation l) instance Ord l => Ord (Activation l) instance Show l => Show (Activation l) instance Data l => Data (Activation l) instance Eq l => Eq (RuleVar l) instance Ord l => Ord (RuleVar l) instance Show l => Show (RuleVar l) instance Data l => Data (RuleVar l) instance Eq l => Eq (WarningText l) instance Ord l => Ord (WarningText l) instance Show l => Show (WarningText l) instance Data l => Data (WarningText l) instance Eq l => Eq (ModuleHead l) instance Ord l => Ord (ModuleHead l) instance Show l => Show (ModuleHead l) instance Data l => Data (ModuleHead l) instance Eq l => Eq (RPatOp l) instance Ord l => Ord (RPatOp l) instance Show l => Show (RPatOp l) instance Data l => Data (RPatOp l) instance Eq l => Eq (GuardedAlt l) instance Ord l => Ord (GuardedAlt l) instance Show l => Show (GuardedAlt l) instance Data l => Data (GuardedAlt l) instance Eq l => Eq (Stmt l) instance Ord l => Ord (Stmt l) instance Show l => Show (Stmt l) instance Data l => Data (Stmt l) instance Eq l => Eq (Pat l) instance Ord l => Ord (Pat l) instance Show l => Show (Pat l) instance Data l => Data (Pat l) instance Eq l => Eq (PatField l) instance Ord l => Ord (PatField l) instance Show l => Show (PatField l) instance Data l => Data (PatField l) instance Eq l => Eq (RPat l) instance Ord l => Ord (RPat l) instance Show l => Show (RPat l) instance Data l => Data (RPat l) instance Eq l => Eq (PXAttr l) instance Ord l => Ord (PXAttr l) instance Show l => Show (PXAttr l) instance Data l => Data (PXAttr l) instance Eq l => Eq (Exp l) instance Ord l => Ord (Exp l) instance Show l => Show (Exp l) instance Data l => Data (Exp l) instance Eq l => Eq (Alt l) instance Ord l => Ord (Alt l) instance Show l => Show (Alt l) instance Data l => Data (Alt l) instance Eq l => Eq (GuardedAlts l) instance Ord l => Ord (GuardedAlts l) instance Show l => Show (GuardedAlts l) instance Data l => Data (GuardedAlts l) instance Eq l => Eq (Binds l) instance Ord l => Ord (Binds l) instance Show l => Show (Binds l) instance Data l => Data (Binds l) instance Eq l => Eq (IPBind l) instance Ord l => Ord (IPBind l) instance Show l => Show (IPBind l) instance Data l => Data (IPBind l) instance Eq l => Eq (Decl l) instance Ord l => Ord (Decl l) instance Show l => Show (Decl l) instance Data l => Data (Decl l) instance Eq l => Eq (Rule l) instance Ord l => Ord (Rule l) instance Show l => Show (Rule l) instance Data l => Data (Rule l) instance Eq l => Eq (Rhs l) instance Ord l => Ord (Rhs l) instance Show l => Show (Rhs l) instance Data l => Data (Rhs l) instance Eq l => Eq (GuardedRhs l) instance Ord l => Ord (GuardedRhs l) instance Show l => Show (GuardedRhs l) instance Data l => Data (GuardedRhs l) instance Eq l => Eq (InstDecl l) instance Ord l => Ord (InstDecl l) instance Show l => Show (InstDecl l) instance Data l => Data (InstDecl l) instance Eq l => Eq (ClassDecl l) instance Ord l => Ord (ClassDecl l) instance Show l => Show (ClassDecl l) instance Data l => Data (ClassDecl l) instance Eq l => Eq (Match l) instance Ord l => Ord (Match l) instance Show l => Show (Match l) instance Data l => Data (Match l) instance Eq l => Eq (Annotation l) instance Ord l => Ord (Annotation l) instance Show l => Show (Annotation l) instance Data l => Data (Annotation l) instance Eq l => Eq (FieldUpdate l) instance Ord l => Ord (FieldUpdate l) instance Show l => Show (FieldUpdate l) instance Data l => Data (FieldUpdate l) instance Eq l => Eq (QualStmt l) instance Ord l => Ord (QualStmt l) instance Show l => Show (QualStmt l) instance Data l => Data (QualStmt l) instance Eq l => Eq (Splice l) instance Ord l => Ord (Splice l) instance Show l => Show (Splice l) instance Data l => Data (Splice l) instance Eq l => Eq (Bracket l) instance Ord l => Ord (Bracket l) instance Show l => Show (Bracket l) instance Data l => Data (Bracket l) instance Eq l => Eq (XAttr l) instance Ord l => Ord (XAttr l) instance Show l => Show (XAttr l) instance Data l => Data (XAttr l) instance Eq l => Eq (ModulePragma l) instance Ord l => Ord (ModulePragma l) instance Show l => Show (ModulePragma l) instance Data l => Data (ModulePragma l) instance Eq l => Eq (Module l) instance Ord l => Ord (Module l) instance Show l => Show (Module l) instance Data l => Data (Module l) instance Annotated GuardedAlt instance Annotated GuardedAlts instance Annotated Alt instance Annotated FieldUpdate instance Annotated QualStmt instance Annotated Stmt instance Annotated PatField instance Annotated RPat instance Annotated RPatOp instance Annotated PXAttr instance Annotated Pat instance Annotated WarningText instance Annotated RuleVar instance Annotated Rule instance Annotated Activation instance Annotated ModulePragma instance Annotated CallConv instance Annotated Safety instance Annotated Splice instance Annotated Bracket instance Annotated XAttr instance Annotated XName instance Annotated Exp instance Annotated Literal instance Annotated Asst instance Annotated Context instance Annotated FunDep instance Annotated Kind instance Annotated TyVarBind instance Annotated Type instance Annotated GuardedRhs instance Annotated Rhs instance Annotated BangType instance Annotated InstDecl instance Annotated ClassDecl instance Annotated GadtDecl instance Annotated FieldDecl instance Annotated ConDecl instance Annotated QualConDecl instance Annotated Match instance Annotated IPBind instance Annotated Binds instance Annotated InstHead instance Annotated DeclHead instance Annotated DataOrNew instance Annotated Annotation instance Annotated Decl instance Annotated Deriving instance Annotated Assoc instance Annotated ImportSpec instance Annotated ImportSpecList instance Annotated ImportDecl instance Annotated ExportSpec instance Annotated ExportSpecList instance Annotated ModuleHead instance Annotated Module instance Annotated CName instance Annotated Op instance Annotated QOp instance Annotated IPName instance Annotated Name instance Annotated QName instance Annotated SpecialCon instance Annotated ModuleName instance Functor GuardedAlt instance Functor GuardedAlts instance Functor Alt instance Functor FieldUpdate instance Functor QualStmt instance Functor Stmt instance Functor PatField instance Functor RPat instance Functor RPatOp instance Functor PXAttr instance Functor Pat instance Functor WarningText instance Functor RuleVar instance Functor Rule instance Functor Activation instance Functor ModulePragma instance Functor CallConv instance Functor Safety instance Functor Splice instance Functor Bracket instance Functor XAttr instance Functor XName instance Functor Exp instance Functor Literal instance Functor Asst instance Functor Context instance Functor FunDep instance Functor Kind instance Functor TyVarBind instance Functor Type instance Functor GuardedRhs instance Functor Rhs instance Functor BangType instance Functor InstDecl instance Functor ClassDecl instance Functor GadtDecl instance Functor FieldDecl instance Functor ConDecl instance Functor QualConDecl instance Functor Match instance Functor IPBind instance Functor Binds instance Functor Deriving instance Functor InstHead instance Functor DeclHead instance Functor DataOrNew instance Functor Annotation instance Functor Decl instance Functor Assoc instance Functor ImportSpec instance Functor ImportSpecList instance Functor ImportDecl instance Functor ExportSpec instance Functor ExportSpecList instance Functor ModuleHead instance Functor Module instance Functor CName instance Functor Op instance Functor QOp instance Functor IPName instance Functor Name instance Functor QName instance Functor SpecialCon instance Functor ModuleName -- | This module contains combinators to use when building Haskell source -- trees programmatically, as opposed to parsing them from a string. The -- contents here are quite experimental and will likely receive a lot of -- attention when the rest has stabilised. module Language.Haskell.Exts.Annotated.Build -- | An identifier with the given string as its name. The string should be -- a valid Haskell identifier. name :: l -> String -> Name l -- | A symbol identifier. The string should be a valid Haskell symbol -- identifier. sym :: l -> String -> Name l -- | A local variable as expression. var :: l -> Name l -> Exp l -- | Use the given identifier as an operator. op :: l -> Name l -> QOp l -- | A qualified variable as expression. qvar :: l -> ModuleName l -> Name l -> Exp l -- | A pattern variable. pvar :: l -> Name l -> Pat l -- | Application of expressions by juxtaposition. app :: l -> Exp l -> Exp l -> Exp l -- | Apply an operator infix. infixApp :: l -> Exp l -> QOp l -> Exp l -> Exp l -- | Apply a function to a list of arguments. appFun :: [l] -> Exp l -> [Exp l] -> Exp l -- | A constructor pattern, with argument patterns. pApp :: l -> Name l -> [Pat l] -> Pat l -- | A tuple expression. tuple :: l -> [Exp l] -> Exp l -- | A tuple pattern. pTuple :: l -> [Pat l] -> Pat l -- | A tuple expression consisting of variables only. varTuple :: l -> [Name l] -> Exp l -- | A tuple pattern consisting of variables only. pvarTuple :: l -> [Name l] -> Pat l -- | A function with a given name. function :: l -> String -> Exp l -- | A literal string expression. strE :: l -> String -> Exp l -- | A literal character expression. charE :: l -> Char -> Exp l -- | A literal integer expression. intE :: l -> Integer -> Exp l -- | A literal string pattern. strP :: l -> String -> Pat l -- | A literal character pattern. charP :: l -> Char -> Pat l -- | A literal integer pattern. intP :: l -> Integer -> Pat l -- | A do block formed by the given statements. The last statement in the -- list should be a Qualifier expression. doE :: l -> [Stmt l] -> Exp l -- | Lambda abstraction, given a list of argument patterns and an -- expression body. lamE :: l -> [Pat l] -> Exp l -> Exp l -- | A let ... in block. letE :: l -> [Decl l] -> Exp l -> Exp l -- | A case expression. caseE :: l -> Exp l -> [Alt l] -> Exp l -- | An unguarded alternative in a case expression. alt :: l -> Pat l -> Exp l -> Alt l -- | An alternative with a single guard in a case expression. altGW :: l -> Pat l -> [Stmt l] -> Exp l -> Binds l -> Alt l -- | A list expression. listE :: l -> [Exp l] -> Exp l -- | The empty list expression. eList :: l -> Exp l -- | The empty list pattern. peList :: l -> Pat l -- | Put parentheses around an expression. paren :: l -> Exp l -> Exp l -- | Put parentheses around a pattern. pParen :: l -> Pat l -> Pat l -- | A qualifier expression statement. qualStmt :: l -> Exp l -> Stmt l -- | A generator statement: pat <- exp genStmt :: l -> Pat l -> Exp l -> Stmt l -- | A let binding group as a statement. letStmt :: l -> [Decl l] -> Stmt l -- | Hoist a set of declarations to a binding group. binds :: l -> [Decl l] -> Binds l -- | An empty binding group. noBinds :: l -> Binds l -- | The wildcard pattern: _ wildcard :: l -> Pat l -- | Generate k names by appending numbers 1 through k to a given string. genNames :: l -> String -> Int -> [Name l] -- | A function with a single clause sfun :: l -> Name l -> [Name l] -> Rhs l -> Maybe (Binds l) -> Decl l -- | A function with a single clause, a single argument, no guards and no -- where declarations simpleFun :: l -> Name l -> Name l -> Exp l -> Decl l -- | A pattern bind where the pattern is a variable, and where there are no -- guards and no 'where' clause. patBind :: l -> Pat l -> Exp l -> Decl l -- | A pattern bind where the pattern is a variable, and where there are no -- guards, but with a 'where' clause. patBindWhere :: l -> Pat l -> Exp l -> [Decl l] -> Decl l -- | Bind an identifier to an expression. nameBind :: l -> Name l -> Exp l -> Decl l -- | Apply function of a given name to a list of arguments. metaFunction :: l -> String -> [Exp l] -> Exp l -- | Apply a constructor of a given name to a list of pattern arguments, -- forming a constructor pattern. metaConPat :: l -> String -> [Pat l] -> Pat l module Language.Haskell.Exts.Comments -- | A Haskell comment. The Bool is True if the comment is -- multi-line, i.e. {- -}. data Comment Comment :: Bool -> SrcSpan -> String -> Comment instance Typeable Comment instance Eq Comment instance Show Comment instance Data Comment -- | Exact-printer for Haskell abstract syntax. The input is a -- (semi-concrete) abstract syntax tree, annotated with exact source -- information to enable printing the tree exactly as it was parsed. module Language.Haskell.Exts.Annotated.ExactPrint -- | Print an AST exactly as specified by the annotations on the nodes in -- the tree. exactPrint :: ExactP ast => ast SrcSpanInfo -> [Comment] -> String class Annotated ast => ExactP ast instance ExactP IPBind instance ExactP FieldDecl instance ExactP Activation instance ExactP RuleVar instance ExactP Rule instance ExactP Safety instance ExactP CallConv instance ExactP Binds instance ExactP XName instance ExactP PXAttr instance ExactP RPatOp instance ExactP RPat instance ExactP PatField instance ExactP Pat instance ExactP GuardedRhs instance ExactP Rhs instance ExactP Match instance ExactP GuardedAlt instance ExactP GuardedAlts instance ExactP Alt instance ExactP XAttr instance ExactP Bracket instance ExactP QualStmt instance ExactP Stmt instance ExactP FieldUpdate instance ExactP Exp instance ExactP Splice instance ExactP BangType instance ExactP GadtDecl instance ExactP ConDecl instance ExactP QualConDecl instance ExactP FunDep instance ExactP InstDecl instance ExactP ClassDecl instance ExactP Deriving instance ExactP Asst instance ExactP Context instance ExactP Type instance ExactP Kind instance ExactP TyVarBind instance ExactP InstHead instance ExactP DeclHead instance ExactP Annotation instance ExactP Decl instance ExactP DataOrNew instance ExactP Assoc instance ExactP WarningText instance ExactP ModulePragma instance ExactP ModuleHead instance ExactP Module instance ExactP ImportDecl instance ExactP ImportSpec instance ExactP ImportSpecList instance ExactP ExportSpecList instance ExactP ExportSpec instance ExactP CName instance ExactP Op instance ExactP QOp instance ExactP IPName instance ExactP Name instance ExactP QName instance ExactP SpecialCon instance ExactP ModuleName instance ExactP Literal instance Monad EP -- | This entire module should be replaced with Language.Haskell.Extension -- from cabal, but we must wait for a release of cabal that includes the -- XmlSyntax and RegularPatterns extensions. module Language.Haskell.Exts.Extension -- | This datatype is a copy of the one in Cabal's -- Language.Haskell.Extension module. The intention is to eventually -- import it from Cabal, but we need to wait for the next release of -- Cabal which includes XmlSyntax and RegularPatterns. data Extension OverlappingInstances :: Extension UndecidableInstances :: Extension IncoherentInstances :: Extension RecursiveDo :: Extension ParallelListComp :: Extension MultiParamTypeClasses :: Extension NoMonomorphismRestriction :: Extension FunctionalDependencies :: Extension ExplicitForall :: Extension Rank2Types :: Extension RankNTypes :: Extension PolymorphicComponents :: Extension ExistentialQuantification :: Extension ScopedTypeVariables :: Extension ImplicitParams :: Extension FlexibleContexts :: Extension FlexibleInstances :: Extension EmptyDataDecls :: Extension CPP :: Extension KindSignatures :: Extension BangPatterns :: Extension TypeSynonymInstances :: Extension TemplateHaskell :: Extension ForeignFunctionInterface :: Extension Arrows :: Extension Generics :: Extension NoImplicitPrelude :: Extension NamedFieldPuns :: Extension PatternGuards :: Extension GeneralizedNewtypeDeriving :: Extension ExtensibleRecords :: Extension RestrictedTypeSynonyms :: Extension HereDocuments :: Extension MagicHash :: Extension TypeFamilies :: Extension StandaloneDeriving :: Extension UnicodeSyntax :: Extension PatternSignatures :: Extension UnliftedFFITypes :: Extension LiberalTypeSynonyms :: Extension TypeOperators :: Extension RecordWildCards :: Extension RecordPuns :: Extension DisambiguateRecordFields :: Extension OverloadedStrings :: Extension GADTs :: Extension MonoPatBinds :: Extension NoMonoPatBinds :: Extension RelaxedPolyRec :: Extension ExtendedDefaultRules :: Extension UnboxedTuples :: Extension DeriveDataTypeable :: Extension ConstrainedClassMethods :: Extension PackageImports :: Extension ImpredicativeTypes :: Extension NewQualifiedOperators :: Extension PostfixOperators :: Extension QuasiQuotes :: Extension TransformListComp :: Extension ViewPatterns :: Extension XmlSyntax :: Extension RegularPatterns :: Extension TupleSections :: Extension UnknownExtension :: String -> Extension -- | A clever version of read that returns an UnknownExtension if -- the string is not recognised. classifyExtension :: String -> Extension -- | Certain extensions imply other extensions, and this function makes the -- implication explicit. This also handles deprecated extensions, which -- imply their replacements. The returned valued is the transitive -- closure of implied extensions. impliesExts :: [Extension] -> [Extension] -- | The list of extensions enabled by GHC's portmanteau -fglasgow-exts -- flag. glasgowExts :: [Extension] -- | List of all known extensions. Poor man's Enum instance (we -- can't enum with the UnknownExtension constructor). knownExtensions :: [Extension] instance Eq Extension instance Ord Extension instance Show Extension instance Read Extension -- | A suite of datatypes describing the abstract syntax of Haskell 98 -- http://www.haskell.org/onlinereport/ plus registered -- extensions, including: -- -- module Language.Haskell.Exts.Syntax -- | A complete Haskell source module. data Module Module :: SrcLoc -> ModuleName -> [ModulePragma] -> (Maybe WarningText) -> (Maybe [ExportSpec]) -> [ImportDecl] -> [Decl] -> Module -- | Warning text to optionally use in the module header of e.g. a -- deprecated module. data WarningText DeprText :: String -> WarningText WarnText :: String -> WarningText -- | An item in a module's export specification. data ExportSpec -- | variable EVar :: QName -> ExportSpec -- | T: a class or datatype exported abstractly, or a type -- synonym. EAbs :: QName -> ExportSpec -- | T(..): a class exported with all of its methods, or a -- datatype exported with all of its constructors. EThingAll :: QName -> ExportSpec -- | T(C_1,...,C_n): a class exported with some of its methods, or -- a datatype exported with some of its constructors. EThingWith :: QName -> [CName] -> ExportSpec -- | module M: re-export a module. EModuleContents :: ModuleName -> ExportSpec -- | An import declaration. data ImportDecl ImportDecl :: SrcLoc -> ModuleName -> Bool -> Bool -> Maybe String -> Maybe ModuleName -> Maybe (Bool, [ImportSpec]) -> ImportDecl -- | position of the import keyword. importLoc :: ImportDecl -> SrcLoc -- | name of the module imported. importModule :: ImportDecl -> ModuleName -- | imported qualified? importQualified :: ImportDecl -> Bool -- | imported with {-# SOURCE #-}? importSrc :: ImportDecl -> Bool -- | imported with explicit package name importPkg :: ImportDecl -> Maybe String -- | optional alias name in an as clause. importAs :: ImportDecl -> Maybe ModuleName -- | optional list of import specifications. The Bool is True -- if the names are excluded by hiding. importSpecs :: ImportDecl -> Maybe (Bool, [ImportSpec]) -- | An import specification, representing a single explicit item imported -- (or hidden) from a module. data ImportSpec -- | variable IVar :: Name -> ImportSpec -- | T: the name of a class, datatype or type synonym. IAbs :: Name -> ImportSpec -- | T(..): a class imported with all of its methods, or a -- datatype imported with all of its constructors. IThingAll :: Name -> ImportSpec -- | T(C_1,...,C_n): a class imported with some of its methods, or -- a datatype imported with some of its constructors. IThingWith :: Name -> [CName] -> ImportSpec -- | Associativity of an operator. data Assoc -- | non-associative operator (declared with infix) AssocNone :: Assoc -- | left-associative operator (declared with infixl). AssocLeft :: Assoc -- | right-associative operator (declared with infixr) AssocRight :: Assoc -- | A top-level declaration. data Decl -- | A type declaration TypeDecl :: SrcLoc -> Name -> [TyVarBind] -> Type -> Decl -- | A type family declaration TypeFamDecl :: SrcLoc -> Name -> [TyVarBind] -> (Maybe Kind) -> Decl -- | A data OR newtype declaration DataDecl :: SrcLoc -> DataOrNew -> Context -> Name -> [TyVarBind] -> [QualConDecl] -> [Deriving] -> Decl -- | A data OR newtype declaration, GADT style GDataDecl :: SrcLoc -> DataOrNew -> Context -> Name -> [TyVarBind] -> (Maybe Kind) -> [GadtDecl] -> [Deriving] -> Decl -- | A data family declaration DataFamDecl :: SrcLoc -> Context -> Name -> [TyVarBind] -> (Maybe Kind) -> Decl -- | A type family instance declaration TypeInsDecl :: SrcLoc -> Type -> Type -> Decl -- | A data family instance declaration DataInsDecl :: SrcLoc -> DataOrNew -> Type -> [QualConDecl] -> [Deriving] -> Decl -- | A data family instance declaration, GADT style GDataInsDecl :: SrcLoc -> DataOrNew -> Type -> (Maybe Kind) -> [GadtDecl] -> [Deriving] -> Decl -- | A declaration of a type class ClassDecl :: SrcLoc -> Context -> Name -> [TyVarBind] -> [FunDep] -> [ClassDecl] -> Decl -- | An declaration of a type class instance InstDecl :: SrcLoc -> Context -> QName -> [Type] -> [InstDecl] -> Decl -- | A standalone deriving declaration DerivDecl :: SrcLoc -> Context -> QName -> [Type] -> Decl -- | A declaration of operator fixity InfixDecl :: SrcLoc -> Assoc -> Int -> [Op] -> Decl -- | A declaration of default types DefaultDecl :: SrcLoc -> [Type] -> Decl -- | A Template Haskell splicing declaration SpliceDecl :: SrcLoc -> Exp -> Decl -- | A type signature declaration TypeSig :: SrcLoc -> [Name] -> Type -> Decl -- | A set of function binding clauses FunBind :: [Match] -> Decl -- | A pattern binding PatBind :: SrcLoc -> Pat -> (Maybe Type) -> Rhs -> Binds -> Decl -- | A foreign import declaration ForImp :: SrcLoc -> CallConv -> Safety -> String -> Name -> Type -> Decl -- | A foreign export declaration ForExp :: SrcLoc -> CallConv -> String -> Name -> Type -> Decl -- | A RULES pragma RulePragmaDecl :: SrcLoc -> [Rule] -> Decl -- | A DEPRECATED pragma DeprPragmaDecl :: SrcLoc -> [([Name], String)] -> Decl -- | A WARNING pragma WarnPragmaDecl :: SrcLoc -> [([Name], String)] -> Decl -- | An INLINE pragma InlineSig :: SrcLoc -> Bool -> Activation -> QName -> Decl -- | An INLINE CONLIKE pragma InlineConlikeSig :: SrcLoc -> Activation -> QName -> Decl -- | A SPECIALISE pragma SpecSig :: SrcLoc -> QName -> [Type] -> Decl -- | A SPECIALISE INLINE pragma SpecInlineSig :: SrcLoc -> Bool -> Activation -> QName -> [Type] -> Decl -- | A SPECIALISE instance pragma InstSig :: SrcLoc -> Context -> QName -> [Type] -> Decl -- | An ANN pragma AnnPragma :: SrcLoc -> Annotation -> Decl -- | A binding group inside a let or where clause. data Binds -- | An ordinary binding group BDecls :: [Decl] -> Binds -- | A binding group for implicit parameters IPBinds :: [IPBind] -> Binds -- | A binding of an implicit parameter. data IPBind IPBind :: SrcLoc -> IPName -> Exp -> IPBind -- | Declarations inside a class declaration. data ClassDecl -- | ordinary declaration ClsDecl :: Decl -> ClassDecl -- | declaration of an associated data type ClsDataFam :: SrcLoc -> Context -> Name -> [TyVarBind] -> (Maybe Kind) -> ClassDecl -- | declaration of an associated type synonym ClsTyFam :: SrcLoc -> Name -> [TyVarBind] -> (Maybe Kind) -> ClassDecl -- | default choice for an associated type synonym ClsTyDef :: SrcLoc -> Type -> Type -> ClassDecl -- | Declarations inside an instance declaration. data InstDecl -- | ordinary declaration InsDecl :: Decl -> InstDecl -- | an associated type definition InsType :: SrcLoc -> Type -> Type -> InstDecl -- | an associated data type implementation InsData :: SrcLoc -> DataOrNew -> Type -> [QualConDecl] -> [Deriving] -> InstDecl -- | an associated data type implemented using GADT style InsGData :: SrcLoc -> DataOrNew -> Type -> (Maybe Kind) -> [GadtDecl] -> [Deriving] -> InstDecl -- | A single derived instance, which may have arguments since it may be a -- MPTC. type Deriving = (QName, [Type]) -- | A flag stating whether a declaration is a data or newtype declaration. data DataOrNew DataType :: DataOrNew NewType :: DataOrNew -- | Declaration of an ordinary data constructor. data ConDecl -- | ordinary data constructor ConDecl :: Name -> [BangType] -> ConDecl -- | infix data constructor InfixConDecl :: BangType -> Name -> BangType -> ConDecl -- | record constructor RecDecl :: Name -> [([Name], BangType)] -> ConDecl -- | A single constructor declaration within a data type declaration, which -- may have an existential quantification binding. data QualConDecl QualConDecl :: SrcLoc -> [TyVarBind] -> Context -> ConDecl -> QualConDecl -- | A single constructor declaration in a GADT data type declaration. data GadtDecl GadtDecl :: SrcLoc -> Name -> Type -> GadtDecl -- | The type of a constructor argument or field, optionally including a -- strictness annotation. data BangType -- | strict component, marked with "!" BangedTy :: Type -> BangType -- | non-strict component UnBangedTy :: Type -> BangType -- | unboxed component, marked with an UNPACK pragma UnpackedTy :: Type -> BangType -- | Clauses of a function binding. data Match Match :: SrcLoc -> Name -> [Pat] -> (Maybe Type) -> Rhs -> Binds -> Match -- | The right hand side of a function or pattern binding. data Rhs -- | unguarded right hand side (exp) UnGuardedRhs :: Exp -> Rhs -- | guarded right hand side (gdrhs) GuardedRhss :: [GuardedRhs] -> Rhs -- | A guarded right hand side | stmts = -- exp. The guard is a series of statements when using pattern -- guards, otherwise it will be a single qualifier expression. data GuardedRhs GuardedRhs :: SrcLoc -> [Stmt] -> Exp -> GuardedRhs -- | A context is a set of assertions type Context = [Asst] -- | A functional dependency, given on the form l1 l2 ... ln -> r2 r3 .. -- rn data FunDep FunDep :: [Name] -> [Name] -> FunDep -- | Class assertions. In Haskell 98, the argument would be a tyvar, -- but this definition allows multiple parameters, and allows them to be -- types. Also extended with support for implicit parameters and -- equality constraints. data Asst -- | ordinary class assertion ClassA :: QName -> [Type] -> Asst -- | class assertion where the class name is given infix InfixA :: Type -> QName -> Type -> Asst -- | implicit parameter assertion IParam :: IPName -> Type -> Asst -- | type equality constraint EqualP :: Type -> Type -> Asst -- | A type qualified with a context. An unqualified type has an empty -- context. data Type -- | qualified type TyForall :: (Maybe [TyVarBind]) -> Context -> Type -> Type -- | function type TyFun :: Type -> Type -> Type -- | tuple type, possibly boxed TyTuple :: Boxed -> [Type] -> Type -- | list syntax, e.g. [a], as opposed to [] a TyList :: Type -> Type -- | application of a type constructor TyApp :: Type -> Type -> Type -- | type variable TyVar :: Name -> Type -- | named type or type constructor TyCon :: QName -> Type -- | type surrounded by parentheses TyParen :: Type -> Type -- | infix type constructor TyInfix :: Type -> QName -> Type -> Type -- | type with explicit kind signature TyKind :: Type -> Kind -> Type -- | Flag denoting whether a tuple is boxed or unboxed. data Boxed Boxed :: Boxed Unboxed :: Boxed -- | An explicit kind annotation. data Kind -- | *, the kind of types KindStar :: Kind -- | !, the kind of unboxed types KindBang :: Kind -- | ->, the kind of a type constructor KindFn :: Kind -> Kind -> Kind -- | a kind surrounded by parentheses KindParen :: Kind -> Kind -- | a kind variable (as of yet unsupported by compilers) KindVar :: Name -> Kind -- | A type variable declaration, optionally with an explicit kind -- annotation. data TyVarBind -- | variable binding with kind annotation KindedVar :: Name -> Kind -> TyVarBind -- | ordinary variable binding UnkindedVar :: Name -> TyVarBind -- | Haskell expressions. data Exp -- | variable Var :: QName -> Exp -- | implicit parameter variable IPVar :: IPName -> Exp -- | data constructor Con :: QName -> Exp -- | literal constant Lit :: Literal -> Exp -- | infix application InfixApp :: Exp -> QOp -> Exp -> Exp -- | ordinary application App :: Exp -> Exp -> Exp -- | negation expression -exp (unary minus) NegApp :: Exp -> Exp -- | lambda expression Lambda :: SrcLoc -> [Pat] -> Exp -> Exp -- | local declarations with let ... in ... Let :: Binds -> Exp -> Exp -- | if exp then exp else -- exp If :: Exp -> Exp -> Exp -> Exp -- | case exp of alts Case :: Exp -> [Alt] -> Exp -- | do-expression: the last statement in the list should be an -- expression. Do :: [Stmt] -> Exp -- | mdo-expression MDo :: [Stmt] -> Exp -- | tuple expression Tuple :: [Exp] -> Exp -- | tuple section expression, e.g. (,,3) TupleSection :: [Maybe Exp] -> Exp -- | list expression List :: [Exp] -> Exp -- | parenthesised expression Paren :: Exp -> Exp -- | left section (exp qop) LeftSection :: Exp -> QOp -> Exp -- | right section (qop exp) RightSection :: QOp -> Exp -> Exp -- | record construction expression RecConstr :: QName -> [FieldUpdate] -> Exp -- | record update expression RecUpdate :: Exp -> [FieldUpdate] -> Exp -- | unbounded arithmetic sequence, incrementing by 1: [from ..] EnumFrom :: Exp -> Exp -- | bounded arithmetic sequence, incrementing by 1 [from .. to] EnumFromTo :: Exp -> Exp -> Exp -- | unbounded arithmetic sequence, with first two elements given -- [from, then ..] EnumFromThen :: Exp -> Exp -> Exp -- | bounded arithmetic sequence, with first two elements given [from, -- then .. to] EnumFromThenTo :: Exp -> Exp -> Exp -> Exp -- | ordinary list comprehension ListComp :: Exp -> [QualStmt] -> Exp -- | parallel list comprehension ParComp :: Exp -> [[QualStmt]] -> Exp -- | expression with explicit type signature ExpTypeSig :: SrcLoc -> Exp -> Type -> Exp -- | 'x for template haskell reifying of expressions VarQuote :: QName -> Exp -- | ''T for template haskell reifying of types TypQuote :: QName -> Exp -- | template haskell bracket expression BracketExp :: Bracket -> Exp -- | template haskell splice expression SpliceExp :: Splice -> Exp -- | quasi-quotaion: [$name| string |] QuasiQuote :: String -> String -> Exp -- | xml element, with attributes and children XTag :: SrcLoc -> XName -> [XAttr] -> (Maybe Exp) -> [Exp] -> Exp -- | empty xml element, with attributes XETag :: SrcLoc -> XName -> [XAttr] -> (Maybe Exp) -> Exp -- | PCDATA child element XPcdata :: String -> Exp -- | escaped haskell expression inside xml XExpTag :: Exp -> Exp -- | children of an xml element XChildTag :: SrcLoc -> [Exp] -> Exp -- | CORE pragma CorePragma :: String -> Exp -> Exp -- | SCC pragma SCCPragma :: String -> Exp -> Exp -- | GENERATED pragma GenPragma :: String -> (Int, Int) -> (Int, Int) -> Exp -> Exp -- | arrows proc: proc pat -> exp Proc :: SrcLoc -> Pat -> Exp -> Exp -- | arrow application (from left): exp -< exp LeftArrApp :: Exp -> Exp -> Exp -- | arrow application (from right): exp >- exp RightArrApp :: Exp -> Exp -> Exp -- | higher-order arrow application (from left): exp -- -<< exp LeftArrHighApp :: Exp -> Exp -> Exp -- | higher-order arrow application (from right): exp -- >>- exp RightArrHighApp :: Exp -> Exp -> Exp -- | A statement, representing both a stmt in a -- do-expression, an ordinary qual in a list -- comprehension, as well as a stmt in a pattern guard. data Stmt -- | a generator: pat <- exp Generator :: SrcLoc -> Pat -> Exp -> Stmt -- | an exp by itself: in a do-expression, an action whose -- result is discarded; in a list comprehension and pattern guard, a -- guard expression Qualifier :: Exp -> Stmt -- | local bindings LetStmt :: Binds -> Stmt -- | a recursive binding group for arrows RecStmt :: [Stmt] -> Stmt -- | A general transqual in a list comprehension, which could -- potentially be a transform of the kind enabled by TransformListComp. data QualStmt -- | an ordinary statement QualStmt :: Stmt -> QualStmt -- | then exp ThenTrans :: Exp -> QualStmt -- | then exp by exp ThenBy :: Exp -> Exp -> QualStmt -- | then group by exp GroupBy :: Exp -> QualStmt -- | then group using exp GroupUsing :: Exp -> QualStmt -- | then group by exp using -- exp GroupByUsing :: Exp -> Exp -> QualStmt -- | An fbind in a labeled construction or update expression. data FieldUpdate -- | ordinary label-expresion pair FieldUpdate :: QName -> Exp -> FieldUpdate -- | record field pun FieldPun :: Name -> FieldUpdate -- | record field wildcard FieldWildcard :: FieldUpdate -- | An alt alternative in a case expression. data Alt Alt :: SrcLoc -> Pat -> GuardedAlts -> Binds -> Alt -- | The right-hand sides of a case alternative, which may be a -- single right-hand side or a set of guarded ones. data GuardedAlts -- | -> exp UnGuardedAlt :: Exp -> GuardedAlts -- | gdpat GuardedAlts :: [GuardedAlt] -> GuardedAlts -- | A guarded case alternative | stmts -> -- exp. data GuardedAlt GuardedAlt :: SrcLoc -> [Stmt] -> Exp -> GuardedAlt -- | An xml attribute, which is a name-expression pair. data XAttr XAttr :: XName -> Exp -> XAttr -- | A pattern, to be matched against a value. data Pat -- | variable PVar :: Name -> Pat -- | literal constant PLit :: Literal -> Pat -- | negated pattern PNeg :: Pat -> Pat -- | n+k pattern PNPlusK :: Name -> Integer -> Pat -- | pattern with an infix data constructor PInfixApp :: Pat -> QName -> Pat -> Pat -- | data constructor and argument patterns PApp :: QName -> [Pat] -> Pat -- | tuple pattern PTuple :: [Pat] -> Pat -- | list pattern PList :: [Pat] -> Pat -- | parenthesized pattern PParen :: Pat -> Pat -- | labelled pattern, record style PRec :: QName -> [PatField] -> Pat -- | @-pattern PAsPat :: Name -> Pat -> Pat -- | wildcard pattern: _ PWildCard :: Pat -- | irrefutable pattern: ~pat PIrrPat :: Pat -> Pat -- | pattern with type signature PatTypeSig :: SrcLoc -> Pat -> Type -> Pat -- | view patterns of the form (exp -> pat) PViewPat :: Exp -> Pat -> Pat -- | regular list pattern PRPat :: [RPat] -> Pat -- | XML element pattern PXTag :: SrcLoc -> XName -> [PXAttr] -> (Maybe Pat) -> [Pat] -> Pat -- | XML singleton element pattern PXETag :: SrcLoc -> XName -> [PXAttr] -> (Maybe Pat) -> Pat -- | XML PCDATA pattern PXPcdata :: String -> Pat -- | XML embedded pattern PXPatTag :: Pat -> Pat -- | XML regular list pattern PXRPats :: [RPat] -> Pat -- | Explicit generics style type argument e.g. f {| Int |} x = -- ... PExplTypeArg :: QName -> Type -> Pat -- | quasi quote patter: [$name| string |] PQuasiQuote :: String -> String -> Pat -- | strict (bang) pattern: f !x = ... PBangPat :: Pat -> Pat -- | An fpat in a labeled record pattern. data PatField -- | ordinary label-pattern pair PFieldPat :: QName -> Pat -> PatField -- | record field pun PFieldPun :: Name -> PatField -- | record field wildcard PFieldWildcard :: PatField -- | An XML attribute in a pattern. data PXAttr PXAttr :: XName -> Pat -> PXAttr -- | An entity in a regular pattern. data RPat -- | operator pattern, e.g. pat* RPOp :: RPat -> RPatOp -> RPat -- | choice pattern, e.g. (1 | 2) RPEither :: RPat -> RPat -> RPat -- | sequence pattern, e.g. (| 1, 2, 3 |) RPSeq :: [RPat] -> RPat -- | guarded pattern, e.g. (| p | p < 3 |) RPGuard :: Pat -> [Stmt] -> RPat -- | non-linear variable binding, e.g. (foo@:(1 | 2))* RPCAs :: Name -> RPat -> RPat -- | linear variable binding, e.g. foo@(1 | 2) RPAs :: Name -> RPat -> RPat -- | parenthesised pattern, e.g. (2*) RPParen :: RPat -> RPat -- | an ordinary pattern RPPat :: Pat -> RPat -- | A regular pattern operator. data RPatOp -- | * = 0 or more RPStar :: RPatOp -- | *! = 0 or more, greedy RPStarG :: RPatOp -- | + = 1 or more RPPlus :: RPatOp -- | +! = 1 or more, greedy RPPlusG :: RPatOp -- | ? = 0 or 1 RPOpt :: RPatOp -- | ?! = 0 or 1, greedy RPOptG :: RPatOp -- | literal Values of this type hold the abstract value of the -- literal, not the precise string representation used. For example, -- 10, 0o12 and 0xa have the same -- representation. data Literal -- | character literal Char :: Char -> Literal -- | string literal String :: String -> Literal -- | integer literal Int :: Integer -> Literal -- | floating point literal Frac :: Rational -> Literal -- | unboxed integer literal PrimInt :: Integer -> Literal -- | unboxed word literal PrimWord :: Integer -> Literal -- | unboxed float literal PrimFloat :: Rational -> Literal -- | unboxed double literal PrimDouble :: Rational -> Literal -- | unboxed character literal PrimChar :: Char -> Literal -- | unboxed string literal PrimString :: String -> Literal -- | The name of a Haskell module. newtype ModuleName ModuleName :: String -> ModuleName -- | This type is used to represent qualified variables, and also qualified -- constructors. data QName -- | name qualified with a module name Qual :: ModuleName -> Name -> QName -- | unqualified local name UnQual :: Name -> QName -- | built-in constructor with special syntax Special :: SpecialCon -> QName -- | This type is used to represent variables, and also constructors. data Name -- | varid or conid. Ident :: String -> Name -- | varsym or consym Symbol :: String -> Name -- | Possibly qualified infix operators (qop), appearing in -- expressions. data QOp -- | variable operator (qvarop) QVarOp :: QName -> QOp -- | constructor operator (qconop) QConOp :: QName -> QOp -- | Operators appearing in infix declarations are never -- qualified. data Op -- | variable operator (varop) VarOp :: Name -> Op -- | constructor operator (conop) ConOp :: Name -> Op -- | Constructors with special syntax. These names are never qualified, and -- always refer to builtin type or data constructors. data SpecialCon -- | unit type and data constructor () UnitCon :: SpecialCon -- | list type constructor [] ListCon :: SpecialCon -- | function type constructor -> FunCon :: SpecialCon -- | n-ary tuple type and data constructors (,) etc, -- possibly boxed (#,#) TupleCon :: Boxed -> Int -> SpecialCon -- | list data constructor (:) Cons :: SpecialCon -- | unboxed singleton tuple constructor (# #) UnboxedSingleCon :: SpecialCon -- | A name (cname) of a component of a class or data type in an -- import or export specification. data CName -- | name of a method or field VarName :: Name -> CName -- | name of a data constructor ConName :: Name -> CName -- | An implicit parameter name. data IPName -- | ?ident, non-linear implicit parameter IPDup :: String -> IPName -- | %ident, linear implicit parameter IPLin :: String -> IPName -- | The name of an xml element or attribute, possibly qualified with a -- namespace. data XName XName :: String -> XName XDomName :: String -> String -> XName -- | A template haskell bracket expression. data Bracket -- | expression bracket: [| ... |] ExpBracket :: Exp -> Bracket -- | pattern bracket: [p| ... |] PatBracket :: Pat -> Bracket -- | type bracket: [t| ... |] TypeBracket :: Type -> Bracket -- | declaration bracket: [d| ... |] DeclBracket :: [Decl] -> Bracket -- | A template haskell splice expression data Splice -- | variable splice: $var IdSplice :: String -> Splice -- | parenthesised expression splice: $(exp) ParenSplice :: Exp -> Splice -- | The safety of a foreign function call. data Safety -- | unsafe PlayRisky :: Safety -- | safe (False) or threadsafe (True) PlaySafe :: Bool -> Safety -- | The calling convention of a foreign function call. data CallConv StdCall :: CallConv CCall :: CallConv -- | A top level options pragma, preceding the module header. data ModulePragma -- | LANGUAGE pragma LanguagePragma :: SrcLoc -> [Name] -> ModulePragma -- | OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC OptionsPragma :: SrcLoc -> (Maybe Tool) -> String -> ModulePragma -- | ANN pragma with module scope AnnModulePragma :: SrcLoc -> Annotation -> ModulePragma -- | Recognised tools for OPTIONS pragmas. data Tool GHC :: Tool HUGS :: Tool NHC98 :: Tool YHC :: Tool HADDOCK :: Tool UnknownTool :: String -> Tool -- | The body of a RULES pragma. data Rule Rule :: String -> Activation -> (Maybe [RuleVar]) -> Exp -> Exp -> Rule -- | Variables used in a RULES pragma, optionally annotated with types data RuleVar RuleVar :: Name -> RuleVar TypedRuleVar :: Name -> Type -> RuleVar -- | Activation clause of a RULES pragma. data Activation AlwaysActive :: Activation ActiveFrom :: Int -> Activation ActiveUntil :: Int -> Activation -- | An annotation through an ANN pragma. data Annotation -- | An annotation for a declared name. Ann :: Name -> Exp -> Annotation -- | An annotation for a declared type. TypeAnn :: Name -> Exp -> Annotation -- | An annotation for the defining module. ModuleAnn :: Exp -> Annotation prelude_mod :: ModuleName main_mod :: ModuleName main_name :: Name unit_con_name :: QName tuple_con_name :: Boxed -> Int -> QName list_cons_name :: QName unboxed_singleton_con_name :: QName unit_con :: Exp tuple_con :: Boxed -> Int -> Exp unboxed_singleton_con :: Exp as_name :: Name qualified_name :: Name hiding_name :: Name minus_name :: Name bang_name :: Name dot_name :: Name star_name :: Name export_name :: Name safe_name :: Name unsafe_name :: Name threadsafe_name :: Name stdcall_name :: Name ccall_name :: Name unit_tycon_name :: QName fun_tycon_name :: QName list_tycon_name :: QName tuple_tycon_name :: Boxed -> Int -> QName unboxed_singleton_tycon_name :: QName unit_tycon :: Type fun_tycon :: Type list_tycon :: Type tuple_tycon :: Boxed -> Int -> Type unboxed_singleton_tycon :: Type -- | A single position in the source. data SrcLoc SrcLoc :: String -> Int -> Int -> SrcLoc srcFilename :: SrcLoc -> String srcLine :: SrcLoc -> Int srcColumn :: SrcLoc -> Int instance Typeable ModuleName instance Typeable SpecialCon instance Typeable Name instance Typeable QName instance Typeable IPName instance Typeable QOp instance Typeable Op instance Typeable CName instance Typeable ExportSpec instance Typeable ImportSpec instance Typeable ImportDecl instance Typeable Assoc instance Typeable DataOrNew instance Typeable Kind instance Typeable TyVarBind instance Typeable FunDep instance Typeable Asst instance Typeable Type instance Typeable BangType instance Typeable ConDecl instance Typeable GadtDecl instance Typeable QualConDecl instance Typeable Literal instance Typeable XName instance Typeable Safety instance Typeable CallConv instance Typeable Activation instance Typeable RuleVar instance Typeable WarningText instance Typeable RPatOp instance Typeable GuardedAlt instance Typeable Stmt instance Typeable Pat instance Typeable PatField instance Typeable RPat instance Typeable PXAttr instance Typeable Exp instance Typeable Alt instance Typeable GuardedAlts instance Typeable Binds instance Typeable IPBind instance Typeable Decl instance Typeable Rule instance Typeable Rhs instance Typeable GuardedRhs instance Typeable InstDecl instance Typeable ClassDecl instance Typeable Match instance Typeable Annotation instance Typeable FieldUpdate instance Typeable QualStmt instance Typeable Splice instance Typeable Bracket instance Typeable XAttr instance Typeable ModulePragma instance Typeable Module instance Eq ModuleName instance Ord ModuleName instance Show ModuleName instance Data ModuleName instance Eq SpecialCon instance Ord SpecialCon instance Show SpecialCon instance Data SpecialCon instance Eq Name instance Ord Name instance Show Name instance Data Name instance Eq QName instance Ord QName instance Show QName instance Data QName instance Eq IPName instance Ord IPName instance Show IPName instance Data IPName instance Eq QOp instance Ord QOp instance Show QOp instance Data QOp instance Eq Op instance Ord Op instance Show Op instance Data Op instance Eq CName instance Ord CName instance Show CName instance Data CName instance Eq ExportSpec instance Ord ExportSpec instance Show ExportSpec instance Data ExportSpec instance Eq ImportSpec instance Ord ImportSpec instance Show ImportSpec instance Data ImportSpec instance Eq ImportDecl instance Ord ImportDecl instance Show ImportDecl instance Data ImportDecl instance Eq Assoc instance Ord Assoc instance Show Assoc instance Data Assoc instance Eq DataOrNew instance Ord DataOrNew instance Show DataOrNew instance Data DataOrNew instance Eq Kind instance Ord Kind instance Show Kind instance Data Kind instance Eq TyVarBind instance Ord TyVarBind instance Show TyVarBind instance Data TyVarBind instance Eq FunDep instance Ord FunDep instance Show FunDep instance Data FunDep instance Eq Asst instance Ord Asst instance Show Asst instance Data Asst instance Eq Type instance Ord Type instance Show Type instance Data Type instance Eq BangType instance Ord BangType instance Show BangType instance Data BangType instance Eq ConDecl instance Ord ConDecl instance Show ConDecl instance Data ConDecl instance Eq GadtDecl instance Ord GadtDecl instance Show GadtDecl instance Data GadtDecl instance Eq QualConDecl instance Ord QualConDecl instance Show QualConDecl instance Data QualConDecl instance Eq Literal instance Ord Literal instance Show Literal instance Data Literal instance Eq XName instance Ord XName instance Show XName instance Data XName instance Eq Safety instance Ord Safety instance Show Safety instance Data Safety instance Eq CallConv instance Ord CallConv instance Show CallConv instance Data CallConv instance Eq Activation instance Ord Activation instance Show Activation instance Data Activation instance Eq RuleVar instance Ord RuleVar instance Show RuleVar instance Data RuleVar instance Eq WarningText instance Ord WarningText instance Show WarningText instance Data WarningText instance Eq RPatOp instance Ord RPatOp instance Show RPatOp instance Data RPatOp instance Eq GuardedAlt instance Ord GuardedAlt instance Show GuardedAlt instance Data GuardedAlt instance Eq Stmt instance Ord Stmt instance Show Stmt instance Data Stmt instance Eq Pat instance Ord Pat instance Show Pat instance Data Pat instance Eq PatField instance Ord PatField instance Show PatField instance Data PatField instance Eq RPat instance Ord RPat instance Show RPat instance Data RPat instance Eq PXAttr instance Ord PXAttr instance Show PXAttr instance Data PXAttr instance Eq Exp instance Ord Exp instance Show Exp instance Data Exp instance Eq Alt instance Ord Alt instance Show Alt instance Data Alt instance Eq GuardedAlts instance Ord GuardedAlts instance Show GuardedAlts instance Data GuardedAlts instance Eq Binds instance Ord Binds instance Show Binds instance Data Binds instance Eq IPBind instance Ord IPBind instance Show IPBind instance Data IPBind instance Eq Decl instance Ord Decl instance Show Decl instance Data Decl instance Eq Rule instance Ord Rule instance Show Rule instance Data Rule instance Eq Rhs instance Ord Rhs instance Show Rhs instance Data Rhs instance Eq GuardedRhs instance Ord GuardedRhs instance Show GuardedRhs instance Data GuardedRhs instance Eq InstDecl instance Ord InstDecl instance Show InstDecl instance Data InstDecl instance Eq ClassDecl instance Ord ClassDecl instance Show ClassDecl instance Data ClassDecl instance Eq Match instance Ord Match instance Show Match instance Data Match instance Eq Annotation instance Ord Annotation instance Show Annotation instance Data Annotation instance Eq FieldUpdate instance Ord FieldUpdate instance Show FieldUpdate instance Data FieldUpdate instance Eq QualStmt instance Ord QualStmt instance Show QualStmt instance Data QualStmt instance Eq Splice instance Ord Splice instance Show Splice instance Data Splice instance Eq Bracket instance Ord Bracket instance Show Bracket instance Data Bracket instance Eq XAttr instance Ord XAttr instance Show XAttr instance Data XAttr instance Eq ModulePragma instance Ord ModulePragma instance Show ModulePragma instance Data ModulePragma instance Eq Module instance Ord Module instance Show Module instance Data Module -- | This module contains combinators to use when building Haskell source -- trees programmatically, as opposed to parsing them from a string. The -- contents here are quite experimental and will likely receive a lot of -- attention when the rest has stabilised. module Language.Haskell.Exts.Build -- | An identifier with the given string as its name. The string should be -- a valid Haskell identifier. name :: String -> Name -- | A symbol identifier. The string should be a valid Haskell symbol -- identifier. sym :: String -> Name -- | A local variable as expression. var :: Name -> Exp -- | Use the given identifier as an operator. op :: Name -> QOp -- | A qualified variable as expression. qvar :: ModuleName -> Name -> Exp -- | A pattern variable. pvar :: Name -> Pat -- | Application of expressions by juxtaposition. app :: Exp -> Exp -> Exp -- | Apply an operator infix. infixApp :: Exp -> QOp -> Exp -> Exp -- | Apply a function to a list of arguments. appFun :: Exp -> [Exp] -> Exp -- | A constructor pattern, with argument patterns. pApp :: Name -> [Pat] -> Pat -- | A tuple expression. tuple :: [Exp] -> Exp -- | A tuple pattern. pTuple :: [Pat] -> Pat -- | A tuple expression consisting of variables only. varTuple :: [Name] -> Exp -- | A tuple pattern consisting of variables only. pvarTuple :: [Name] -> Pat -- | A function with a given name. function :: String -> Exp -- | A literal string expression. strE :: String -> Exp -- | A literal character expression. charE :: Char -> Exp -- | A literal integer expression. intE :: Integer -> Exp -- | A literal string pattern. strP :: String -> Pat -- | A literal character pattern. charP :: Char -> Pat -- | A literal integer pattern. intP :: Integer -> Pat -- | A do block formed by the given statements. The last statement in the -- list should be a Qualifier expression. doE :: [Stmt] -> Exp -- | Lambda abstraction, given a list of argument patterns and an -- expression body. lamE :: SrcLoc -> [Pat] -> Exp -> Exp -- | A let ... in block. letE :: [Decl] -> Exp -> Exp -- | A case expression. caseE :: Exp -> [Alt] -> Exp -- | An unguarded alternative in a case expression. alt :: SrcLoc -> Pat -> Exp -> Alt -- | An alternative with a single guard in a case expression. altGW :: SrcLoc -> Pat -> [Stmt] -> Exp -> Binds -> Alt -- | A list expression. listE :: [Exp] -> Exp -- | The empty list expression. eList :: Exp -- | The empty list pattern. peList :: Pat -- | Put parentheses around an expression. paren :: Exp -> Exp -- | Put parentheses around a pattern. pParen :: Pat -> Pat -- | A qualifier expression statement. qualStmt :: Exp -> Stmt -- | A generator statement: pat <- exp genStmt :: SrcLoc -> Pat -> Exp -> Stmt -- | A let binding group as a statement. letStmt :: [Decl] -> Stmt -- | Hoist a set of declarations to a binding group. binds :: [Decl] -> Binds -- | An empty binding group. noBinds :: Binds -- | The wildcard pattern: _ wildcard :: Pat -- | Generate k names by appending numbers 1 through k to a given string. genNames :: String -> Int -> [Name] -- | A function with a single clause sfun :: SrcLoc -> Name -> [Name] -> Rhs -> Binds -> Decl -- | A function with a single clause, a single argument, no guards and no -- where declarations simpleFun :: SrcLoc -> Name -> Name -> Exp -> Decl -- | A pattern bind where the pattern is a variable, and where there are no -- guards and no 'where' clause. patBind :: SrcLoc -> Pat -> Exp -> Decl -- | A pattern bind where the pattern is a variable, and where there are no -- guards, but with a 'where' clause. patBindWhere :: SrcLoc -> Pat -> Exp -> [Decl] -> Decl -- | Bind an identifier to an expression. nameBind :: SrcLoc -> Name -> Exp -> Decl -- | Apply function of a given name to a list of arguments. metaFunction :: String -> [Exp] -> Exp -- | Apply a constructor of a given name to a list of pattern arguments, -- forming a constructor pattern. metaConPat :: String -> [Pat] -> Pat -- | Fixity information to give the parser so that infix operators can be -- parsed properly. module Language.Haskell.Exts.Fixity -- | Operator fixities are represented by their associativity (left, right -- or none) and their precedence (0-9). data Fixity Fixity :: Assoc -> Int -> Op -> Fixity infix_ :: Int -> [String] -> [Fixity] infixl_ :: Int -> [String] -> [Fixity] infixr_ :: Int -> [String] -> [Fixity] -- | All fixities defined in the Prelude. preludeFixities :: [Fixity] -- | All fixities defined in the base package. -- -- Note that the +++ operator appears in both Control.Arrows and -- Text.ParserCombinators.ReadP. The listed precedence for +++ -- in this list is that of Control.Arrows. baseFixities :: [Fixity] -- | All AST elements that may include expressions which in turn may need -- fixity tweaking will be instances of this class. class AppFixity ast applyFixities :: (AppFixity ast, Monad m) => [Fixity] -> ast -> m ast instance Typeable Fixity instance Eq Fixity instance Ord Fixity instance Show Fixity instance Data Fixity instance AppFixity XAttr instance AppFixity Splice instance AppFixity Bracket instance AppFixity QualStmt instance AppFixity GuardedAlt instance AppFixity GuardedAlts instance AppFixity Alt instance AppFixity FieldUpdate instance AppFixity IPBind instance AppFixity Binds instance AppFixity Stmt instance AppFixity PXAttr instance AppFixity RPat instance AppFixity PatField instance AppFixity GuardedRhs instance AppFixity Rhs instance AppFixity Match instance AppFixity InstDecl instance AppFixity ClassDecl instance AppFixity Annotation instance AppFixity Decl instance AppFixity Module instance AppFixity Pat instance AppFixity Exp -- | This module contains code for translating from the annotated complex -- AST in Language.Haskell.Exts.Annotated.Syntax to the simpler, sparsely -- annotated AST in Language.Haskell.Exts.Syntax. -- -- A function sXYZ translates an annotated AST node of type -- XYZ l into a simple AST node of type XYZ. I would -- have prefered to use a MPTC with an fd/type family to get a single -- exported function name, but I wish to stay Haskell 2010 compliant. -- Let's hope for Haskell 2011. module Language.Haskell.Exts.Annotated.Simplify -- | Translate an annotated AST node representing a Haskell module, into a -- simpler version that retains (almost) only abstract information. In -- particular, XML and hybrid XML pages enabled by the XmlSyntax -- extension are translated into standard Haskell modules with a -- page function. sModule :: SrcInfo loc => Module loc -> Module -- | Translate an annotated AST node representing a Haskell declaration -- into a simpler version. Note that in the simpler version, all -- declaration nodes are still annotated by SrcLocs. sDecl :: SrcInfo loc => Decl loc -> Decl sAnnotation :: SrcInfo loc => Annotation loc -> Annotation sModuleName :: ModuleName l -> ModuleName sSpecialCon :: SpecialCon l -> SpecialCon sQName :: QName l -> QName sName :: Name l -> Name sIPName :: IPName l -> IPName sQOp :: QOp l -> QOp sOp :: Op l -> Op sCName :: CName l -> CName sModuleHead :: Maybe (ModuleHead l) -> (ModuleName, Maybe (WarningText), Maybe [ExportSpec]) sExportSpecList :: ExportSpecList l -> [ExportSpec] sExportSpec :: ExportSpec l -> ExportSpec sImportDecl :: SrcInfo loc => ImportDecl loc -> ImportDecl sImportSpecList :: ImportSpecList l -> (Bool, [ImportSpec]) sImportSpec :: ImportSpec l -> ImportSpec sAssoc :: Assoc l -> Assoc sDeclHead :: DeclHead l -> (Name, [TyVarBind]) sInstHead :: InstHead l -> (QName, [Type]) sDataOrNew :: DataOrNew l -> DataOrNew sDeriving :: (Deriving l) -> [(QName, [Type])] sBinds :: SrcInfo loc => Binds loc -> Binds sIPBind :: SrcInfo loc => IPBind loc -> IPBind sMatch :: SrcInfo loc => Match loc -> Match sQualConDecl :: SrcInfo loc => QualConDecl loc -> QualConDecl sConDecl :: ConDecl l -> ConDecl sFieldDecl :: FieldDecl l -> ([Name], BangType) sGadtDecl :: SrcInfo loc => GadtDecl loc -> GadtDecl sClassDecl :: SrcInfo loc => ClassDecl loc -> ClassDecl sInstDecl :: SrcInfo loc => InstDecl loc -> InstDecl sBangType :: BangType l -> BangType sRhs :: SrcInfo loc => Rhs loc -> Rhs sGuardedRhs :: SrcInfo loc => GuardedRhs loc -> GuardedRhs sType :: Type l -> Type sTyVarBind :: TyVarBind l -> TyVarBind sKind :: Kind l -> Kind sFunDep :: FunDep l -> FunDep sContext :: Context l -> Context sAsst :: Asst l -> Asst sLiteral :: Literal l -> Literal sExp :: SrcInfo loc => Exp loc -> Exp sXName :: XName l -> XName sXAttr :: SrcInfo loc => XAttr loc -> XAttr sBracket :: SrcInfo loc => Bracket loc -> Bracket sSplice :: SrcInfo loc => Splice loc -> Splice sSafety :: Safety l -> Safety sCallConv :: CallConv l -> CallConv sModulePragma :: SrcInfo loc => ModulePragma loc -> ModulePragma sActivation :: Activation l -> Activation sRule :: SrcInfo loc => Rule loc -> Rule sRuleVar :: RuleVar l -> RuleVar sWarningText :: WarningText l -> WarningText sPat :: SrcInfo loc => Pat loc -> Pat sPXAttr :: SrcInfo loc => PXAttr loc -> PXAttr sRPatOp :: RPatOp l -> RPatOp sRPat :: SrcInfo loc => RPat loc -> RPat sPatField :: SrcInfo loc => PatField loc -> PatField sStmt :: SrcInfo loc => Stmt loc -> Stmt sQualStmt :: SrcInfo loc => QualStmt loc -> QualStmt sFieldUpdate :: SrcInfo loc => FieldUpdate loc -> FieldUpdate sAlt :: SrcInfo loc => Alt loc -> Alt sGuardedAlts :: SrcInfo loc => GuardedAlts loc -> GuardedAlts sGuardedAlt :: SrcInfo loc => GuardedAlt loc -> GuardedAlt -- | Pretty printer for Haskell with extensions. module Language.Haskell.Exts.Pretty -- | Things that can be pretty-printed, including all the syntactic objects -- in Language.Haskell.Exts.Syntax and -- Language.Haskell.Exts.Annotated.Syntax. class Pretty a -- | pretty-print with a given style and mode. prettyPrintStyleMode :: Pretty a => Style -> PPHsMode -> a -> String -- | pretty-print with the default style and a given mode. prettyPrintWithMode :: Pretty a => PPHsMode -> a -> String -- | pretty-print with the default style and defaultMode. prettyPrint :: Pretty a => a -> String -- | A rendering style. data Style :: * Style :: Mode -> Int -> Float -> Style -- | The rendering mode mode :: Style -> Mode -- | Length of line, in chars lineLength :: Style -> Int -- | Ratio of ribbon length to line length ribbonsPerLine :: Style -> Float -- | The default style (mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5). style :: Style -- | Rendering mode. data Mode :: * -- | Normal PageMode :: Mode -- | With zig-zag cuts ZigZagMode :: Mode -- | No indentation, infinitely long lines LeftMode :: Mode -- | All on one line OneLineMode :: Mode -- | Pretty-printing parameters. -- -- Note: the onsideIndent must be positive and less than -- all other indents. data PPHsMode PPHsMode :: Indent -> Indent -> Indent -> Indent -> Indent -> Indent -> Bool -> PPLayout -> Bool -> PPHsMode -- | indentation of a class or instance classIndent :: PPHsMode -> Indent -- | indentation of a do-expression doIndent :: PPHsMode -> Indent -- | indentation of the body of a case expression caseIndent :: PPHsMode -> Indent -- | indentation of the declarations in a let expression letIndent :: PPHsMode -> Indent -- | indentation of the declarations in a where clause whereIndent :: PPHsMode -> Indent -- | indentation added for continuation lines that would otherwise be -- offside onsideIndent :: PPHsMode -> Indent -- | blank lines between statements? spacing :: PPHsMode -> Bool -- | Pretty-printing style to use layout :: PPHsMode -> PPLayout -- | add GHC-style LINE pragmas to output? linePragmas :: PPHsMode -> Bool type Indent = Int -- | Varieties of layout we can use. data PPLayout -- | classical layout PPOffsideRule :: PPLayout -- | classical layout made explicit PPSemiColon :: PPLayout -- | inline decls, with newlines between them PPInLine :: PPLayout -- | everything on a single line PPNoLayout :: PPLayout -- | The default mode: pretty-print using the offside rule and sensible -- defaults. defaultMode :: PPHsMode instance Eq PPLayout instance SrcInfo loc => Pretty (PType loc) instance SrcInfo loc => Pretty (PAsst loc) instance SrcInfo loc => Pretty (PContext loc) instance SrcInfo loc => Pretty (ParseXAttr loc) instance SrcInfo loc => Pretty (PFieldUpdate loc) instance SrcInfo loc => Pretty (PExp loc) instance Pretty (Asst l) instance Pretty (Context l) instance Pretty (CName l) instance SrcInfo loc => Pretty (IPBind loc) instance Pretty (IPName l) instance Pretty (Name l) instance Pretty (Op l) instance Pretty (QName l) instance Pretty (QOp l) instance SrcInfo loc => Pretty (FieldUpdate loc) instance SrcInfo loc => Pretty (QualStmt loc) instance SrcInfo loc => Pretty (Stmt loc) instance SrcInfo loc => Pretty (GuardedAlt loc) instance SrcInfo loc => Pretty (GuardedAlts loc) instance SrcInfo loc => Pretty (Alt loc) instance Pretty (RPatOp l) instance SrcInfo loc => Pretty (RPat loc) instance SrcInfo loc => Pretty (PatField loc) instance SrcInfo loc => Pretty (PXAttr loc) instance SrcInfo loc => Pretty (Pat loc) instance SrcInfo loc => Pretty (Splice loc) instance SrcInfo loc => Pretty (Bracket loc) instance Pretty (XName l) instance SrcInfo loc => Pretty (XAttr loc) instance SrcInfo loc => Pretty (Exp loc) instance Pretty (Literal l) instance SrcInfo loc => Pretty (GuardedRhs loc) instance SrcInfo loc => Pretty (Rhs loc) instance Pretty (FunDep l) instance Pretty (Kind l) instance Pretty (TyVarBind l) instance Pretty (Type l) instance Pretty (Deriving l) instance Pretty (BangType l) instance Pretty (FieldDecl l) instance Pretty (ConDecl l) instance Pretty (GadtDecl l) instance Pretty (QualConDecl l) instance SrcInfo loc => Pretty (Annotation loc) instance SrcInfo loc => Pretty (ModulePragma loc) instance Pretty (RuleVar l) instance Pretty (Activation l) instance SrcInfo loc => Pretty (Rule loc) instance Pretty (CallConv l) instance Pretty (Safety l) instance SrcInfo loc => Pretty (InstDecl loc) instance SrcInfo loc => Pretty (ClassDecl loc) instance SrcInfo pos => Pretty (Match pos) instance Pretty (Assoc l) instance Pretty (DataOrNew l) instance Pretty (InstHead l) instance Pretty (DeclHead l) instance SrcInfo pos => Pretty (Decl pos) instance Pretty (ImportSpec l) instance Pretty (ImportSpecList l) instance SrcInfo pos => Pretty (ImportDecl pos) instance Pretty (ExportSpec l) instance Pretty (ExportSpecList l) instance Pretty (ModuleName l) instance Pretty (WarningText l) instance Pretty (ModuleHead l) instance SrcInfo pos => Pretty (Module pos) instance Pretty SrcSpan instance Pretty SrcLoc instance Pretty Asst instance Pretty SpecialCon instance Pretty CName instance Pretty IPBind instance Pretty IPName instance Pretty Name instance Pretty Op instance Pretty QName instance Pretty QOp instance Pretty FieldUpdate instance Pretty QualStmt instance Pretty Stmt instance Pretty GuardedAlt instance Pretty GuardedAlts instance Pretty Alt instance Pretty RPatOp instance Pretty RPat instance Pretty PatField instance Pretty PXAttr instance Pretty Pat instance Pretty Splice instance Pretty Bracket instance Pretty XName instance Pretty XAttr instance Pretty Exp instance Pretty Literal instance Pretty GuardedRhs instance Pretty Rhs instance Pretty FunDep instance Pretty Kind instance Pretty TyVarBind instance Pretty Type instance Pretty BangType instance Pretty ConDecl instance Pretty GadtDecl instance Pretty QualConDecl instance Pretty Tool instance Pretty ModulePragma instance Pretty RuleVar instance Pretty Activation instance Pretty Rule instance Pretty CallConv instance Pretty Safety instance Pretty InstDecl instance Pretty ClassDecl instance Pretty Match instance Pretty Assoc instance Pretty DataOrNew instance Pretty Annotation instance Pretty Decl instance Pretty ImportSpec instance Pretty ImportDecl instance Pretty ExportSpec instance Pretty ModuleName instance Pretty Module instance Monad (DocM s) instance Functor (DocM s) -- | Fixity information to give the parser so that infix operators can be -- parsed properly. module Language.Haskell.Exts.Annotated.Fixity -- | Operator fixities are represented by their associativity (left, right -- or none) and their precedence (0-9). data Fixity Fixity :: Assoc -> Int -> Op -> Fixity infix_ :: Int -> [String] -> [Fixity] infixl_ :: Int -> [String] -> [Fixity] infixr_ :: Int -> [String] -> [Fixity] -- | All fixities defined in the Prelude. preludeFixities :: [Fixity] -- | All fixities defined in the base package. -- -- Note that the +++ operator appears in both Control.Arrows and -- Text.ParserCombinators.ReadP. The listed precedence for +++ -- in this list is that of Control.Arrows. baseFixities :: [Fixity] -- | All AST elements that may include expressions which in turn may need -- fixity tweaking will be instances of this class. class AppFixity ast applyFixities :: (AppFixity ast, Monad m) => [Fixity] -> ast SrcSpanInfo -> m (ast SrcSpanInfo) instance AppFixity XAttr instance AppFixity Splice instance AppFixity Bracket instance AppFixity QualStmt instance AppFixity GuardedAlt instance AppFixity GuardedAlts instance AppFixity Alt instance AppFixity FieldUpdate instance AppFixity IPBind instance AppFixity Binds instance AppFixity Stmt instance AppFixity PXAttr instance AppFixity RPat instance AppFixity PatField instance AppFixity GuardedRhs instance AppFixity Rhs instance AppFixity Match instance AppFixity InstDecl instance AppFixity ClassDecl instance AppFixity Annotation instance AppFixity Decl instance AppFixity Module instance AppFixity Pat instance AppFixity Exp module Language.Haskell.Exts.Parser -- | Class to reuse the parse function at many different types. class Parseable ast parse :: Parseable ast => String -> ParseResult ast parseWithMode :: Parseable ast => ParseMode -> String -> ParseResult ast parseWithComments :: Parseable ast => ParseMode -> String -> ParseResult (ast, [Comment]) -- | Static parameters governing a parse. Note that the various parse -- functions in Language.Haskell.Exts.Parser never look at -- LANGUAGE pragmas, regardless of what the -- ignoreLanguagePragmas flag is set to. Only the various -- parseFile functions in Language.Haskell.Exts will act -- on it, when set to False. data ParseMode ParseMode :: String -> [Extension] -> Bool -> Bool -> [Fixity] -> ParseMode -- | original name of the file being parsed parseFilename :: ParseMode -> String -- | list of extensions enabled for parsing extensions :: ParseMode -> [Extension] -- | if True, the parser won't care about further extensions in -- LANGUAGE pragmas in source files ignoreLanguagePragmas :: ParseMode -> Bool -- | if True, the parser won't read line position information from -- LINE pragmas in source files ignoreLinePragmas :: ParseMode -> Bool -- | list of fixities to be aware of fixities :: ParseMode -> [Fixity] -- | Default parameters for a parse. The default is an unknown filename, no -- extensions (i.e. Haskell 98), don't ignore LANGUAGE pragmas, do ignore -- LINE pragmas, and be aware of fixities from the Prelude. defaultParseMode :: ParseMode -- | The result of a parse. data ParseResult a -- | The parse succeeded, yielding a value. ParseOk :: a -> ParseResult a -- | The parse failed at the specified source location, with an error -- message. ParseFailed :: SrcLoc -> String -> ParseResult a -- | Retrieve the result of a successful parse, throwing an error if the -- parse is actually not successful. fromParseResult :: ParseResult a -> a -- | Parse of a string, which should contain a complete Haskell module. parseModule :: String -> ParseResult Module -- | Parse of a string containing a complete Haskell module, using an -- explicit mode. parseModuleWithMode :: ParseMode -> String -> ParseResult Module -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseModuleWithComments :: ParseMode -> String -> ParseResult (Module, [Comment]) -- | Parse of a string containing a Haskell expression. parseExp :: String -> ParseResult Exp -- | Parse of a string containing a Haskell expression, using an explicit -- mode. parseExpWithMode :: ParseMode -> String -> ParseResult Exp -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseExpWithComments :: ParseMode -> String -> ParseResult (Exp, [Comment]) -- | Parse of a string containing a Haskell type. parseStmt :: String -> ParseResult Stmt -- | Parse of a string containing a Haskell type, using an explicit mode. parseStmtWithMode :: ParseMode -> String -> ParseResult Stmt -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseStmtWithComments :: ParseMode -> String -> ParseResult (Stmt, [Comment]) -- | Parse of a string containing a Haskell pattern. parsePat :: String -> ParseResult Pat -- | Parse of a string containing a Haskell pattern, using an explicit -- mode. parsePatWithMode :: ParseMode -> String -> ParseResult Pat -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parsePatWithComments :: ParseMode -> String -> ParseResult (Pat, [Comment]) -- | Parse of a string containing a Haskell top-level declaration. parseDecl :: String -> ParseResult Decl -- | Parse of a string containing a Haskell top-level declaration, using an -- explicit mode. parseDeclWithMode :: ParseMode -> String -> ParseResult Decl -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl, [Comment]) -- | Parse of a string containing a Haskell type. parseType :: String -> ParseResult Type -- | Parse of a string containing a Haskell type, using an explicit mode. parseTypeWithMode :: ParseMode -> String -> ParseResult Type -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseTypeWithComments :: ParseMode -> String -> ParseResult (Type, [Comment]) getTopPragmas :: String -> ParseResult [ModulePragma] instance Parseable Type instance Parseable Decl instance Parseable Pat instance Parseable Exp instance Parseable Module instance SrcInfo loc => Parseable (Stmt loc) instance SrcInfo loc => Parseable (Type loc) instance SrcInfo loc => Parseable (Decl loc) instance SrcInfo loc => Parseable (Pat loc) instance SrcInfo loc => Parseable (Exp loc) instance SrcInfo loc => Parseable (Module loc) -- | An umbrella module for the various functionality of the package. Also -- provides some convenient functionality for dealing directly with -- source files. module Language.Haskell.Exts.Annotated -- | Parse a source file on disk, using the default parse mode. parseFile :: FilePath -> IO (ParseResult (Module SrcSpanInfo)) -- | Parse a source file on disk, supplying a custom parse mode. parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo)) -- | Parse a source file on disk, with an extra set of extensions to know -- about on top of what the file itself declares. parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult (Module SrcSpanInfo)) parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo, [Comment])) -- | Parse a source file from a string using the default parse mode. parseFileContents :: String -> ParseResult (Module SrcSpanInfo) -- | Parse a source file from a string using a custom parse mode. parseFileContentsWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo) -- | Parse a source file from a string, with an extra set of extensions to -- know about on top of what the file itself declares. parseFileContentsWithExts :: [Extension] -> String -> ParseResult (Module SrcSpanInfo) parseFileContentsWithComments :: ParseMode -> String -> ParseResult (Module SrcSpanInfo, [Comment]) -- | Parse of a string, which should contain a complete Haskell module. parseModule :: String -> ParseResult (Module SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode. parseModuleWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseModuleWithComments :: ParseMode -> String -> ParseResult (Module SrcSpanInfo, [Comment]) -- | Parse of a string containing a Haskell expression. parseExp :: String -> ParseResult (Exp SrcSpanInfo) -- | Parse of a string containing a Haskell expression, using an explicit -- mode. parseExpWithMode :: ParseMode -> String -> ParseResult (Exp SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseExpWithComments :: ParseMode -> String -> ParseResult (Exp SrcSpanInfo, [Comment]) -- | Parse of a string containing a Haskell statement. parseStmt :: String -> ParseResult (Stmt SrcSpanInfo) -- | Parse of a string containing a Haskell type, using an explicit mode. parseStmtWithMode :: ParseMode -> String -> ParseResult (Stmt SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseStmtWithComments :: ParseMode -> String -> ParseResult (Stmt SrcSpanInfo, [Comment]) -- | Parse of a string containing a Haskell pattern. parsePat :: String -> ParseResult (Pat SrcSpanInfo) -- | Parse of a string containing a Haskell pattern, using an explicit -- mode. parsePatWithMode :: ParseMode -> String -> ParseResult (Pat SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parsePatWithComments :: ParseMode -> String -> ParseResult (Pat SrcSpanInfo, [Comment]) -- | Parse of a string containing a Haskell top-level declaration. parseDecl :: String -> ParseResult (Decl SrcSpanInfo) -- | Parse of a string containing a Haskell top-level declaration, using an -- explicit mode. parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl SrcSpanInfo, [Comment]) -- | Parse of a string containing a Haskell type. parseType :: String -> ParseResult (Type SrcSpanInfo) -- | Parse of a string containing a Haskell type, using an explicit mode. parseTypeWithMode :: ParseMode -> String -> ParseResult (Type SrcSpanInfo) -- | Parse of a string containing a complete Haskell module, using an -- explicit mode, retaining comments. parseTypeWithComments :: ParseMode -> String -> ParseResult (Type SrcSpanInfo, [Comment]) -- | Gather the extensions declared in LANGUAGE pragmas at the top of the -- file. Returns Nothing if the parse of the pragmas fails. readExtensions :: String -> Maybe [Extension] -- | An umbrella module for the various functionality of the package. Also -- provides some convenient functionality for dealing directly with -- source files. module Language.Haskell.Exts -- | Parse a source file on disk, using the default parse mode. parseFile :: FilePath -> IO (ParseResult Module) -- | Parse a source file on disk, supplying a custom parse mode. parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult Module) -- | Parse a source file on disk, with an extra set of extensions to know -- about on top of what the file itself declares. parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult Module) -- | Parse a source file on disk, supplying a custom parse mode, and -- retaining comments. parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment])) -- | Parse a source file from a string using the default parse mode. parseFileContents :: String -> ParseResult Module -- | Parse a source file from a string using a custom parse mode. parseFileContentsWithMode :: ParseMode -> String -> ParseResult Module -- | Parse a source file from a string, with an extra set of extensions to -- know about on top of what the file itself declares. parseFileContentsWithExts :: [Extension] -> String -> ParseResult Module -- | Parse a source file from a string using a custom parse mode and -- retaining comments. parseFileContentsWithComments :: ParseMode -> String -> ParseResult (Module, [Comment]) -- | Gather the extensions declared in LANGUAGE pragmas at the top of the -- file. Returns Nothing if the parse of the pragmas fails. readExtensions :: String -> Maybe [Extension]