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 a
= BindStmt { _stmtPattern :: Ann Pattern a
, _stmtExpr :: Ann expr a
}
| ExprStmt { _stmtExpr :: Ann expr a
}
| LetStmt { _stmtBinds :: AnnList LocalBind a
}
| RecStmt { _cmdStmtBinds :: AnnList (Stmt' expr) a
}
type Stmt = Stmt' Expr
data ListCompBody a
= ListCompBody { _compStmts :: AnnList CompStmt a
}
data CompStmt a
= CompStmt { _compStmt :: Ann Stmt a
}
| ThenStmt { _thenExpr :: Ann Expr a
, _byExpr :: AnnMaybe Expr a
}
| GroupStmt { _byExpr :: AnnMaybe Expr a
, _usingExpr :: AnnMaybe Expr a
}