haskell-tools-ast-0.3.0.0: Language/Haskell/Tools/AST/Representation/Stmts.hs
-- | Representation of Haskell statements (both do-notation and comprehensions)
module Language.Haskell.Tools.AST.Representation.Stmts where
import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Representation.Names
import Language.Haskell.Tools.AST.Representation.Patterns
import {-# SOURCE #-} Language.Haskell.Tools.AST.Representation.Exprs (UExpr, UCmd)
import {-# SOURCE #-} Language.Haskell.Tools.AST.Representation.Binds (ULocalBind)
-- | Normal monadic statements
data UStmt' expr dom stage
= UBindStmt { _stmtPattern :: Ann UPattern dom stage
, _stmtExpr :: Ann expr dom stage
} -- ^ Binding statement (@ x <- action @)
| UExprStmt { _stmtExpr :: Ann expr dom stage
} -- ^ Non-binding statement (@ action @)
| ULetStmt { _stmtBinds :: AnnListG ULocalBind dom stage
} -- ^ Let statement (@ let x = 3; y = 4 @)
| URecStmt { _cmdStmtBinds :: AnnListG (UStmt' expr) dom stage
} -- ^ A recursive binding statement with (@ rec b <- f a c; c <- f b a @)
type UStmt = UStmt' UExpr
type UCmdStmt = UStmt' UCmd
-- | Body of a list comprehension: (@ | x <- [1..10] @)
data UListCompBody dom stage
= UListCompBody { _compStmts :: AnnListG UCompStmt dom stage
}
-- | List comprehension statement
data UCompStmt dom stage
= UCompStmt { _compStmt :: Ann UStmt dom stage
} -- ^ Normal monadic statement of a list comprehension
| UThenStmt { _thenExpr :: Ann UExpr dom stage
, _byExpr :: AnnMaybeG UExpr dom stage
} -- ^ Then statements by @TransformListComp@ (@ then sortWith by (x + y) @)
| UGroupStmt { _byExpr :: AnnMaybeG UExpr dom stage
, _usingExpr :: AnnMaybeG UExpr dom stage
} -- ^ Grouping statements by @TransformListComp@ (@ then group by (x + y) using groupWith @)
-- Note: either byExpr or usingExpr must have a value
-- | Keywords @do@ or @mdo@ to start a do-block
data UDoKind dom stage
= UDoKeyword
| UMDoKeyword