ghc-7.10.3: The GHC API

Safe Haskell | None
Language | Haskell2010

HsExpr

Contents

- Expressions proper

Description

Abstract Haskell syntax for expressions.

Synopsis

- type LHsExpr id = Located (HsExpr id)
- type PostTcExpr = HsExpr Id
- type PostTcTable = [(Name, PostTcExpr)]
- noPostTcExpr :: PostTcExpr
- noPostTcTable :: PostTcTable
- type SyntaxExpr id = HsExpr id
- noSyntaxExpr :: SyntaxExpr id
- type CmdSyntaxTable id = [(Name, SyntaxExpr id)]
- data HsExpr id
  - = HsVar id
  - | HsIPVar HsIPName
  - | HsOverLit (HsOverLit id)
  - | HsLit HsLit
  - | HsLam (MatchGroup id (LHsExpr id))
  - | HsLamCase (PostTc id Type) (MatchGroup id (LHsExpr id))
  - | HsApp (LHsExpr id) (LHsExpr id)
  - | OpApp (LHsExpr id) (LHsExpr id) (PostRn id Fixity) (LHsExpr id)
  - | NegApp (LHsExpr id) (SyntaxExpr id)
  - | HsPar (LHsExpr id)
  - | SectionL (LHsExpr id) (LHsExpr id)
  - | SectionR (LHsExpr id) (LHsExpr id)
  - | ExplicitTuple [LHsTupArg id] Boxity
  - | HsCase (LHsExpr id) (MatchGroup id (LHsExpr id))
  - | HsIf (Maybe (SyntaxExpr id)) (LHsExpr id) (LHsExpr id) (LHsExpr id)
  - | HsMultiIf (PostTc id Type) [LGRHS id (LHsExpr id)]
  - | HsLet (HsLocalBinds id) (LHsExpr id)
  - | HsDo (HsStmtContext Name) [ExprLStmt id] (PostTc id Type)
  - | ExplicitList (PostTc id Type) (Maybe (SyntaxExpr id)) [LHsExpr id]
  - | ExplicitPArr (PostTc id Type) [LHsExpr id]
  - | RecordCon (Located id) PostTcExpr (HsRecordBinds id)
  - | RecordUpd (LHsExpr id) (HsRecordBinds id) [DataCon] [PostTc id Type] [PostTc id Type]
  - | ExprWithTySig (LHsExpr id) (LHsType id) (PostRn id [Name])
  - | ExprWithTySigOut (LHsExpr id) (LHsType Name)
  - | ArithSeq PostTcExpr (Maybe (SyntaxExpr id)) (ArithSeqInfo id)
  - | PArrSeq PostTcExpr (ArithSeqInfo id)
  - | HsSCC SourceText FastString (LHsExpr id)
  - | HsCoreAnn SourceText FastString (LHsExpr id)
  - | HsBracket (HsBracket id)
  - | HsRnBracketOut (HsBracket Name) [PendingRnSplice]
  - | HsTcBracketOut (HsBracket Name) [PendingTcSplice]
  - | HsSpliceE Bool (HsSplice id)
  - | HsQuasiQuoteE (HsQuasiQuote id)
  - | HsProc (LPat id) (LHsCmdTop id)
  - | HsStatic (LHsExpr id)
  - | HsArrApp (LHsExpr id) (LHsExpr id) (PostTc id Type) HsArrAppType Bool
  - | HsArrForm (LHsExpr id) (Maybe Fixity) [LHsCmdTop id]
  - | HsTick (Tickish id) (LHsExpr id)
  - | HsBinTick Int Int (LHsExpr id)
  - | HsTickPragma SourceText (FastString, (Int, Int), (Int, Int)) (LHsExpr id)
  - | EWildPat
  - | EAsPat (Located id) (LHsExpr id)
  - | EViewPat (LHsExpr id) (LHsExpr id)
  - | ELazyPat (LHsExpr id)
  - | HsType (LHsType id)
  - | HsWrap HsWrapper (HsExpr id)
  - | HsUnboundVar RdrName
- type LHsTupArg id = Located (HsTupArg id)
- data HsTupArg id
  - = Present (LHsExpr id)
  - | Missing (PostTc id Type)
