- | OpApp (LHsExpr id) -- left operand
- (LHsExpr id) -- operator
- Fixity -- Renamer adds fixity; bottom until then
- (LHsExpr id) -- right operand
-
- | NegApp (LHsExpr id) -- negated expr
- (SyntaxExpr id) -- Name of 'negate'
-
- | HsPar (LHsExpr id) -- parenthesised expr
-
- | SectionL (LHsExpr id) -- operand
- (LHsExpr id) -- operator
- | SectionR (LHsExpr id) -- operator
- (LHsExpr id) -- operand
-
- | HsCase (LHsExpr id)
- (MatchGroup id)
-
- | HsIf (LHsExpr id) -- predicate
- (LHsExpr id) -- then part
- (LHsExpr id) -- else part
-
- | HsLet (HsLocalBinds id) -- let(rec)
- (LHsExpr id)
-
- | HsDo (HsStmtContext Name) -- The parameterisation is unimportant
- -- because in this context we never use
- -- the PatGuard or ParStmt variant
- [LStmt id] -- "do":one or more stmts
- (LHsExpr id) -- The body; the last expression in the 'do'
- -- of [ body | ... ] in a list comp
- PostTcType -- Type of the whole expression
-
- | ExplicitList -- syntactic list
- PostTcType -- Gives type of components of list
- [LHsExpr id]
-
- | ExplicitPArr -- syntactic parallel array: [:e1, ..., en:]
- PostTcType -- type of elements of the parallel array
- [LHsExpr id]
-
- | ExplicitTuple -- tuple
- [LHsExpr id]
- -- NB: Unit is ExplicitTuple []
- -- for tuples, we can get the types
- -- direct from the components
- Boxity
-
-
- -- Record construction
- | RecordCon (Located id) -- The constructor. After type checking
- -- it's the dataConWrapId of the constructor
- PostTcExpr -- Data con Id applied to type args
- (HsRecordBinds id)
-
- -- Record update
- | RecordUpd (LHsExpr id)
- (HsRecordBinds id)
- [DataCon] -- Filled in by the type checker to the *non-empty*
- -- list of DataCons that have all the upd'd fields
- [PostTcType] -- Argument types of *input* record type
- [PostTcType] -- and *output* record type
- -- For a type family, the arg types are of the *instance* tycon, not the family tycon
-
- | ExprWithTySig -- e :: type
- (LHsExpr id)
- (LHsType id)
-
- | ExprWithTySigOut -- TRANSLATION
- (LHsExpr id)
- (LHsType Name) -- Retain the signature for round-tripping purposes
-
- | ArithSeq -- arithmetic sequence
- PostTcExpr
- (ArithSeqInfo id)
-
- | PArrSeq -- arith. sequence for parallel array
- PostTcExpr -- [:e1..e2:] or [:e1, e2..e3:]
- (ArithSeqInfo id)
-
- | HsSCC FastString -- "set cost centre" (_scc_) annotation
- (LHsExpr id) -- expr whose cost is to be measured
-
- | HsCoreAnn FastString -- hdaume: core annotation
+ | OpApp (LHsExpr id) -- left operand
+ (LHsExpr id) -- operator
+ Fixity -- Renamer adds fixity; bottom until then
+ (LHsExpr id) -- right operand
+
+ | NegApp (LHsExpr id) -- negated expr
+ (SyntaxExpr id) -- Name of 'negate'
+
+ | HsPar (LHsExpr id) -- parenthesised expr
+
+ | SectionL (LHsExpr id) -- operand
+ (LHsExpr id) -- operator
+ | SectionR (LHsExpr id) -- operator
+ (LHsExpr id) -- operand
+
+ | HsCase (LHsExpr id)
+ (MatchGroup id)
+
+ | HsIf (LHsExpr id) -- predicate
+ (LHsExpr id) -- then part
+ (LHsExpr id) -- else part
+
+ | HsLet (HsLocalBinds id) -- let(rec)
+ (LHsExpr id)
+
+ | HsDo (HsStmtContext Name) -- The parameterisation is unimportant
+ -- because in this context we never use
+ -- the PatGuard or ParStmt variant
+ [LStmt id] -- "do":one or more stmts
+ (LHsExpr id) -- The body; the last expression in the
+ -- 'do' of [ body | ... ] in a list comp
+ PostTcType -- Type of the whole expression
+
+ | ExplicitList -- syntactic list
+ PostTcType -- Gives type of components of list
+ [LHsExpr id]
+
+ | ExplicitPArr -- syntactic parallel array: [:e1, ..., en:]
+ PostTcType -- type of elements of the parallel array
+ [LHsExpr id]
+
+ | ExplicitTuple -- tuple
+ [LHsExpr id]
+ -- NB: Unit is ExplicitTuple []
+ -- for tuples, we can get the types
+ -- direct from the components
+ Boxity
+
+
+ -- Record construction
+ | RecordCon (Located id) -- The constructor. After type checking
+ -- it's the dataConWrapId of the constructor
+ PostTcExpr -- Data con Id applied to type args
+ (HsRecordBinds id)
+
+ -- Record update
+ | RecordUpd (LHsExpr id)
+ (HsRecordBinds id)
+ [DataCon] -- Filled in by the type checker to the
+ -- _non-empty_ list of DataCons that have
+ -- all the upd'd fields
+ [PostTcType] -- Argument types of *input* record type
+ [PostTcType] -- and *output* record type
+ -- For a type family, the arg types are of the *instance* tycon,
+ -- not the family tycon
+
+ | ExprWithTySig -- e :: type
+ (LHsExpr id)
+ (LHsType id)
+
+ | ExprWithTySigOut -- TRANSLATION
+ (LHsExpr id)
+ (LHsType Name) -- Retain the signature for
+ -- round-tripping purposes
+
+ | ArithSeq -- arithmetic sequence
+ PostTcExpr
+ (ArithSeqInfo id)
+
+ | PArrSeq -- arith. sequence for parallel array
+ PostTcExpr -- [:e1..e2:] or [:e1, e2..e3:]
+ (ArithSeqInfo id)
+
+ | HsSCC FastString -- "set cost centre" SCC pragma
+ (LHsExpr id) -- expr whose cost is to be measured
+
+ | HsCoreAnn FastString -- hdaume: core annotation