module Language.Haskell.Tools.AST.Representation.Stmts where
import Language.Haskell.Tools.AST.Ann (Ann(..), AnnListG(..), AnnMaybeG(..))
import Language.Haskell.Tools.AST.Representation.Binds (ULocalBind)
import Language.Haskell.Tools.AST.Representation.Exprs (UExpr, UCmd)
import Language.Haskell.Tools.AST.Representation.Patterns (UPattern(..))
data UStmt' expr dom stage
= UBindStmt { _stmtPattern :: Ann UPattern dom stage
, _stmtExpr :: Ann expr dom stage
}
| UExprStmt { _stmtExpr :: Ann expr dom stage
}
| ULetStmt { _stmtBinds :: AnnListG ULocalBind dom stage
}
| URecStmt { _cmdStmtBinds :: AnnListG (UStmt' expr) dom stage
}
type UStmt = UStmt' UExpr
type UCmdStmt = UStmt' UCmd
data UListCompBody dom stage
= UListCompBody { _compStmts :: AnnListG UCompStmt dom stage
}
data UCompStmt dom stage
= UCompStmt { _compStmt :: Ann UStmt dom stage
}
| UThenStmt { _thenExpr :: Ann UExpr dom stage
, _byExpr :: AnnMaybeG UExpr dom stage
}
| UGroupStmt { _byExpr :: AnnMaybeG UExpr dom stage
, _usingExpr :: AnnMaybeG UExpr dom stage
}
data UDoKind dom stage
= UDoKeyword
| UMDoKeyword