- tupArgPresent :: LHsTupArg id -> Bool
- pprLExpr :: OutputableBndr id => LHsExpr id -> SDoc
- pprExpr :: OutputableBndr id => HsExpr id -> SDoc
- isQuietHsExpr :: HsExpr id -> Bool
- pprBinds :: (OutputableBndr idL, OutputableBndr idR) => HsLocalBindsLR idL idR -> SDoc
- ppr_lexpr :: OutputableBndr id => LHsExpr id -> SDoc
- ppr_expr :: forall id. OutputableBndr id => HsExpr id -> SDoc
- pprDebugParendExpr :: OutputableBndr id => LHsExpr id -> SDoc
- pprParendExpr :: OutputableBndr id => LHsExpr id -> SDoc
- hsExprNeedsParens :: HsExpr id -> Bool
- isAtomicHsExpr :: HsExpr id -> Bool
- type LHsCmd id = Located (HsCmd id)
- data HsCmd id
  - = HsCmdArrApp (LHsExpr id) (LHsExpr id) (PostTc id Type) HsArrAppType Bool
  - | HsCmdArrForm (LHsExpr id) (Maybe Fixity) [LHsCmdTop id]
  - | HsCmdApp (LHsCmd id) (LHsExpr id)
  - | HsCmdLam (MatchGroup id (LHsCmd id))
  - | HsCmdPar (LHsCmd id)
  - | HsCmdCase (LHsExpr id) (MatchGroup id (LHsCmd id))
  - | HsCmdIf (Maybe (SyntaxExpr id)) (LHsExpr id) (LHsCmd id) (LHsCmd id)
  - | HsCmdLet (HsLocalBinds id) (LHsCmd id)
  - | HsCmdDo [CmdLStmt id] (PostTc id Type)
  - | HsCmdCast TcCoercion (HsCmd id)
- data HsArrAppType
  - = HsHigherOrderApp
  - | HsFirstOrderApp
- type LHsCmdTop id = Located (HsCmdTop id)
- data HsCmdTop id = HsCmdTop (LHsCmd id) (PostTc id Type) (PostTc id Type) (CmdSyntaxTable id)
- pprLCmd :: OutputableBndr id => LHsCmd id -> SDoc
- pprCmd :: OutputableBndr id => HsCmd id -> SDoc
- isQuietHsCmd :: HsCmd id -> Bool
- ppr_lcmd :: OutputableBndr id => LHsCmd id -> SDoc
- ppr_cmd :: forall id. OutputableBndr id => HsCmd id -> SDoc
- pprCmdArg :: OutputableBndr id => HsCmdTop id -> SDoc
- type HsRecordBinds id = HsRecFields id (LHsExpr id)
- data MatchGroup id body = MG {
  - mg_alts :: [LMatch id body]
  - mg_arg_tys :: [PostTc id Type]
  - mg_res_ty :: PostTc id Type
  - mg_origin :: Origin
  }
- type LMatch id body = Located (Match id body)
- data Match id body = Match {
  - m_fun_id_infix :: Maybe (Located id, Bool)
  - m_pats :: [LPat id]
  - m_type :: Maybe (LHsType id)
  - m_grhss :: GRHSs id body
  }
- isEmptyMatchGroup :: MatchGroup id body -> Bool
- matchGroupArity :: MatchGroup id body -> Arity
- hsLMatchPats :: LMatch id body -> [LPat id]
- data GRHSs id body = GRHSs {
  - grhssGRHSs :: [LGRHS id body]
  - grhssLocalBinds :: HsLocalBinds id
  }
- type LGRHS id body = Located (GRHS id body)
- data GRHS id body = GRHS [GuardLStmt id] body
- pprMatches :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> MatchGroup idR body -> SDoc
- pprFunBind :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => idL -> Bool -> MatchGroup idR body -> SDoc
- pprPatBind :: forall bndr id body. (OutputableBndr bndr, OutputableBndr id, Outputable body) => LPat bndr -> GRHSs id body -> SDoc
- pprMatch :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> Match idR body -> SDoc
- pprGRHSs :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> GRHSs idR body -> SDoc
- pprGRHS :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> GRHS idR body -> SDoc
- pp_rhs :: Outputable body => HsMatchContext idL -> body -> SDoc
- type LStmt id body = Located (StmtLR id id body)
- type LStmtLR idL idR body = Located (StmtLR idL idR body)
- type Stmt id body = StmtLR id id body
- type CmdLStmt id = LStmt id (LHsCmd id)
- type CmdStmt id = Stmt id (LHsCmd id)
- type ExprLStmt id = LStmt id (LHsExpr id)
- type ExprStmt id = Stmt id (LHsExpr id)
- type GuardLStmt id = LStmt id (LHsExpr id)
- type GuardStmt id = Stmt id (LHsExpr id)
- type GhciLStmt id = LStmt id (LHsExpr id)
- type GhciStmt id = Stmt id (LHsExpr id)
- data StmtLR idL idR body
  - = LastStmt body (SyntaxExpr idR)
  - | BindStmt (LPat idL) body (SyntaxExpr idR) (SyntaxExpr idR)
  - | BodyStmt body (SyntaxExpr idR) (SyntaxExpr idR) (PostTc idR Type)
  - | LetStmt (HsLocalBindsLR idL idR)
  - | ParStmt [ParStmtBlock idL idR] (SyntaxExpr idR) (SyntaxExpr idR)
  - | TransStmt {
    - trS_form :: TransForm
    - trS_stmts :: [ExprLStmt idL]
    - trS_bndrs :: [(idR, idR)]
    - trS_using :: LHsExpr idR
    - trS_by :: Maybe (LHsExpr idR)
    - trS_ret :: SyntaxExpr idR
    - trS_bind :: SyntaxExpr idR
    - trS_fmap :: SyntaxExpr idR
    }
  - | RecStmt {
    - recS_stmts :: [LStmtLR idL idR body]
    - recS_later_ids :: [idR]
    - recS_rec_ids :: [idR]
    - recS_bind_fn :: SyntaxExpr idR
    - recS_ret_fn :: SyntaxExpr idR
    - recS_mfix_fn :: SyntaxExpr idR
    - recS_later_rets :: [PostTcExpr]
    - recS_rec_rets :: [PostTcExpr]
    - recS_ret_ty :: PostTc idR Type
    }
