module Language.Haskell.Tools.AST.Stmts where
import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Base
import Language.Haskell.Tools.AST.Patterns
import Language.Haskell.Tools.AST.Exprs (Expr, Cmd)
import Language.Haskell.Tools.AST.Binds (LocalBind)
data Stmt' expr dom stage
= BindStmt { _stmtPattern :: Ann Pattern dom stage
, _stmtExpr :: Ann expr dom stage
}
| ExprStmt { _stmtExpr :: Ann expr dom stage
}
| LetStmt { _stmtBinds :: AnnList LocalBind dom stage
}
| RecStmt { _cmdStmtBinds :: AnnList (Stmt' expr) dom stage
}
type Stmt = Stmt' Expr
data ListCompBody dom stage
= ListCompBody { _compStmts :: AnnList CompStmt dom stage
}
data CompStmt dom stage
= CompStmt { _compStmt :: Ann Stmt dom stage
}
| ThenStmt { _thenExpr :: Ann Expr dom stage
, _byExpr :: AnnMaybe Expr dom stage
}
| GroupStmt { _byExpr :: AnnMaybe Expr dom stage
, _usingExpr :: AnnMaybe Expr dom stage
}