module Language.Haskell.Tools.Rewrite.Create.Stmts where
import Language.Haskell.Tools.AST (UCompStmt(..), UListCompBody(..), UStmt'(..))
import Language.Haskell.Tools.PrettyPrint.Prepare
import Language.Haskell.Tools.Rewrite.Create.Utils (mkAnn, mkAnnList, mkAnnMaybe)
import Language.Haskell.Tools.Rewrite.ElementTypes
mkBindStmt :: Pattern -> Expr -> Stmt
mkBindStmt bound expr = mkAnn (child <> " <- " <> child) $ UBindStmt bound expr
mkExprStmt :: Expr -> Stmt
mkExprStmt = mkAnn child . UExprStmt
mkLetStmt :: [LocalBind] -> Stmt
mkLetStmt = mkAnn ("let " <> child) . ULetStmt . mkAnnList (indented list)
mkRecStmt :: [Stmt] -> Stmt
mkRecStmt = mkAnn ("rec " <> child) . URecStmt . mkAnnList (indented list)
mkListCompBody :: [CompStmt] -> ListCompBody
mkListCompBody = mkAnn child . UListCompBody . mkAnnList (separatedBy " " list)
mkCompStmt :: Stmt -> CompStmt
mkCompStmt = mkAnn child . UCompStmt
mkThenStmt :: Expr -> Maybe Expr -> CompStmt
mkThenStmt th by = mkAnn ("then " <> child)
$ UThenStmt th $ mkAnnMaybe (after " by " opt) by
mkGroupStmt :: Maybe Expr -> Maybe Expr -> CompStmt
mkGroupStmt by using = mkAnn ("then group" <> child)
$ UGroupStmt (mkAnnMaybe (after " by " opt) by)
(mkAnnMaybe (after " using " opt) using)
mkBindCmd :: Pattern -> Cmd -> CmdStmt
mkBindCmd bound expr = mkAnn (child <> " <- " <> child) $ UBindStmt bound expr
mkExprCmd :: Cmd -> CmdStmt
mkExprCmd = mkAnn child . UExprStmt
mkLetStmtCmd :: [LocalBind] -> CmdStmt
mkLetStmtCmd = mkAnn ("let " <> child) . ULetStmt . mkAnnList (indented list)
mkRecCmd :: [CmdStmt] -> CmdStmt
mkRecCmd = mkAnn ("rec " <> child) . URecStmt . mkAnnList (indented list)