- data TransForm
  - = ThenForm
  - | GroupForm
- data ParStmtBlock idL idR = ParStmtBlock [ExprLStmt idL] [idR] (SyntaxExpr idR)
- pprStmt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => StmtLR idL idR body -> SDoc
- pprTransformStmt :: OutputableBndr id => [id] -> LHsExpr id -> Maybe (LHsExpr id) -> SDoc
- pprTransStmt :: Outputable body => Maybe body -> body -> TransForm -> SDoc
- pprBy :: Outputable body => Maybe body -> SDoc
- pprDo :: (OutputableBndr id, Outputable body) => HsStmtContext any -> [LStmt id body] -> SDoc
- ppr_do_stmts :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => [LStmtLR idL idR body] -> SDoc
- pprComp :: (OutputableBndr id, Outputable body) => [LStmt id body] -> SDoc
- pprQuals :: (OutputableBndr id, Outputable body) => [LStmt id body] -> SDoc
- data HsSplice id = HsSplice id (LHsExpr id)
- data PendingSplice id = PendSplice Name (LHsExpr id)
- data PendingRnSplice
  - = PendingRnExpSplice (PendingSplice Name)
  - | PendingRnPatSplice (PendingSplice Name)
  - | PendingRnTypeSplice (PendingSplice Name)
  - | PendingRnDeclSplice (PendingSplice Name)
  - | PendingRnCrossStageSplice Name
- type PendingTcSplice = PendingSplice Id
- pprUntypedSplice :: OutputableBndr id => HsSplice id -> SDoc
- pprTypedSplice :: OutputableBndr id => HsSplice id -> SDoc
- pprSplice :: OutputableBndr id => Bool -> HsSplice id -> SDoc
- data HsBracket id
  - = ExpBr (LHsExpr id)
  - | PatBr (LPat id)
  - | DecBrL [LHsDecl id]
  - | DecBrG (HsGroup id)
  - | TypBr (LHsType id)
  - | VarBr Bool id
  - | TExpBr (LHsExpr id)
- isTypedBracket :: HsBracket id -> Bool
- pprHsBracket :: OutputableBndr id => HsBracket id -> SDoc
- thBrackets :: SDoc -> SDoc -> SDoc
- thTyBrackets :: SDoc -> SDoc
- data ArithSeqInfo id
  - = From (LHsExpr id)
  - | FromThen (LHsExpr id) (LHsExpr id)
  - | FromTo (LHsExpr id) (LHsExpr id)
  - | FromThenTo (LHsExpr id) (LHsExpr id) (LHsExpr id)
- pp_dotdot :: SDoc
- data HsMatchContext id
  - = FunRhs id Bool
  - | LambdaExpr
  - | CaseAlt
  - | IfAlt
  - | ProcExpr
  - | PatBindRhs
  - | RecUpd
  - | StmtCtxt (HsStmtContext id)
  - | ThPatSplice
  - | ThPatQuote
  - | PatSyn
- data HsStmtContext id
  - = ListComp
  - | MonadComp
  - | PArrComp
  - | DoExpr
  - | MDoExpr
  - | ArrowExpr
  - | GhciStmtCtxt
  - | PatGuard (HsMatchContext id)
  - | ParStmtCtxt (HsStmtContext id)
  - | TransStmtCtxt (HsStmtContext id)
