module Language.Haskell.Tools.AST.Representation.Exprs where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG, AnnMaybeG)
import {-# SOURCE #-} Language.Haskell.Tools.AST.Representation.Binds (ULocalBind, ULocalBinds, URhsGuard)
import Language.Haskell.Tools.AST.Representation.Literals (ULiteral)
import Language.Haskell.Tools.AST.Representation.Names (UStringNode, UName, UOperator)
import Language.Haskell.Tools.AST.Representation.Patterns (UPattern)
import Language.Haskell.Tools.AST.Representation.Stmts
import {-# SOURCE #-} Language.Haskell.Tools.AST.Representation.TH (UBracket, UQuasiQuote, USplice)
import Language.Haskell.Tools.AST.Representation.Types (UType)
data UExpr dom stage
= UVar { _exprName :: Ann UName dom stage
}
| ULit { _exprLit :: Ann ULiteral dom stage
}
| UInfixApp { _exprLhs :: Ann UExpr dom stage
, _exprOperator :: Ann UOperator dom stage
, _exprRhs :: Ann UExpr dom stage
}
| UPrefixApp { _exprOperator :: Ann UOperator dom stage
, _exprRhs :: Ann UExpr dom stage
}
| UApp { _exprFun :: Ann UExpr dom stage
, _exprArg :: Ann UExpr dom stage
}
| ULambda { _exprBindings :: AnnListG UPattern dom stage
, _exprInner :: Ann UExpr dom stage
}
| ULet { _exprFunBind :: AnnListG ULocalBind dom stage
, _exprInner :: Ann UExpr dom stage
}
| UIf { _exprCond :: Ann UExpr dom stage
, _exprThen :: Ann UExpr dom stage
, _exprElse :: Ann UExpr dom stage
}
| UMultiIf { _exprIfAlts :: AnnListG UGuardedCaseRhs dom stage
}
| UCase { _exprCase :: Ann UExpr dom stage
, _exprAlts :: AnnListG UAlt dom stage
}
| UDo { _doKind :: Ann UDoKind dom stage
, _exprStmts :: AnnListG UStmt dom stage
}
| UTuple { _tupleElems :: AnnListG UExpr dom stage
}
| UUnboxedTuple { _tupleElems :: AnnListG UExpr dom stage
}
| UTupleSection { _tupleSectionElems :: AnnListG UTupSecElem dom stage
}
| UUnboxedTupSec { _tupleSectionElems :: AnnListG UTupSecElem dom stage
}
| UList { _listElems :: AnnListG UExpr dom stage
}
| UParArray { _listElems :: AnnListG UExpr dom stage
}
| UParen { _exprInner :: Ann UExpr dom stage
}
| ULeftSection { _exprLhs :: Ann UExpr dom stage
, _exprOperator :: Ann UOperator dom stage
}
| URightSection { _exprOperator :: Ann UOperator dom stage
, _exprRhs :: Ann UExpr dom stage
}
| URecCon { _exprRecName :: Ann UName dom stage
, _exprRecFields :: AnnListG UFieldUpdate dom stage
}
| URecUpdate { _exprInner :: Ann UExpr dom stage
, _exprRecFields :: AnnListG UFieldUpdate dom stage
}
| UEnum { _enumFrom :: Ann UExpr dom stage
, _enumThen :: AnnMaybeG UExpr dom stage
, _enumTo :: AnnMaybeG UExpr dom stage
}
| UParArrayEnum { _enumFrom :: Ann UExpr dom stage
, _enumThen :: AnnMaybeG UExpr dom stage
, _enumToFix :: Ann UExpr dom stage
}
| UListComp { _compExpr :: Ann UExpr dom stage
, _compBody :: AnnListG UListCompBody dom stage
}
| UParArrayComp { _compExpr :: Ann UExpr dom stage
, _compBody :: AnnListG UListCompBody dom stage
}
| UTypeSig { _exprInner :: Ann UExpr dom stage
, _exprSig :: Ann UType dom stage
}
| UExplTypeApp { _exprInner :: Ann UExpr dom stage
, _exprType :: Ann UType dom stage
}
| UVarQuote { _quotedName :: Ann UName dom stage
}
| UTypeQuote { _quotedName :: Ann UName dom stage
}
| UBracketExpr { _exprBracket :: Ann UBracket dom stage
}
| USplice { _exprSplice :: Ann USplice dom stage
}
| UQuasiQuoteExpr { _exprQQ :: Ann UQuasiQuote dom stage
}
| UExprPragma { _exprPragma :: Ann UExprPragma dom stage
, _innerExpr :: Ann UExpr dom stage
}
| UProc { _procPattern :: Ann UPattern dom stage
, _procExpr :: Ann UCmd dom stage
}
| UArrowApp { _exprLhs :: Ann UExpr dom stage
, _arrowAppl :: Ann UArrowAppl dom stage
, _exprRhs :: Ann UExpr dom stage
}
| ULamCase { _exprAlts :: AnnListG UAlt dom stage
}
| UStaticPtr { _exprInner :: Ann UExpr dom stage
}
| UUnboxedSum { _exprSumPlaceholdersBefore :: AnnListG UUnboxedSumPlaceHolder dom stage
, _exprInner :: Ann UExpr dom stage
, _exprSumPlaceholdersAfter :: AnnListG UUnboxedSumPlaceHolder dom stage
}
| UHole
data UFieldUpdate dom stage
= UNormalFieldUpdate { _fieldName :: Ann UName dom stage
, _fieldValue :: Ann UExpr dom stage
}
| UFieldPun { _fieldUpdateName :: Ann UName dom stage
}
| UFieldWildcard { _fieldWildcard :: Ann UFieldWildcard dom stage
}
data UFieldWildcard dom stage = FldWildcard
data UTupSecElem dom stage
= Present { _tupSecExpr :: Ann UExpr dom stage
}
| Missing
data UAlt' expr dom stage
= UAlt { _altPattern :: Ann UPattern dom stage
, _altRhs :: Ann (UCaseRhs' expr) dom stage
, _altBinds :: AnnMaybeG ULocalBinds dom stage
}
type UAlt = UAlt' UExpr
type UCmdAlt = UAlt' UCmd
data UCaseRhs' expr dom stage
= UUnguardedCaseRhs { _rhsCaseExpr :: Ann expr dom stage
}
| UGuardedCaseRhss { _rhsCaseGuards :: AnnListG (UGuardedCaseRhs' expr) dom stage
}
type UCaseRhs = UCaseRhs' UExpr
type UCmdCaseRhs = UCaseRhs' UCmd
data UGuardedCaseRhs' expr dom stage
= UGuardedCaseRhs { _caseGuardStmts :: AnnListG URhsGuard dom stage
, _caseGuardExpr :: Ann expr dom stage
}
type UGuardedCaseRhs = UGuardedCaseRhs' UExpr
type UCmdGuardedCaseRhs = UGuardedCaseRhs' UCmd
data UExprPragma dom stage
= UCorePragma { _pragmaStr :: Ann UStringNode dom stage
}
| USccPragma { _pragmaStr :: Ann UStringNode dom stage
}
| UGeneratedPragma { _pragmaSrcRange :: Ann USourceRange dom stage
}
data USourceRange dom stage
= USourceRange { _srFileName :: Ann UStringNode dom stage
, _srFromLine :: Ann Number dom stage
, _srFromCol :: Ann Number dom stage
, _srToLine :: Ann Number dom stage
, _srToCol :: Ann Number dom stage
}
data Number dom stage
= Number { _numberInteger :: Integer
}
data UCmd dom stage
= UArrowAppCmd { _cmdLhs :: Ann UExpr dom stage
, _cmdArrowOp :: Ann UArrowAppl dom stage
, _cmdRhs :: Ann UExpr dom stage
}
| UArrowFormCmd { _cmdExpr :: Ann UExpr dom stage
, _cmdInnerCmds :: AnnListG UCmd dom stage
}
| UAppCmd { _cmdInnerCmd :: Ann UCmd dom stage
, _cmdApplied :: Ann UExpr dom stage
}
| UInfixCmd { _cmdLeftCmd :: Ann UCmd dom stage
, _cmdOperator :: Ann UName dom stage
, _cmdRightCmd :: Ann UCmd dom stage
}
| ULambdaCmd { _cmdBindings :: AnnListG UPattern dom stage
, _cmdInner :: Ann UCmd dom stage
}
| UParenCmd { _cmdInner :: Ann UCmd dom stage
}
| UCaseCmd { _cmdExpr :: Ann UExpr dom stage
, _cmdAlts :: AnnListG UCmdAlt dom stage
}
| UIfCmd { _cmdExpr :: Ann UExpr dom stage
, _cmdThen :: Ann UCmd dom stage
, _cmdElse :: Ann UCmd dom stage
}
| ULetCmd { _cmdBinds :: AnnListG ULocalBind dom stage
, _cmdInner :: Ann UCmd dom stage
}
| UDoCmd { _cmdStmts :: AnnListG UCmdStmt dom stage
}
data UArrowAppl dom stage
= ULeftAppl
| URightAppl
| ULeftHighApp
| URightHighApp
data UUnboxedSumPlaceHolder dom stage = UUnboxedSumPlaceHolder