- isListCompExpr :: HsStmtContext id -> Bool
- isMonadCompExpr :: HsStmtContext id -> Bool
- matchSeparator :: HsMatchContext id -> SDoc
- pprMatchContext :: Outputable id => HsMatchContext id -> SDoc
- pprMatchContextNoun :: Outputable id => HsMatchContext id -> SDoc
- pprAStmtContext :: Outputable id => HsStmtContext id -> SDoc
- pprStmtContext :: Outputable id => HsStmtContext id -> SDoc
- matchContextErrString :: Outputable id => HsMatchContext id -> SDoc
- pprMatchInCtxt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> Match idR body -> SDoc
- pprStmtInCtxt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsStmtContext idL -> StmtLR idL idR body -> SDoc

# Expressions proper

type LHsExpr id

Arguments

= Located (HsExpr id) | May have `AnnKeywordId` : `AnnComma` when in a list

type PostTcExpr = HsExpr Id

PostTcExpr is an evidence expression attached to the syntax tree by the type checker (c.f. postTcType).

type PostTcTable = [(Name, PostTcExpr)]

We use a PostTcTable where there are a bunch of pieces of evidence, more than is convenient to keep individually.

noPostTcExpr :: PostTcExpr

noPostTcTable :: PostTcTable

type SyntaxExpr id = HsExpr id

SyntaxExpr is like `PostTcExpr`, but it's filled in a little earlier, by the renamer. It's used for rebindable syntax.

E.g. `(>>=)` is filled in before the renamer by the appropriate `Name` for `(>>=)`, and then instantiated by the type checker with its type args etc

noSyntaxExpr :: SyntaxExpr id

type CmdSyntaxTable id = [(Name, SyntaxExpr id)]

data HsExpr id

A Haskell expression.

Constructors

HsVar id | Variable
HsIPVar HsIPName | Implicit parameter
HsOverLit (HsOverLit id) | Overloaded literals
HsLit HsLit | Simple (non-overloaded) literals

HsLam (MatchGroup id (LHsExpr id))

Lambda abstraction. Currently always a single match

- `AnnKeywordId` : `AnnLam`, `AnnRarrow`,

HsLamCase (PostTc id Type) (MatchGroup id (LHsExpr id))

Lambda-case

- `AnnKeywordId` : `AnnLam`, `AnnCase`,`AnnOpen`, `AnnClose`

HsApp (LHsExpr id) (LHsExpr id) | Application
OpApp (LHsExpr id) (LHsExpr id) (PostRn id Fixity) (LHsExpr id) | Operator applications: NB Bracketed ops such as (+) come out as Vars.

NegApp (LHsExpr id) (SyntaxExpr id)

Negation operator. Contains the negated expression and the name of `negate`

- `AnnKeywordId` : `AnnMinus`

HsPar (LHsExpr id) | Parenthesised expr; see Note [Parens in HsSyn]
SectionL (LHsExpr id) (LHsExpr id) |
SectionR (LHsExpr id) (LHsExpr id) |

ExplicitTuple [LHsTupArg id] Boxity

Used for explicit tuples and sections thereof

- `AnnKeywordId` : `AnnOpen`, `AnnClose`

HsCase (LHsExpr id) (MatchGroup id (LHsExpr id))

- `AnnKeywordId` : `AnnCase`, `AnnOf`,`AnnOpen` `'{'`, `AnnClose` `'}'`

HsIf (Maybe (SyntaxExpr id)) (LHsExpr id) (LHsExpr id) (LHsExpr id)

- `AnnKeywordId` : `AnnIf`, `AnnSemi`, `AnnThen`,`AnnSemi`, `AnnElse`,

HsMultiIf (PostTc id Type) [LGRHS id (LHsExpr id)]

Multi-way if

- `AnnKeywordId` : `AnnIf` `AnnOpen`,`AnnClose`,

HsLet (HsLocalBinds id) (LHsExpr id)

let(rec)

- `AnnKeywordId` : `AnnLet`, `AnnOpen` `'{'`, `AnnClose` `'}'`,`AnnIn`

HsDo (HsStmtContext Name) [ExprLStmt id] (PostTc id Type)

- `AnnKeywordId` : `AnnDo`, `AnnOpen`, `AnnSemi`, `AnnVbar`, `AnnClose`

ExplicitList (PostTc id Type) (Maybe (SyntaxExpr id)) [LHsExpr id]

Syntactic list: [a,b,c,...]

- `AnnKeywordId` : `AnnOpen` `'['`, `AnnClose` `']'`

ExplicitPArr (PostTc id Type) [LHsExpr id]

Syntactic parallel array: [:e1, ..., en:]

- `AnnKeywordId` : `AnnOpen` `'[:'`, `AnnDotdot`,`AnnComma`, `AnnVbar` `AnnClose` `':]'`

RecordCon (Located id) PostTcExpr (HsRecordBinds id)

Record construction

- `AnnKeywordId` : `AnnOpen` `'{'`, `AnnDotdot`,`AnnClose` `'}'`

RecordUpd (LHsExpr id) (HsRecordBinds id) [DataCon] [PostTc id Type] [PostTc id Type]

Record update

- `AnnKeywordId` : `AnnOpen` `'{'`, `AnnDotdot`,`AnnClose` `'}'`

ExprWithTySig (LHsExpr id) (LHsType id) (PostRn id [Name])

Expression with an explicit type signature. `e :: type`

- `AnnKeywordId` : `AnnDcolon`

ExprWithTySigOut (LHsExpr id) (LHsType Name) |

ArithSeq PostTcExpr (Maybe (SyntaxExpr id)) (ArithSeqInfo id)

Arithmetic sequence

- `AnnKeywordId` : `AnnOpen` `'['`, `AnnComma`,`AnnDotdot`, `AnnClose` `']'`

PArrSeq PostTcExpr (ArithSeqInfo id)

Arithmetic sequence for parallel array

    [:e1..e2:] or [:e1, e2..e3:]

- `AnnKeywordId` : `AnnOpen` `'[:'`, `AnnComma`,`AnnDotdot`, `AnnVbar`, `AnnClose` `':]'`

HsSCC SourceText FastString (LHsExpr id)

- `AnnKeywordId` : `AnnOpen` `'{-# SCC'`, `AnnVal` or `AnnValStr`, `AnnClose` `'#-}'`

HsCoreAnn SourceText FastString (LHsExpr id)

- `AnnKeywordId` : `AnnOpen` `'{-# CORE'`, `AnnVal`, `AnnClose` `'#-}'`

HsBracket (HsBracket id)

- `AnnKeywordId` : `AnnOpen`, `AnnOpen`,`AnnClose`, `AnnClose`

HsRnBracketOut (HsBracket Name) [PendingRnSplice] |
HsTcBracketOut (HsBracket Name) [PendingTcSplice] |

HsSpliceE Bool (HsSplice id)

- `AnnKeywordId` : `AnnOpen`, `AnnClose`

HsQuasiQuoteE (HsQuasiQuote id) |

HsProc (LPat id) (LHsCmdTop id)

`proc` notation for Arrows

- `AnnKeywordId` : `AnnProc`, `AnnRarrow`

HsStatic (LHsExpr id)

- `AnnKeywordId` : `AnnStatic`,

HsArrApp (LHsExpr id) (LHsExpr id) (PostTc id Type) HsArrAppType Bool

- `AnnKeywordId` : `Annlarrowtail`, `Annrarrowtail`,`AnnLarrowtail`, `AnnRarrowtail`

HsArrForm (LHsExpr id) (Maybe Fixity) [LHsCmdTop id]

- `AnnKeywordId` : `AnnOpen` `'(|'`, `AnnClose` `'|)'`

HsTick (Tickish id) (LHsExpr id) |
HsBinTick Int Int (LHsExpr id) |

HsTickPragma SourceText (FastString, (Int, Int), (Int, Int)) (LHsExpr id)

- `AnnKeywordId` : `AnnOpen`, `AnnOpen` `'{-# GENERATED'`, `AnnVal`,`AnnVal`, `AnnColon`,`AnnVal`, `AnnMinus`, `AnnVal`,`AnnColon`, `AnnVal`, `AnnClose` `'#-}'`

EWildPat |

EAsPat (Located id) (LHsExpr id)

- `AnnKeywordId` : `AnnAt`

EViewPat (LHsExpr id) (LHsExpr id)

- `AnnKeywordId` : `AnnRarrow`

ELazyPat (LHsExpr id)

- `AnnKeywordId` : `AnnTilde`

HsType (LHsType id) |
HsWrap HsWrapper (HsExpr id) |
HsUnboundVar RdrName |

Instances

DataId id => Data (HsExpr id) |
OutputableBndr id => Outputable (HsExpr id) |

type LHsTupArg id = Located (HsTupArg id)

HsTupArg is used for tuple sections (,a,) is represented by ExplicitTuple [Missing ty1, Present a, Missing ty3] Which in turn stands for (x:ty1 y:ty2. (x,a,y))

data HsTupArg id

- `AnnKeywordId` : `AnnComma`

Constructors

Present (LHsExpr id) | The argument
Missing (PostTc id Type) | The argument is missing, but this is its type

Instances

DataId id => Data (HsTupArg id) |

tupArgPresent :: LHsTupArg id -> Bool

pprLExpr :: OutputableBndr id => LHsExpr id -> SDoc

pprExpr :: OutputableBndr id => HsExpr id -> SDoc

isQuietHsExpr :: HsExpr id -> Bool

pprBinds :: (OutputableBndr idL, OutputableBndr idR) => HsLocalBindsLR idL idR -> SDoc

ppr_lexpr :: OutputableBndr id => LHsExpr id -> SDoc

ppr_expr :: forall id. OutputableBndr id => HsExpr id -> SDoc

pprDebugParendExpr :: OutputableBndr id => LHsExpr id -> SDoc

pprParendExpr :: OutputableBndr id => LHsExpr id -> SDoc

hsExprNeedsParens :: HsExpr id -> Bool

isAtomicHsExpr :: HsExpr id -> Bool

type LHsCmd id = Located (HsCmd id)

data HsCmd id

Constructors

HsCmdArrApp (LHsExpr id) (LHsExpr id) (PostTc id Type) HsArrAppType Bool

- `AnnKeywordId` : `Annlarrowtail`, `Annrarrowtail`,`AnnLarrowtail`, `AnnRarrowtail`

HsCmdArrForm (LHsExpr id) (Maybe Fixity) [LHsCmdTop id]

- `AnnKeywordId` : `AnnOpen` `'(|'`, `AnnClose` `'|)'`

HsCmdApp (LHsCmd id) (LHsExpr id) |

HsCmdLam (MatchGroup id (LHsCmd id))

- `AnnKeywordId` : `AnnLam`, `AnnRarrow`,

HsCmdPar (LHsCmd id)

- `AnnKeywordId` : `AnnOpen` `'('`, `AnnClose` `')'`

HsCmdCase (LHsExpr id) (MatchGroup id (LHsCmd id))

- `AnnKeywordId` : `AnnCase`, `AnnOf`,`AnnOpen` `'{'`, `AnnClose` `'}'`

HsCmdIf (Maybe (SyntaxExpr id)) (LHsExpr id) (LHsCmd id) (LHsCmd id)

- `AnnKeywordId` : `AnnIf`, `AnnSemi`, `AnnThen`,`AnnSemi`, `AnnElse`,

HsCmdLet (HsLocalBinds id) (LHsCmd id)

- `AnnKeywordId` : `AnnLet`, `AnnOpen` `'{'`, `AnnClose` `'}'`,`AnnIn`

HsCmdDo [CmdLStmt id] (PostTc id Type)

- `AnnKeywordId` : `AnnDo`, `AnnOpen`, `AnnSemi`, `AnnVbar`, `AnnClose`

HsCmdCast TcCoercion (HsCmd id) |

Instances

DataId id => Data (HsCmd id) |
OutputableBndr id => Outputable (HsCmd id) |

data HsArrAppType

Constructors

HsHigherOrderApp |
HsFirstOrderApp |

Instances

Data HsArrAppType |

type LHsCmdTop id = Located (HsCmdTop id)

Top-level command, introducing a new arrow. This may occur inside a proc (where the stack is empty) or as an argument of a command-forming operator.

data HsCmdTop id

Constructors

HsCmdTop (LHsCmd id) (PostTc id Type) (PostTc id Type) (CmdSyntaxTable id) |

Instances

DataId id => Data (HsCmdTop id) |
OutputableBndr id => Outputable (HsCmdTop id) |

pprLCmd :: OutputableBndr id => LHsCmd id -> SDoc

pprCmd :: OutputableBndr id => HsCmd id -> SDoc

isQuietHsCmd :: HsCmd id -> Bool

ppr_lcmd :: OutputableBndr id => LHsCmd id -> SDoc

ppr_cmd :: forall id. OutputableBndr id => HsCmd id -> SDoc

pprCmdArg :: OutputableBndr id => HsCmdTop id -> SDoc

type HsRecordBinds id = HsRecFields id (LHsExpr id)

data MatchGroup id body

Constructors

MG |

Fields

mg_alts :: [LMatch id body]
mg_arg_tys :: [PostTc id Type]
mg_res_ty :: PostTc id Type
mg_origin :: Origin

Instances

(Data body, DataId id) => Data (MatchGroup id body) |

type LMatch id body = Located (Match id body)

May have `AnnKeywordId` : `AnnSemi` when in a list

data Match id body

Constructors

Match |

Fields

m_fun_id_infix :: Maybe (Located id, Bool)
m_pats :: [LPat id]
m_type :: Maybe (LHsType id)
m_grhss :: GRHSs id body

Instances

(Data body, DataId id) => Data (Match id body) |

isEmptyMatchGroup :: MatchGroup id body -> Bool

matchGroupArity :: MatchGroup id body -> Arity

hsLMatchPats :: LMatch id body -> [LPat id]

data GRHSs id body

GRHSs are used both for pattern bindings and for Matches

- `AnnKeywordId` : `AnnVbar`, `AnnEqual`,`AnnWhere`, `AnnOpen`,`AnnClose` `AnnRarrow`,`AnnSemi`

Constructors

GRHSs |

Fields

grhssGRHSs :: [LGRHS id body]

  Guarded RHSs

grhssLocalBinds :: HsLocalBinds id

  The where clause

Instances

(Data body, DataId id) => Data (GRHSs id body) |

type LGRHS id body = Located (GRHS id body)

data GRHS id body

Guarded Right Hand Side.

Constructors

GRHS [GuardLStmt id] body |

Instances

(Data body, DataId id) => Data (GRHS id body) |

pprMatches :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> MatchGroup idR body -> SDoc

pprFunBind :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => idL -> Bool -> MatchGroup idR body -> SDoc

pprPatBind :: forall bndr id body. (OutputableBndr bndr, OutputableBndr id, Outputable body) => LPat bndr -> GRHSs id body -> SDoc

pprMatch :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> Match idR body -> SDoc

pprGRHSs :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> GRHSs idR body -> SDoc

pprGRHS :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> GRHS idR body -> SDoc

pp_rhs :: Outputable body => HsMatchContext idL -> body -> SDoc

type LStmt id body = Located (StmtLR id id body)

type LStmtLR idL idR body = Located (StmtLR idL idR body)

type Stmt id body = StmtLR id id body

type CmdLStmt id = LStmt id (LHsCmd id)

type CmdStmt id = Stmt id (LHsCmd id)

type ExprLStmt id = LStmt id (LHsExpr id)

type ExprStmt id = Stmt id (LHsExpr id)

type GuardLStmt id = LStmt id (LHsExpr id)

type GuardStmt id = Stmt id (LHsExpr id)

type GhciLStmt id = LStmt id (LHsExpr id)

type GhciStmt id = Stmt id (LHsExpr id)

data StmtLR idL idR body

API Annotations when in qualifier lists or guards - `AnnKeywordId` : `AnnVbar`, `AnnComma`,`AnnThen`, `AnnBy`,`AnnBy`, `AnnGroup`,`AnnUsing`

Constructors

LastStmt body (SyntaxExpr idR) |

BindStmt (LPat idL) body (SyntaxExpr idR) (SyntaxExpr idR)

- `AnnKeywordId` : `AnnLarrow`

BodyStmt body (SyntaxExpr idR) (SyntaxExpr idR) (PostTc idR Type) |

LetStmt (HsLocalBindsLR idL idR)

- `AnnKeywordId` : `AnnLet` `AnnOpen` `'{'`,`AnnClose` `'}'`,

ParStmt [ParStmtBlock idL idR] (SyntaxExpr idR) (SyntaxExpr idR) |
TransStmt |

Fields

trS_form :: TransForm
trS_stmts :: [ExprLStmt idL]
trS_bndrs :: [(idR, idR)]
trS_using :: LHsExpr idR
trS_by :: Maybe (LHsExpr idR)
trS_ret :: SyntaxExpr idR
trS_bind :: SyntaxExpr idR
trS_fmap :: SyntaxExpr idR

RecStmt

- `AnnKeywordId` : `AnnRec`

Fields

recS_stmts :: [LStmtLR idL idR body]
recS_later_ids :: [idR]
recS_rec_ids :: [idR]
recS_bind_fn :: SyntaxExpr idR
recS_ret_fn :: SyntaxExpr idR
recS_mfix_fn :: SyntaxExpr idR
recS_later_rets :: [PostTcExpr]
recS_rec_rets :: [PostTcExpr]
recS_ret_ty :: PostTc idR Type

Instances

(Data body, DataId idL, DataId idR) => Data (StmtLR idL idR body) |
(OutputableBndr idL, OutputableBndr idR, Outputable body) => Outputable (StmtLR idL idR body) |

data TransForm

Constructors

ThenForm |
GroupForm |

Instances

Data TransForm |

data ParStmtBlock idL idR

Constructors

ParStmtBlock [ExprLStmt idL] [idR] (SyntaxExpr idR) |

Instances

(DataId idL, DataId idR) => Data (ParStmtBlock idL idR) |
(OutputableBndr idL, OutputableBndr idR) => Outputable (ParStmtBlock idL idR) |

pprStmt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => StmtLR idL idR body -> SDoc

pprTransformStmt :: OutputableBndr id => [id] -> LHsExpr id -> Maybe (LHsExpr id) -> SDoc

pprTransStmt :: Outputable body => Maybe body -> body -> TransForm -> SDoc

pprBy :: Outputable body => Maybe body -> SDoc

pprDo :: (OutputableBndr id, Outputable body) => HsStmtContext any -> [LStmt id body] -> SDoc

ppr_do_stmts :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => [LStmtLR idL idR body] -> SDoc

pprComp :: (OutputableBndr id, Outputable body) => [LStmt id body] -> SDoc

pprQuals :: (OutputableBndr id, Outputable body) => [LStmt id body] -> SDoc

data HsSplice id

Constructors

HsSplice id (LHsExpr id) |

Instances

DataId id => Data (HsSplice id) |
OutputableBndr id => Outputable (HsSplice id) |

data PendingSplice id

Constructors

PendSplice Name (LHsExpr id) |

Instances

DataId id => Data (PendingSplice id) |
OutputableBndr id => Outputable (PendingSplice id) |

data PendingRnSplice

Constructors

PendingRnExpSplice (PendingSplice Name) |
PendingRnPatSplice (PendingSplice Name) |
PendingRnTypeSplice (PendingSplice Name) |
PendingRnDeclSplice (PendingSplice Name) |
PendingRnCrossStageSplice Name |

Instances

Data PendingRnSplice |
Outputable PendingRnSplice |

type PendingTcSplice = PendingSplice Id

pprUntypedSplice :: OutputableBndr id => HsSplice id -> SDoc

pprTypedSplice :: OutputableBndr id => HsSplice id -> SDoc

pprSplice :: OutputableBndr id => Bool -> HsSplice id -> SDoc

data HsBracket id

Constructors

ExpBr (LHsExpr id) |
PatBr (LPat id) |
DecBrL [LHsDecl id] |
DecBrG (HsGroup id) |
TypBr (LHsType id) |
VarBr Bool id |
TExpBr (LHsExpr id) |

Instances

DataId id => Data (HsBracket id) |
OutputableBndr id => Outputable (HsBracket id) |

isTypedBracket :: HsBracket id -> Bool

pprHsBracket :: OutputableBndr id => HsBracket id -> SDoc

thBrackets :: SDoc -> SDoc -> SDoc

thTyBrackets :: SDoc -> SDoc

data ArithSeqInfo id

Constructors

From (LHsExpr id) |
FromThen (LHsExpr id) (LHsExpr id) |
FromTo (LHsExpr id) (LHsExpr id) |
FromThenTo (LHsExpr id) (LHsExpr id) (LHsExpr id) |

Instances

DataId id => Data (ArithSeqInfo id) |
OutputableBndr id => Outputable (ArithSeqInfo id) |

pp_dotdot :: SDoc

data HsMatchContext id

Constructors

FunRhs id Bool |
LambdaExpr |
CaseAlt |
IfAlt |
ProcExpr |
PatBindRhs |
RecUpd |
StmtCtxt (HsStmtContext id) |
ThPatSplice |
ThPatQuote |
PatSyn |

Instances

Data id => Data (HsMatchContext id) |

data HsStmtContext id

Constructors

ListComp |
MonadComp |
PArrComp |
DoExpr |
MDoExpr |
ArrowExpr |
GhciStmtCtxt |
PatGuard (HsMatchContext id) |
ParStmtCtxt (HsStmtContext id) |
TransStmtCtxt (HsStmtContext id) |

Instances

Data id => Data (HsStmtContext id) |

isListCompExpr :: HsStmtContext id -> Bool

isMonadCompExpr :: HsStmtContext id -> Bool

matchSeparator :: HsMatchContext id -> SDoc

pprMatchContext :: Outputable id => HsMatchContext id -> SDoc

pprMatchContextNoun :: Outputable id => HsMatchContext id -> SDoc

pprAStmtContext :: Outputable id => HsStmtContext id -> SDoc

pprStmtContext :: Outputable id => HsStmtContext id -> SDoc

matchContextErrString :: Outputable id => HsMatchContext id -> SDoc

pprMatchInCtxt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsMatchContext idL -> Match idR body -> SDoc

pprStmtInCtxt :: (OutputableBndr idL, OutputableBndr idR, Outputable body) => HsStmtContext idL -> StmtLR idL idR body -> SDoc