{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- UUAGC 0.9.55 (src/GLua/AG/PrettyPrint.ag)
module GLua.AG.PrettyPrint where

{-# LINE 10 "src/GLua/AG/AST.ag" #-}

import Data.Aeson
import GHC.Generics
import GLua.AG.Token
import GLua.TokenTypes ()
{-# LINE 15 "src/GLua/AG/PrettyPrint.hs" #-}

{-# LINE 4 "src/GLua/AG/PrettyPrint.ag" #-}

import Data.List (foldl', isInfixOf)
import Data.Maybe
import Debug.Trace
import GLua.AG.AST
import GLua.TokenTypes
import Text.Parsec
import Text.Parsec.Error
import Text.ParserCombinators.UU.BasicInstances hiding (pos)
import Text.PrettyPrint hiding (braces, brackets, parens)
import Prelude hiding ((<>))
{-# LINE 29 "src/GLua/AG/PrettyPrint.hs" #-}
{-# LINE 19 "src/GLua/AG/PrettyPrint.ag" #-}

tok :: MToken -> Doc
tok (MToken _ t) = zeroWidthText . show $ t

printList :: (a -> Doc) -> String -> [a] -> Doc
printList _ _ [] = empty
printList f sep' (e : es) = (f e) <> g es
  where
    g [] = empty
    g (e' : es') = zeroWidthText sep' <> (f e') <> g es'

data IsEmpty = IsEmpty | NonEmpty

fromEmpty :: IsEmpty -> Bool
fromEmpty IsEmpty = True
fromEmpty NonEmpty = False

toEmpty :: Bool -> IsEmpty
toEmpty b = if b then IsEmpty else NonEmpty

data PrettyPrintConfig = PPConfig
  { spaceAfterParens :: Bool
  , spaceAfterBrackets :: Bool
  , spaceAfterBraces :: Bool
  , spaceEmptyParens :: Bool
  , spaceEmptyBraces :: Bool
  , spaceAfterLabel :: Bool
  , spaceBeforeComma :: Bool
  , spaceAfterComma :: Bool
  , semicolons :: Bool
  , cStyle :: Bool
  , removeRedundantParens :: Bool
  , minimizeParens :: Bool
  , assumeOperatorAssociativity :: Bool
  , indentation :: String
  }

defaultPPConfig :: PrettyPrintConfig
defaultPPConfig =
  PPConfig
    { spaceAfterParens = False
    , spaceAfterBrackets = False
    , spaceAfterBraces = False
    , spaceEmptyParens = False
    , spaceEmptyBraces = False
    , spaceAfterLabel = False
    , spaceBeforeComma = False
    , spaceAfterComma = True
    , semicolons = False
    , cStyle = False
    , removeRedundantParens = True
    , assumeOperatorAssociativity = True
    , minimizeParens = False
    , indentation = "    "
    }

metaDoc :: Maybe MToken -> Doc
metaDoc (Just m) = zchr ':' <> tok m
metaDoc Nothing = empty

printVarList :: [(PrefixExp, Maybe MExpr)] -> Doc
printVarList vars =
  printList pp_prefixexp ", " (map fst vars)
    <-> zchr '='
    <-> printList pp_mexpr ", " (catMaybes . map snd $ vars)

printStats :: [MStat] -> Int -> Doc
printStats [] _ = empty
printStats (x : xs) i = nest (i * 4) (pp_mstat x i) $+$ printStats xs i

printElIfs :: [(MExpr, Block)] -> Int -> Doc
printElIfs [] _ = empty
printElIfs ((e, b) : es) i =
  zeroWidthText "elseif"
    <-> pp_mexpr e
    <-> zeroWidthText "then"
    $+$ pp_block b i
    $+$ printElIfs es i

printEls :: Maybe Block -> Int -> Doc
printEls Nothing _ = empty
printEls (Just b) i = zeroWidthText "else" $+$ pp_block b i

renderPos :: LineColPos -> String
renderPos (LineColPos l c _) = "line " ++ show (succ l) ++ ", column " ++ show (succ c)

renderRegion :: Region -> String
renderRegion (Region l r) = renderPos l ++ " - " ++ renderPos r

renderSourcePos :: SourcePos -> String
renderSourcePos sp =
  "line "
    ++ (show . succ . sourceLine $ sp)
    ++ ", column "
    ++ (show . succ . sourceColumn $ sp)

getMStatPos :: MStat -> String
getMStatPos (MStat p _) = renderRegion p

getAReturnPos :: AReturn -> String
getAReturnPos (AReturn p _) = renderRegion p
getAReturnPos NoReturn = "<unknown>"

getMExprPos :: MExpr -> String
getMExprPos (MExpr p _) = renderRegion p

renderError :: Error LineColPos -> String
renderError (Inserted str pos strs) =
  renderPos pos
    ++ ": Inserted '"
    ++ str
    ++ "'."
    ++ render_expecting strs
renderError (Deleted str pos strs) =
  renderPos pos
    ++ ": Removed '"
    ++ str
    ++ "'. "
    ++ render_expecting strs
renderError (Replaced str1 str2 pos strs) =
  renderPos pos
    ++ ": Replaced '"
    ++ str1
    ++ "' with '"
    ++ str2
    ++ "' at "
    ++ renderPos pos
    ++ render_expecting strs
renderError (DeletedAtEnd str) =
  "Deleted '"
    ++ str
    ++ "' at the end of the Lua file because the parser doesn't know what to do with it."

render_expecting :: [String] -> String
render_expecting [a] = "Parser expected a " ++ a
render_expecting (a : as) = "Parser expected one of [" ++ a ++ concat (map (", " ++) as) ++ "]"
render_expecting [] = "Parser expected nothing"

renderPSError :: ParseError -> String
renderPSError ps =
  map replNL
    . showErrorMessages
      "or"
      "unknown parse error"
      "expecting"
      "unexpected"
      "end of input"
    . errorMessages
    $ ps
  where
    replNL '\n' = ' '
    replNL c = c

-- | Render comments on multiple lines
renderMLComments :: PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments conf ind toks =
  foldl' ($+$) empty . map (indent conf ind . tok . convertComment conf) $ toks

-- | Render comments, and prefer having them on a single line. It may not print comments on the same
-- line if that would cause a syntax error (e.g. a multiline comment after a single line comment)
renderSLComments :: PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments conf ind toks = foldl' combine empty . map (convertComment conf) $ toks
  where
    combine :: Doc -> MToken -> Doc
    combine acc mt@(MToken _pos t) =
      case t of
        -- Block comments after single line comments cannot be printed on the same line, as that
        -- would cause a syntax error, e.g. in this case:

        -- foo = { -- single line comment
        -- --[[multiline
        -- comment
        -- ]]
        -- }
        -- Make sure in these cases the comment is printed on a new line, rather than on the
        -- same line
        DashBlockComment _depth comment
          | '\n' `elem` comment ->
              acc $+$ (indent conf ind $ tok mt)
        SlashBlockComment comment
          | '\n' `elem` comment ->
              acc $+$ (indent conf ind $ tok mt)
        _ -> acc <-> tok mt

convertComment :: PrettyPrintConfig -> MToken -> MToken
convertComment conf (MToken p t) = MToken p $ convert' t
  where
    convert' :: Token -> Token
    convert' = if cStyle conf then cComment else luaComment

    luaComment :: Token -> Token
    luaComment (SlashComment s) = DashComment s
    luaComment (SlashBlockComment s) = DashBlockComment (lastBracket s) s
    luaComment t' = t'

    -- converting /*]*/ would end up in --[[]]] when plainly converted
    -- Deepen the block comment by 1 if that's the case
    lastBracket :: String -> Int
    lastBracket [] = 0
    lastBracket s = if last s == ']' then 1 else 0

    cComment :: Token -> Token
    cComment (DashComment s) = SlashComment s
    cComment (DashBlockComment _ s) = SlashBlockComment s
    cComment t' = t'

indent :: PrettyPrintConfig -> Int -> Doc -> Doc
indent conf n = (<>) $ zeroWidthText (concat . replicate n $ indentation conf)

parens :: PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens conf ie doc = zchr '(' `sep'` doc `sep'` zchr ')'
  where
    sep' :: Doc -> Doc -> Doc
    sep' =
      if spaceAfterParens conf && (not (fromEmpty ie) || spaceEmptyParens conf)
        then (<->)
        else (<>)

brackets :: PrettyPrintConfig -> Doc -> Doc
brackets conf doc = zchr '[' `sep'` doc `sep'` zchr ']'
  where
    sep' :: Doc -> Doc -> Doc
    sep' = if spaceAfterBrackets conf then (<->) else (<>)

braces :: PrettyPrintConfig -> IsEmpty -> Doc -> Doc
braces conf ie doc = zchr '{' `sep'` doc `sep'` zchr '}'
  where
    sep' :: Doc -> Doc -> Doc
    sep' =
      if spaceAfterBraces conf && (not (fromEmpty ie) || spaceEmptyBraces conf)
        then (<->)
        else (<>)

-- Zero width char
zchr :: Char -> Doc
zchr c = zeroWidthText [c]

-- Zero width <+>
infixl 6 <->
(<->) :: Doc -> Doc -> Doc
a <-> b
  | a == empty = b
  | b == empty = a
  | otherwise = a <> zchr ' ' <> b

-- Operator levels, where level 1 is the lowest level, and level 8 is the highest one
-- See http://www.lua.org/manual/5.2/manual.html#3.4.7
data OperatorLevel
  = -- At the top level, there is no assigned operator level yet. This serves as a bottom value.
    TopLevelExpression
  | OperatorLevel1
  | OperatorLevel2
  | OperatorLevel3
  | OperatorLevel4
  | OperatorLevel5
  | OperatorLevel6
  | OperatorLevel7
  | OperatorLevel8
  deriving (Eq, Ord)

-- | Returns true when any of the comments contain the string "format: multiline"
commentsForceMultiline :: [MToken] -> Bool
commentsForceMultiline commentTokens = any containsFormatMultiline commentTokens
  where
    containsFormatMultiline :: MToken -> Bool
    containsFormatMultiline (MToken _pos t) = case t of
      DashComment comment -> stringForcesFormat comment
      DashBlockComment _ comment -> stringForcesFormat comment
      SlashComment comment -> stringForcesFormat comment
      SlashBlockComment comment -> stringForcesFormat comment
      _ -> False

    stringForcesFormat :: String -> Bool
    stringForcesFormat s = "format: multiline" `isInfixOf` s

{-# LINE 304 "src/GLua/AG/PrettyPrint.hs" #-}

{-# LINE 1235 "src/GLua/AG/PrettyPrint.ag" #-}

pp_block :: Block -> Int -> Doc
pp_block p i = pretty_Syn_Block (wrap_Block (sem_Block p) (emptyInh_Block{indent_Inh_Block = i}))

pp_mstat :: MStat -> Int -> Doc
pp_mstat p i = pretty_Syn_MStat (wrap_MStat (sem_MStat p) emptyInh_MStat{indent_Inh_MStat = i})

pp_prefixexp :: PrefixExp -> Doc
pp_prefixexp p = pretty_Syn_PrefixExp (wrap_PrefixExp (sem_PrefixExp p) emptyInh_PrefixExp)

pp_pfexprsuffix :: PFExprSuffix -> Doc
pp_pfexprsuffix p =
  pretty_Syn_PFExprSuffix (wrap_PFExprSuffix (sem_PFExprSuffix p) emptyInh_PFExprSuffix)

pp_field :: Field -> Doc
pp_field p = pretty_Syn_Field (wrap_Field (sem_Field p) emptyInh_Field)

pp_mexpr :: MExpr -> Doc
pp_mexpr p = pretty_Syn_MExpr (wrap_MExpr (sem_MExpr p) emptyInh_MExpr)

prettyprint :: AST -> String
prettyprint p = render $ pretty_Syn_AST (wrap_AST (sem_AST p) emptyInh_AST)

prettyprintConf :: PrettyPrintConfig -> AST -> String
prettyprintConf conf p =
  render $ pretty_Syn_AST (wrap_AST (sem_AST p) emptyInh_AST{ppconf_Inh_AST = conf})

renderBlock :: Block -> String
renderBlock p = render $ pretty_Syn_Block (wrap_Block (sem_Block p) emptyInh_Block)

renderStat :: Stat -> String
renderStat p = render $ pretty_Syn_Stat (wrap_Stat (sem_Stat p) emptyInh_Stat)

renderMStat :: MStat -> String
renderMStat p = render $ pretty_Syn_MStat (wrap_MStat (sem_MStat p) emptyInh_MStat)

renderAReturn :: AReturn -> String
renderAReturn p = render $ pretty_Syn_AReturn (wrap_AReturn (sem_AReturn p) emptyInh_AReturn)

renderFuncName :: FuncName -> String
renderFuncName p = render $ pretty_Syn_FuncName (wrap_FuncName (sem_FuncName p) emptyInh_FuncName)

renderPrefixExp :: PrefixExp -> String
renderPrefixExp p =
  render $ pretty_Syn_PrefixExp (wrap_PrefixExp (sem_PrefixExp p) emptyInh_PrefixExp)

renderExpr :: Expr -> String
renderExpr p = render $ pretty_Syn_Expr (wrap_Expr (sem_Expr p) emptyInh_Expr)

renderMExpr :: MExpr -> String
renderMExpr p = render $ pretty_Syn_MExpr (wrap_MExpr (sem_MExpr p) emptyInh_MExpr)

renderArgs :: Args -> String
renderArgs p = render $ pretty_Syn_Args (wrap_Args (sem_Args p) emptyInh_Args)

renderField :: Field -> String
renderField p = render $ pretty_Syn_Field (wrap_Field (sem_Field p) emptyInh_Field)

emptyInh_Field :: Inh_Field
emptyInh_Field =
  Inh_Field
    { comments_Inh_Field = []
    , forceMultiline_Inh_Field = False
    , indent_Inh_Field = 0
    , ppconf_Inh_Field = defaultPPConfig
    }

emptyInh_Args :: Inh_Args
emptyInh_Args =
  Inh_Args
    { comments_Inh_Args = []
    , forceMultiline_Inh_Args = False
    , indent_Inh_Args = 0
    , ppconf_Inh_Args = defaultPPConfig
    }

emptyInh_MExpr :: Inh_MExpr
emptyInh_MExpr =
  Inh_MExpr
    { comments_Inh_MExpr = []
    , forceMultiline_Inh_MExpr = False
    , indent_Inh_MExpr = 0
    , parentOperatorAssociative_Inh_MExpr = True
    , parentOperatorPrecedence_Inh_MExpr = TopLevelExpression
    , ppconf_Inh_MExpr = defaultPPConfig
    }

emptyInh_Expr :: Inh_Expr
emptyInh_Expr =
  Inh_Expr
    { comments_Inh_Expr = []
    , forceMultiline_Inh_Expr = False
    , indent_Inh_Expr = 0
    , parentOperatorAssociative_Inh_Expr = True
    , parentOperatorPrecedence_Inh_Expr = TopLevelExpression
    , ppconf_Inh_Expr = defaultPPConfig
    , statRegion_Inh_Expr = emptyRg
    }

emptyInh_PrefixExp :: Inh_PrefixExp
emptyInh_PrefixExp =
  Inh_PrefixExp
    { comments_Inh_PrefixExp = []
    , forceMultiline_Inh_PrefixExp = False
    , indent_Inh_PrefixExp = 0
    , parentOperatorAssociative_Inh_PrefixExp = True
    , parentOperatorPrecedence_Inh_PrefixExp = TopLevelExpression
    , ppconf_Inh_PrefixExp = defaultPPConfig
    }

emptyInh_FuncName :: Inh_FuncName
emptyInh_FuncName =
  Inh_FuncName
    { comments_Inh_FuncName = []
    , indent_Inh_FuncName = 0
    , ppconf_Inh_FuncName = defaultPPConfig
    }

emptyInh_AReturn :: Inh_AReturn
emptyInh_AReturn =
  Inh_AReturn
    { comments_Inh_AReturn = []
    , forceMultiline_Inh_AReturn = False
    , indent_Inh_AReturn = 0
    , ppconf_Inh_AReturn = defaultPPConfig
    }

emptyInh_MStat :: Inh_MStat
emptyInh_MStat =
  Inh_MStat
    { comments_Inh_MStat = []
    , forceMultiline_Inh_MStat = False
    , indent_Inh_MStat = 0
    , isLastStatement_Inh_MStat = False
    , ppconf_Inh_MStat = defaultPPConfig
    , wouldBeAmbiguousWithoutSemicolon_Inh_MStat = False
    }

emptyInh_Stat :: Inh_Stat
emptyInh_Stat =
  Inh_Stat
    { comments_Inh_Stat = []
    , forceMultiline_Inh_Stat = False
    , indent_Inh_Stat = 0
    , isLastStatement_Inh_Stat = False
    , ppconf_Inh_Stat = defaultPPConfig
    , statRegion_Inh_Stat = emptyRg
    , wouldBeAmbiguousWithoutSemicolon_Inh_Stat = False
    }

emptyInh_Block :: Inh_Block
emptyInh_Block =
  Inh_Block
    { comments_Inh_Block = []
    , forceMultiline_Inh_Block = False
    , indent_Inh_Block = 0
    , ppconf_Inh_Block = defaultPPConfig
    , statRegion_Inh_Block = emptyRg
    }

emptyInh_AST :: Inh_AST
emptyInh_AST =
  Inh_AST
    { indent_Inh_AST = 0
    , ppconf_Inh_AST = defaultPPConfig
    }

emptyInh_PFExprSuffix :: Inh_PFExprSuffix
emptyInh_PFExprSuffix =
  Inh_PFExprSuffix
    { comments_Inh_PFExprSuffix = []
    , forceMultiline_Inh_PFExprSuffix = False
    , indent_Inh_PFExprSuffix = 0
    , ppconf_Inh_PFExprSuffix = defaultPPConfig
    }

{-# LINE 484 "src/GLua/AG/PrettyPrint.hs" #-}
-- AReturn -----------------------------------------------------
-- cata
sem_AReturn
  :: AReturn
  -> T_AReturn
sem_AReturn :: AReturn -> T_AReturn
sem_AReturn (AReturn Region
_pos [MExpr]
_values) =
  (Region -> T_MExprList -> T_AReturn
sem_AReturn_AReturn Region
_pos ([MExpr] -> T_MExprList
sem_MExprList [MExpr]
_values))
sem_AReturn (AReturn
NoReturn) =
  (T_AReturn
sem_AReturn_NoReturn)

-- semantic domain
type T_AReturn =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), AReturn, Bool, Doc, Int)
data Inh_AReturn = Inh_AReturn {Inh_AReturn -> [MToken]
comments_Inh_AReturn :: ([MToken]), Inh_AReturn -> Bool
forceMultiline_Inh_AReturn :: Bool, Inh_AReturn -> Int
indent_Inh_AReturn :: Int, Inh_AReturn -> PrettyPrintConfig
ppconf_Inh_AReturn :: PrettyPrintConfig}
data Syn_AReturn = Syn_AReturn {Syn_AReturn -> [MToken]
comments_Syn_AReturn :: ([MToken]), Syn_AReturn -> AReturn
copy_Syn_AReturn :: AReturn, Syn_AReturn -> Bool
isMultiline_Syn_AReturn :: Bool, Syn_AReturn -> Doc
pretty_Syn_AReturn :: Doc, Syn_AReturn -> Int
statementCount_Syn_AReturn :: Int}
wrap_AReturn
  :: T_AReturn
  -> Inh_AReturn
  -> Syn_AReturn
wrap_AReturn :: T_AReturn -> Inh_AReturn -> Syn_AReturn
wrap_AReturn T_AReturn
sem (Inh_AReturn [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, AReturn
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Int
_lhsOstatementCount) = T_AReturn
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> AReturn -> Bool -> Doc -> Int -> Syn_AReturn
Syn_AReturn [MToken]
_lhsOcomments AReturn
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty Int
_lhsOstatementCount)
  )
sem_AReturn_AReturn
  :: Region
  -> T_MExprList
  -> T_AReturn
sem_AReturn_AReturn :: Region -> T_MExprList -> T_AReturn
sem_AReturn_AReturn Region
pos_ T_MExprList
values_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _valuesOcomments :: ([MToken])
            _lhsOcomments :: ([MToken])
            _valuesOforceMultiline :: Bool
            _valuesOsomeElementsInListAreMultiline :: Bool
            _lhsOstatementCount :: Int
            _lhsOcopy :: AReturn
            _valuesOindent :: Int
            _valuesOppconf :: PrettyPrintConfig
            _valuesIcomments :: ([MToken])
            _valuesIcopy :: MExprList
            _valuesIisAssociative :: Bool
            _valuesIisLast :: Bool
            _valuesIisMultiline :: Bool
            _valuesIpos :: Region
            _valuesIprecedence :: OperatorLevel
            _valuesIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBefore)
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"return")
                    Doc -> Doc -> Doc
<-> Doc
_valuesIpretty
                    Doc -> Doc -> Doc
<> Doc
_semicolon
                      Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_valuesIisMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBefore)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
';' else Doc
empty
              )
            _commentsBefore :: ([MToken], [MToken])
_commentsBefore =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`before` Region
pos_) [MToken]
_lhsIcomments
              )
            _valuesOcomments :: [MToken]
_valuesOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsBefore
              )
            _commentsAfter :: ([MToken], [MToken])
_commentsAfter =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` (Region -> Region -> Region
rgOr Region
_valuesIpos Region
pos_)) [MToken]
_valuesIcomments
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfter
              )
            _valuesOforceMultiline :: Bool
_valuesOforceMultiline =
              ( Bool
False
              )
            _valuesOsomeElementsInListAreMultiline :: Bool
_valuesOsomeElementsInListAreMultiline =
              ( Bool
False
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
1
              )
            _copy :: AReturn
_copy =
              ( Region -> [MExpr] -> AReturn
AReturn Region
pos_ [MExpr]
_valuesIcopy
              )
            _lhsOcopy :: AReturn
_lhsOcopy =
              ( AReturn
_copy
              )
            _valuesOindent :: Int
_valuesOindent =
              ( Int
_lhsIindent
              )
            _valuesOppconf :: PrettyPrintConfig
_valuesOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_valuesIcomments, [MExpr]
_valuesIcopy, Bool
_valuesIisAssociative, Bool
_valuesIisLast, Bool
_valuesIisMultiline, Region
_valuesIpos, OperatorLevel
_valuesIprecedence, Doc
_valuesIpretty) =
              T_MExprList
values_ [MToken]
_valuesOcomments Bool
_valuesOforceMultiline Int
_valuesOindent PrettyPrintConfig
_valuesOppconf Bool
_valuesOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, AReturn
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Int
_lhsOstatementCount)
        )
  )
sem_AReturn_NoReturn :: T_AReturn
sem_AReturn_NoReturn :: T_AReturn
sem_AReturn_NoReturn =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstatementCount :: Int
            _lhsOisMultiline :: Bool
            _lhsOcopy :: AReturn
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
0
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: AReturn
_copy =
              ( AReturn
NoReturn
              )
            _lhsOcopy :: AReturn
_lhsOcopy =
              ( AReturn
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, AReturn
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Int
_lhsOstatementCount)
        )
  )

-- AST ---------------------------------------------------------
-- cata
sem_AST
  :: AST
  -> T_AST
sem_AST :: AST -> T_AST
sem_AST (AST [MToken]
_comments Block
_chunk) =
  ([MToken] -> T_Block -> T_AST
sem_AST_AST [MToken]
_comments (Block -> T_Block
sem_Block Block
_chunk))

-- semantic domain
type T_AST =
  Int
  -> PrettyPrintConfig
  -> (AST, Bool, Doc)
data Inh_AST = Inh_AST {Inh_AST -> Int
indent_Inh_AST :: Int, Inh_AST -> PrettyPrintConfig
ppconf_Inh_AST :: PrettyPrintConfig}
data Syn_AST = Syn_AST {Syn_AST -> AST
copy_Syn_AST :: AST, Syn_AST -> Bool
isMultiline_Syn_AST :: Bool, Syn_AST -> Doc
pretty_Syn_AST :: Doc}
wrap_AST
  :: T_AST
  -> Inh_AST
  -> Syn_AST
wrap_AST :: T_AST -> Inh_AST -> Syn_AST
wrap_AST T_AST
sem (Inh_AST Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      (AST
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty) = T_AST
sem Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      (AST -> Bool -> Doc -> Syn_AST
Syn_AST AST
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty)
  )
sem_AST_AST
  :: ([MToken])
  -> T_Block
  -> T_AST
sem_AST_AST :: [MToken] -> T_Block -> T_AST
sem_AST_AST [MToken]
comments_ T_Block
chunk_ =
  ( \Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _chunkOcomments :: ([MToken])
            _chunkOstatRegion :: Region
            _chunkOforceMultiline :: Bool
            _lhsOcopy :: AST
            _chunkOindent :: Int
            _chunkOppconf :: PrettyPrintConfig
            _chunkIcomments :: ([MToken])
            _chunkIcopy :: Block
            _chunkIisMultiline :: Bool
            _chunkIpretty :: Doc
            _chunkIstatementCount :: Int
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_chunkIpretty Doc -> Doc -> Doc
$+$ Doc
_prettyComments
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_chunkIisMultiline
              )
            _prettyComments :: Doc
_prettyComments =
              ( PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent [MToken]
_chunkIcomments
              )
            _chunkOcomments :: [MToken]
_chunkOcomments =
              ( [MToken]
comments_
              )
            _chunkOstatRegion :: Region
_chunkOstatRegion =
              ( Region
emptyRg
              )
            _chunkOforceMultiline :: Bool
_chunkOforceMultiline =
              ( Bool
False
              )
            _copy :: AST
_copy =
              ( [MToken] -> Block -> AST
AST [MToken]
comments_ Block
_chunkIcopy
              )
            _lhsOcopy :: AST
_lhsOcopy =
              ( AST
_copy
              )
            _chunkOindent :: Int
_chunkOindent =
              ( Int
_lhsIindent
              )
            _chunkOppconf :: PrettyPrintConfig
_chunkOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_chunkIcomments, Block
_chunkIcopy, Bool
_chunkIisMultiline, Doc
_chunkIpretty, Int
_chunkIstatementCount) =
              T_Block
chunk_ [MToken]
_chunkOcomments Bool
_chunkOforceMultiline Int
_chunkOindent PrettyPrintConfig
_chunkOppconf Region
_chunkOstatRegion
          in
            (AST
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )

-- Args --------------------------------------------------------
-- cata
sem_Args
  :: Args
  -> T_Args
sem_Args :: Args -> T_Args
sem_Args (ListArgs [MExpr]
_args) =
  (T_MExprList -> T_Args
sem_Args_ListArgs ([MExpr] -> T_MExprList
sem_MExprList [MExpr]
_args))
sem_Args (TableArg FieldList
_arg) =
  (T_FieldList -> T_Args
sem_Args_TableArg (FieldList -> T_FieldList
sem_FieldList FieldList
_arg))
sem_Args (StringArg MToken
_arg) =
  (MToken -> T_Args
sem_Args_StringArg MToken
_arg)

-- semantic domain
type T_Args =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), Args, Bool, Doc)
data Inh_Args = Inh_Args {Inh_Args -> [MToken]
comments_Inh_Args :: ([MToken]), Inh_Args -> Bool
forceMultiline_Inh_Args :: Bool, Inh_Args -> Int
indent_Inh_Args :: Int, Inh_Args -> PrettyPrintConfig
ppconf_Inh_Args :: PrettyPrintConfig}
data Syn_Args = Syn_Args {Syn_Args -> [MToken]
comments_Syn_Args :: ([MToken]), Syn_Args -> Args
copy_Syn_Args :: Args, Syn_Args -> Bool
isMultiline_Syn_Args :: Bool, Syn_Args -> Doc
pretty_Syn_Args :: Doc}
wrap_Args
  :: T_Args
  -> Inh_Args
  -> Syn_Args
wrap_Args :: T_Args -> Inh_Args -> Syn_Args
wrap_Args T_Args
sem (Inh_Args [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, Args
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty) = T_Args
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> Args -> Bool -> Doc -> Syn_Args
Syn_Args [MToken]
_lhsOcomments Args
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty)
  )
sem_Args_ListArgs
  :: T_MExprList
  -> T_Args
sem_Args_ListArgs :: T_MExprList -> T_Args
sem_Args_ListArgs T_MExprList
args_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _argsOindent :: Int
            _argsOsomeElementsInListAreMultiline :: Bool
            _lhsOcopy :: Args
            _lhsOcomments :: ([MToken])
            _argsOcomments :: ([MToken])
            _argsOforceMultiline :: Bool
            _argsOppconf :: PrettyPrintConfig
            _argsIcomments :: ([MToken])
            _argsIcopy :: MExprList
            _argsIisAssociative :: Bool
            _argsIisLast :: Bool
            _argsIisMultiline :: Bool
            _argsIpos :: Region
            _argsIprecedence :: OperatorLevel
            _argsIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_argsIisMultiline
                  then
                    Char -> Doc
zchr Char
'('
                      Doc -> Doc -> Doc
$+$ Doc
_argsIpretty
                      Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (Char -> Doc
zchr Char
')')
                  else PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyParams Doc
_argsIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_argsIisMultiline
              )
            _emptyParams :: IsEmpty
_emptyParams =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null [MExpr]
_argsIcopy
              )
            _argsOindent :: Int
_argsOindent =
              ( if Bool
_argsIisMultiline then Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1 else Int
0
              )
            _argsOsomeElementsInListAreMultiline :: Bool
_argsOsomeElementsInListAreMultiline =
              ( Bool
False
              )
            _copy :: Args
_copy =
              ( [MExpr] -> Args
ListArgs [MExpr]
_argsIcopy
              )
            _lhsOcopy :: Args
_lhsOcopy =
              ( Args
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_argsIcomments
              )
            _argsOcomments :: [MToken]
_argsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _argsOforceMultiline :: Bool
_argsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _argsOppconf :: PrettyPrintConfig
_argsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_argsIcomments, [MExpr]
_argsIcopy, Bool
_argsIisAssociative, Bool
_argsIisLast, Bool
_argsIisMultiline, Region
_argsIpos, OperatorLevel
_argsIprecedence, Doc
_argsIpretty) =
              T_MExprList
args_ [MToken]
_argsOcomments Bool
_argsOforceMultiline Int
_argsOindent PrettyPrintConfig
_argsOppconf Bool
_argsOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, Args
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )
sem_Args_TableArg
  :: T_FieldList
  -> T_Args
sem_Args_TableArg :: T_FieldList -> T_Args
sem_Args_TableArg T_FieldList
arg_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _argOindent :: Int
            _argOsomeElementsInListAreMultiline :: Bool
            _lhsOcopy :: Args
            _lhsOcomments :: ([MToken])
            _argOcomments :: ([MToken])
            _argOforceMultiline :: Bool
            _argOppconf :: PrettyPrintConfig
            _argIcomments :: ([MToken])
            _argIcopy :: FieldList
            _argIisMultiline :: Bool
            _argIisNil :: Bool
            _argIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_argIisMultiline then Doc
_prettyMulti else Doc
_prettySingle
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_argIisMultiline
              )
            _prettyMulti :: Doc
_prettyMulti =
              ( Char -> Doc
zchr Char
'{' Doc -> Doc -> Doc
$+$ Doc
_argIpretty Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (Char -> Doc
zchr Char
'}')
              )
            _prettySingle :: Doc
_prettySingle =
              ( PrettyPrintConfig -> IsEmpty -> Doc -> Doc
braces PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyContents Doc
_argIpretty
              )
            _emptyContents :: IsEmpty
_emptyContents =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null FieldList
_argIcopy
              )
            _argOindent :: Int
_argOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ (if Bool
_argIisMultiline then Int
1 else Int
0)
              )
            _argOsomeElementsInListAreMultiline :: Bool
_argOsomeElementsInListAreMultiline =
              ( Bool
False
              )
            _copy :: Args
_copy =
              ( FieldList -> Args
TableArg FieldList
_argIcopy
              )
            _lhsOcopy :: Args
_lhsOcopy =
              ( Args
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_argIcomments
              )
            _argOcomments :: [MToken]
_argOcomments =
              ( [MToken]
_lhsIcomments
              )
            _argOforceMultiline :: Bool
_argOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _argOppconf :: PrettyPrintConfig
_argOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_argIcomments, FieldList
_argIcopy, Bool
_argIisMultiline, Bool
_argIisNil, Doc
_argIpretty) =
              T_FieldList
arg_ [MToken]
_argOcomments Bool
_argOforceMultiline Int
_argOindent PrettyPrintConfig
_argOppconf Bool
_argOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, Args
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )
sem_Args_StringArg
  :: MToken
  -> T_Args
sem_Args_StringArg :: MToken -> T_Args
sem_Args_StringArg MToken
arg_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Args
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( MToken -> Doc
tok MToken
arg_
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: Args
_copy =
              ( MToken -> Args
StringArg MToken
arg_
              )
            _lhsOcopy :: Args
_lhsOcopy =
              ( Args
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Args
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )

-- BinOp -------------------------------------------------------
-- cata
sem_BinOp
  :: BinOp
  -> T_BinOp
sem_BinOp :: BinOp -> T_BinOp
sem_BinOp (BinOp
AOr) =
  (T_BinOp
sem_BinOp_AOr)
sem_BinOp (BinOp
AAnd) =
  (T_BinOp
sem_BinOp_AAnd)
sem_BinOp (BinOp
ALT) =
  (T_BinOp
sem_BinOp_ALT)
sem_BinOp (BinOp
AGT) =
  (T_BinOp
sem_BinOp_AGT)
sem_BinOp (BinOp
ALEQ) =
  (T_BinOp
sem_BinOp_ALEQ)
sem_BinOp (BinOp
AGEQ) =
  (T_BinOp
sem_BinOp_AGEQ)
sem_BinOp (BinOp
ANEq) =
  (T_BinOp
sem_BinOp_ANEq)
sem_BinOp (BinOp
AEq) =
  (T_BinOp
sem_BinOp_AEq)
sem_BinOp (BinOp
AConcatenate) =
  (T_BinOp
sem_BinOp_AConcatenate)
sem_BinOp (BinOp
APlus) =
  (T_BinOp
sem_BinOp_APlus)
sem_BinOp (BinOp
BinMinus) =
  (T_BinOp
sem_BinOp_BinMinus)
sem_BinOp (BinOp
AMultiply) =
  (T_BinOp
sem_BinOp_AMultiply)
sem_BinOp (BinOp
ADivide) =
  (T_BinOp
sem_BinOp_ADivide)
sem_BinOp (BinOp
AModulus) =
  (T_BinOp
sem_BinOp_AModulus)
sem_BinOp (BinOp
APower) =
  (T_BinOp
sem_BinOp_APower)

-- semantic domain
type T_BinOp =
  ([MToken])
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), BinOp, Bool, Bool, OperatorLevel, Doc)
data Inh_BinOp = Inh_BinOp {Inh_BinOp -> [MToken]
comments_Inh_BinOp :: ([MToken]), Inh_BinOp -> Int
indent_Inh_BinOp :: Int, Inh_BinOp -> PrettyPrintConfig
ppconf_Inh_BinOp :: PrettyPrintConfig}
data Syn_BinOp = Syn_BinOp {Syn_BinOp -> [MToken]
comments_Syn_BinOp :: ([MToken]), Syn_BinOp -> BinOp
copy_Syn_BinOp :: BinOp, Syn_BinOp -> Bool
isAssociative_Syn_BinOp :: Bool, Syn_BinOp -> Bool
isMultiline_Syn_BinOp :: Bool, Syn_BinOp -> OperatorLevel
precedence_Syn_BinOp :: OperatorLevel, Syn_BinOp -> Doc
pretty_Syn_BinOp :: Doc}
wrap_BinOp
  :: T_BinOp
  -> Inh_BinOp
  -> Syn_BinOp
wrap_BinOp :: T_BinOp -> Inh_BinOp -> Syn_BinOp
wrap_BinOp T_BinOp
sem (Inh_BinOp [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_BinOp
sem [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> BinOp -> Bool -> Bool -> OperatorLevel -> Doc -> Syn_BinOp
Syn_BinOp [MToken]
_lhsOcomments BinOp
_lhsOcopy Bool
_lhsOisAssociative Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_BinOp_AOr :: T_BinOp
sem_BinOp_AOr :: T_BinOp
sem_BinOp_AOr =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText (if PrettyPrintConfig -> Bool
cStyle PrettyPrintConfig
_lhsIppconf then String
"||" else String
"or")
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel1
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AOr
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AAnd :: T_BinOp
sem_BinOp_AAnd :: T_BinOp
sem_BinOp_AAnd =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText (if PrettyPrintConfig -> Bool
cStyle PrettyPrintConfig
_lhsIppconf then String
"&&" else String
"and")
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel2
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AAnd
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_ALT :: T_BinOp
sem_BinOp_ALT :: T_BinOp
sem_BinOp_ALT =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"<"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
ALT
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AGT :: T_BinOp
sem_BinOp_AGT :: T_BinOp
sem_BinOp_AGT =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
">"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AGT
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_ALEQ :: T_BinOp
sem_BinOp_ALEQ :: T_BinOp
sem_BinOp_ALEQ =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"<="
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
ALEQ
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AGEQ :: T_BinOp
sem_BinOp_AGEQ :: T_BinOp
sem_BinOp_AGEQ =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
">="
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AGEQ
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_ANEq :: T_BinOp
sem_BinOp_ANEq :: T_BinOp
sem_BinOp_ANEq =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText (if PrettyPrintConfig -> Bool
cStyle PrettyPrintConfig
_lhsIppconf then String
"!=" else String
"~=")
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
ANEq
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AEq :: T_BinOp
sem_BinOp_AEq :: T_BinOp
sem_BinOp_AEq =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"=="
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel3
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AEq
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AConcatenate :: T_BinOp
sem_BinOp_AConcatenate :: T_BinOp
sem_BinOp_AConcatenate =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
".."
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel4
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AConcatenate
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_APlus :: T_BinOp
sem_BinOp_APlus :: T_BinOp
sem_BinOp_APlus =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"+"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel5
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
APlus
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_BinMinus :: T_BinOp
sem_BinOp_BinMinus :: T_BinOp
sem_BinOp_BinMinus =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"-"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel5
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _copy :: BinOp
_copy =
              ( BinOp
BinMinus
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AMultiply :: T_BinOp
sem_BinOp_AMultiply :: T_BinOp
sem_BinOp_AMultiply =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"*"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel6
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
True
              )
            _copy :: BinOp
_copy =
              ( BinOp
AMultiply
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_ADivide :: T_BinOp
sem_BinOp_ADivide :: T_BinOp
sem_BinOp_ADivide =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"/"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel6
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _copy :: BinOp
_copy =
              ( BinOp
ADivide
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_AModulus :: T_BinOp
sem_BinOp_AModulus :: T_BinOp
sem_BinOp_AModulus =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"%"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel6
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _copy :: BinOp
_copy =
              ( BinOp
AModulus
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_BinOp_APower :: T_BinOp
sem_BinOp_APower :: T_BinOp
sem_BinOp_APower =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOcopy :: BinOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"^"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _copy :: BinOp
_copy =
              ( BinOp
APower
              )
            _lhsOcopy :: BinOp
_lhsOcopy =
              ( BinOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, BinOp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- Block -------------------------------------------------------
-- cata
sem_Block
  :: Block
  -> T_Block
sem_Block :: Block -> T_Block
sem_Block (Block [MStat]
_stats AReturn
_ret) =
  (T_MStatList -> T_AReturn -> T_Block
sem_Block_Block ([MStat] -> T_MStatList
sem_MStatList [MStat]
_stats) (AReturn -> T_AReturn
sem_AReturn AReturn
_ret))

-- semantic domain
type T_Block =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Region
  -> (([MToken]), Block, Bool, Doc, Int)
data Inh_Block = Inh_Block {Inh_Block -> [MToken]
comments_Inh_Block :: ([MToken]), Inh_Block -> Bool
forceMultiline_Inh_Block :: Bool, Inh_Block -> Int
indent_Inh_Block :: Int, Inh_Block -> PrettyPrintConfig
ppconf_Inh_Block :: PrettyPrintConfig, Inh_Block -> Region
statRegion_Inh_Block :: Region}
data Syn_Block = Syn_Block {Syn_Block -> [MToken]
comments_Syn_Block :: ([MToken]), Syn_Block -> Block
copy_Syn_Block :: Block, Syn_Block -> Bool
isMultiline_Syn_Block :: Bool, Syn_Block -> Doc
pretty_Syn_Block :: Doc, Syn_Block -> Int
statementCount_Syn_Block :: Int}
wrap_Block
  :: T_Block
  -> Inh_Block
  -> Syn_Block
wrap_Block :: T_Block -> Inh_Block -> Syn_Block
wrap_Block T_Block
sem (Inh_Block [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion) =
  ( let
      ([MToken]
_lhsOcomments, Block
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Int
_lhsOstatementCount) = T_Block
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion
    in
      ([MToken] -> Block -> Bool -> Doc -> Int -> Syn_Block
Syn_Block [MToken]
_lhsOcomments Block
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty Int
_lhsOstatementCount)
  )
sem_Block_Block
  :: T_MStatList
  -> T_AReturn
  -> T_Block
sem_Block_Block :: T_MStatList -> T_AReturn -> T_Block
sem_Block_Block T_MStatList
stats_ T_AReturn
ret_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstatementCount :: Int
            _lhsOcopy :: Block
            _lhsOcomments :: ([MToken])
            _lhsOisMultiline :: Bool
            _statsOcomments :: ([MToken])
            _statsOforceMultiline :: Bool
            _statsOindent :: Int
            _statsOppconf :: PrettyPrintConfig
            _statsOstatRegion :: Region
            _retOcomments :: ([MToken])
            _retOforceMultiline :: Bool
            _retOindent :: Int
            _retOppconf :: PrettyPrintConfig
            _statsIcomments :: ([MToken])
            _statsIcopy :: MStatList
            _statsIisLast :: Bool
            _statsIisMultiline :: Bool
            _statsIpretty :: Doc
            _statsIstartsWithExprPrefixExpression :: Bool
            _statsIstatementCount :: Int
            _retIcomments :: ([MToken])
            _retIcopy :: AReturn
            _retIisMultiline :: Bool
            _retIpretty :: Doc
            _retIstatementCount :: Int
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline
                  then Doc
_statsIpretty Doc -> Doc -> Doc
$+$ Doc
_retIpretty
                  else Doc
_statsIpretty Doc -> Doc -> Doc
<-> Doc
_retIpretty
              )
            _statementCount :: Int
_statementCount =
              ( Int
_statsIstatementCount forall a. Num a => a -> a -> a
+ Int
_retIstatementCount
              )
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_statsIisMultiline Bool -> Bool -> Bool
|| Bool
_retIisMultiline Bool -> Bool -> Bool
|| Int
_statementCount forall a. Ord a => a -> a -> Bool
> Int
1
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
_statementCount
              )
            _copy :: Block
_copy =
              ( [MStat] -> AReturn -> Block
Block [MStat]
_statsIcopy AReturn
_retIcopy
              )
            _lhsOcopy :: Block
_lhsOcopy =
              ( Block
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_retIcomments
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _statsOcomments :: [MToken]
_statsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _statsOforceMultiline :: Bool
_statsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _statsOindent :: Int
_statsOindent =
              ( Int
_lhsIindent
              )
            _statsOppconf :: PrettyPrintConfig
_statsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _statsOstatRegion :: Region
_statsOstatRegion =
              ( Region
_lhsIstatRegion
              )
            _retOcomments :: [MToken]
_retOcomments =
              ( [MToken]
_statsIcomments
              )
            _retOforceMultiline :: Bool
_retOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _retOindent :: Int
_retOindent =
              ( Int
_lhsIindent
              )
            _retOppconf :: PrettyPrintConfig
_retOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_statsIcomments, [MStat]
_statsIcopy, Bool
_statsIisLast, Bool
_statsIisMultiline, Doc
_statsIpretty, Bool
_statsIstartsWithExprPrefixExpression, Int
_statsIstatementCount) =
              T_MStatList
stats_ [MToken]
_statsOcomments Bool
_statsOforceMultiline Int
_statsOindent PrettyPrintConfig
_statsOppconf Region
_statsOstatRegion
            ([MToken]
_retIcomments, AReturn
_retIcopy, Bool
_retIisMultiline, Doc
_retIpretty, Int
_retIstatementCount) =
              T_AReturn
ret_ [MToken]
_retOcomments Bool
_retOforceMultiline Int
_retOindent PrettyPrintConfig
_retOppconf
          in
            ([MToken]
_lhsOcomments, Block
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Int
_lhsOstatementCount)
        )
  )

-- Declaration -------------------------------------------------
-- cata
sem_Declaration
  :: Declaration
  -> T_Declaration
sem_Declaration :: (PrefixExp, Maybe MExpr) -> T_Declaration
sem_Declaration (PrefixExp
x1, Maybe MExpr
x2) =
  (T_PrefixExp -> T_MaybeMExpr -> T_Declaration
sem_Declaration_Tuple (PrefixExp -> T_PrefixExp
sem_PrefixExp PrefixExp
x1) (Maybe MExpr -> T_MaybeMExpr
sem_MaybeMExpr Maybe MExpr
x2))

-- semantic domain
type T_Declaration =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), Declaration, Bool, Doc, Bool, Bool, Doc, Bool, Doc)
data Inh_Declaration = Inh_Declaration {Inh_Declaration -> [MToken]
comments_Inh_Declaration :: ([MToken]), Inh_Declaration -> Bool
forceMultiline_Inh_Declaration :: Bool, Inh_Declaration -> Int
indent_Inh_Declaration :: Int, Inh_Declaration -> PrettyPrintConfig
ppconf_Inh_Declaration :: PrettyPrintConfig}
data Syn_Declaration = Syn_Declaration {Syn_Declaration -> [MToken]
comments_Syn_Declaration :: ([MToken]), Syn_Declaration -> (PrefixExp, Maybe MExpr)
copy_Syn_Declaration :: Declaration, Syn_Declaration -> Bool
endsWithPrefixExpression_Syn_Declaration :: Bool, Syn_Declaration -> Doc
exprPretty_Syn_Declaration :: Doc, Syn_Declaration -> Bool
isDefined_Syn_Declaration :: Bool, Syn_Declaration -> Bool
isMultiline_Syn_Declaration :: Bool, Syn_Declaration -> Doc
pretty_Syn_Declaration :: Doc, Syn_Declaration -> Bool
startsWithExprPrefixExpression_Syn_Declaration :: Bool, Syn_Declaration -> Doc
varPretty_Syn_Declaration :: Doc}
wrap_Declaration
  :: T_Declaration
  -> Inh_Declaration
  -> Syn_Declaration
wrap_Declaration :: T_Declaration -> Inh_Declaration -> Syn_Declaration
wrap_Declaration T_Declaration
sem (Inh_Declaration [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, (PrefixExp, Maybe MExpr)
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Doc
_lhsOexprPretty, Bool
_lhsOisDefined, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Doc
_lhsOvarPretty) = T_Declaration
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> (PrefixExp, Maybe MExpr)
-> Bool
-> Doc
-> Bool
-> Bool
-> Doc
-> Bool
-> Doc
-> Syn_Declaration
Syn_Declaration [MToken]
_lhsOcomments (PrefixExp, Maybe MExpr)
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Doc
_lhsOexprPretty Bool
_lhsOisDefined Bool
_lhsOisMultiline Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression Doc
_lhsOvarPretty)
  )
sem_Declaration_Tuple
  :: T_PrefixExp
  -> T_MaybeMExpr
  -> T_Declaration
sem_Declaration_Tuple :: T_PrefixExp -> T_MaybeMExpr -> T_Declaration
sem_Declaration_Tuple T_PrefixExp
x1_ T_MaybeMExpr
x2_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOvarPretty :: Doc
            _lhsOexprPretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _x1OparentOperatorPrecedence :: OperatorLevel
            _x1OparentOperatorAssociative :: Bool
            _lhsOisDefined :: Bool
            _lhsOcopy :: Declaration
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
            _x1Ocomments :: ([MToken])
            _x1OforceMultiline :: Bool
            _x1Oindent :: Int
            _x1Oppconf :: PrettyPrintConfig
            _x2Ocomments :: ([MToken])
            _x2OforceMultiline :: Bool
            _x2Oindent :: Int
            _x2Oppconf :: PrettyPrintConfig
            _x1Icomments :: ([MToken])
            _x1Icopy :: PrefixExp
            _x1IisAssociative :: Bool
            _x1IisLiteral :: Bool
            _x1IisMultiline :: Bool
            _x1Iprecedence :: OperatorLevel
            _x1Ipretty :: Doc
            _x1IstartsWithExprPrefixExpression :: Bool
            _x2Icomments :: ([MToken])
            _x2Icopy :: MaybeMExpr
            _x2IendsWithPrefixExpression :: Bool
            _x2IisAssociative :: Bool
            _x2IisDefined :: Bool
            _x2IisMultiline :: Bool
            _x2Iprecedence :: OperatorLevel
            _x2Ipretty :: Doc
            _lhsOvarPretty :: Doc
_lhsOvarPretty =
              ( Doc
_x1Ipretty
              )
            _lhsOexprPretty :: Doc
_lhsOexprPretty =
              ( Doc
_x2Ipretty
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_x1IstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_x2IendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_x1IisMultiline Bool -> Bool -> Bool
|| Bool
_x2IisMultiline
              )
            _x1OparentOperatorPrecedence :: OperatorLevel
_x1OparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _x1OparentOperatorAssociative :: Bool
_x1OparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisDefined :: Bool
_lhsOisDefined =
              ( Bool
_x2IisDefined
              )
            _copy :: (PrefixExp, Maybe MExpr)
_copy =
              ( (PrefixExp
_x1Icopy, Maybe MExpr
_x2Icopy)
              )
            _lhsOcopy :: (PrefixExp, Maybe MExpr)
_lhsOcopy =
              ( (PrefixExp, Maybe MExpr)
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_x2Icomments
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_x2Ipretty
              )
            _x1Ocomments :: [MToken]
_x1Ocomments =
              ( [MToken]
_lhsIcomments
              )
            _x1OforceMultiline :: Bool
_x1OforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _x1Oindent :: Int
_x1Oindent =
              ( Int
_lhsIindent
              )
            _x1Oppconf :: PrettyPrintConfig
_x1Oppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _x2Ocomments :: [MToken]
_x2Ocomments =
              ( [MToken]
_x1Icomments
              )
            _x2OforceMultiline :: Bool
_x2OforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _x2Oindent :: Int
_x2Oindent =
              ( Int
_lhsIindent
              )
            _x2Oppconf :: PrettyPrintConfig
_x2Oppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_x1Icomments, PrefixExp
_x1Icopy, Bool
_x1IisAssociative, Bool
_x1IisLiteral, Bool
_x1IisMultiline, OperatorLevel
_x1Iprecedence, Doc
_x1Ipretty, Bool
_x1IstartsWithExprPrefixExpression) =
              T_PrefixExp
x1_ [MToken]
_x1Ocomments Bool
_x1OforceMultiline Int
_x1Oindent Bool
_x1OparentOperatorAssociative OperatorLevel
_x1OparentOperatorPrecedence PrettyPrintConfig
_x1Oppconf
            ([MToken]
_x2Icomments, Maybe MExpr
_x2Icopy, Bool
_x2IendsWithPrefixExpression, Bool
_x2IisAssociative, Bool
_x2IisDefined, Bool
_x2IisMultiline, OperatorLevel
_x2Iprecedence, Doc
_x2Ipretty) =
              T_MaybeMExpr
x2_ [MToken]
_x2Ocomments Bool
_x2OforceMultiline Int
_x2Oindent PrettyPrintConfig
_x2Oppconf
          in
            ([MToken]
_lhsOcomments, (PrefixExp, Maybe MExpr)
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Doc
_lhsOexprPretty, Bool
_lhsOisDefined, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Doc
_lhsOvarPretty)
        )
  )

-- Else --------------------------------------------------------
-- cata
sem_Else
  :: Else
  -> T_Else
sem_Else :: Else -> T_Else
sem_Else (Prelude.Just MElse
x) =
  (T_MElse -> T_Else
sem_Else_Just (MElse -> T_MElse
sem_MElse MElse
x))
sem_Else Else
Prelude.Nothing =
  T_Else
sem_Else_Nothing

-- semantic domain
type T_Else =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Region
  -> (([MToken]), Else, Bool, Bool, Region, Doc)
data Inh_Else = Inh_Else {Inh_Else -> [MToken]
comments_Inh_Else :: ([MToken]), Inh_Else -> Bool
forceMultiline_Inh_Else :: Bool, Inh_Else -> Int
indent_Inh_Else :: Int, Inh_Else -> PrettyPrintConfig
ppconf_Inh_Else :: PrettyPrintConfig, Inh_Else -> Region
statRegion_Inh_Else :: Region}
data Syn_Else = Syn_Else {Syn_Else -> [MToken]
comments_Syn_Else :: ([MToken]), Syn_Else -> Else
copy_Syn_Else :: Else, Syn_Else -> Bool
elsesExist_Syn_Else :: Bool, Syn_Else -> Bool
isMultiline_Syn_Else :: Bool, Syn_Else -> Region
pos_Syn_Else :: Region, Syn_Else -> Doc
pretty_Syn_Else :: Doc}
wrap_Else
  :: T_Else
  -> Inh_Else
  -> Syn_Else
wrap_Else :: T_Else -> Inh_Else -> Syn_Else
wrap_Else T_Else
sem (Inh_Else [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion) =
  ( let
      ([MToken]
_lhsOcomments, Else
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty) = T_Else
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion
    in
      ([MToken] -> Else -> Bool -> Bool -> Region -> Doc -> Syn_Else
Syn_Else [MToken]
_lhsOcomments Else
_lhsOcopy Bool
_lhsOelsesExist Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_Else_Just
  :: T_MElse
  -> T_Else
sem_Else_Just :: T_MElse -> T_Else
sem_Else_Just T_MElse
just_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOelsesExist :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Else
            _lhsOcomments :: ([MToken])
            _lhsOpos :: Region
            _lhsOpretty :: Doc
            _justOcomments :: ([MToken])
            _justOforceMultiline :: Bool
            _justOindent :: Int
            _justOppconf :: PrettyPrintConfig
            _justOstatRegion :: Region
            _justIcomments :: ([MToken])
            _justIcopy :: MElse
            _justIelsesExist :: Bool
            _justIisMultiline :: Bool
            _justIpos :: Region
            _justIpretty :: Doc
            _lhsOelsesExist :: Bool
_lhsOelsesExist =
              ( Bool
True
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_justIisMultiline
              )
            _copy :: Else
_copy =
              ( forall a. a -> Maybe a
Just MElse
_justIcopy
              )
            _lhsOcopy :: Else
_lhsOcopy =
              ( Else
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_justIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_justIpos
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_justIpretty
              )
            _justOcomments :: [MToken]
_justOcomments =
              ( [MToken]
_lhsIcomments
              )
            _justOforceMultiline :: Bool
_justOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _justOindent :: Int
_justOindent =
              ( Int
_lhsIindent
              )
            _justOppconf :: PrettyPrintConfig
_justOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _justOstatRegion :: Region
_justOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_justIcomments, MElse
_justIcopy, Bool
_justIelsesExist, Bool
_justIisMultiline, Region
_justIpos, Doc
_justIpretty) =
              T_MElse
just_ [MToken]
_justOcomments Bool
_justOforceMultiline Int
_justOindent PrettyPrintConfig
_justOppconf Region
_justOstatRegion
          in
            ([MToken]
_lhsOcomments, Else
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )
sem_Else_Nothing :: T_Else
sem_Else_Nothing :: T_Else
sem_Else_Nothing =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOpos :: Region
            _lhsOisMultiline :: Bool
            _lhsOelsesExist :: Bool
            _lhsOcopy :: Else
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
emptyRg
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOelsesExist :: Bool
_lhsOelsesExist =
              ( Bool
False
              )
            _copy :: Maybe a
_copy =
              ( forall a. Maybe a
Nothing
              )
            _lhsOcopy :: Else
_lhsOcopy =
              ( forall a. Maybe a
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Else
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- ElseIf ------------------------------------------------------
-- cata
sem_ElseIf
  :: ElseIf
  -> T_ElseIf
sem_ElseIf :: (MExpr, Block) -> T_ElseIf
sem_ElseIf (MExpr
x1, Block
x2) =
  (T_MExpr -> T_Block -> T_ElseIf
sem_ElseIf_Tuple (MExpr -> T_MExpr
sem_MExpr MExpr
x1) (Block -> T_Block
sem_Block Block
x2))

-- semantic domain
type T_ElseIf =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), ElseIf, Bool, Doc)
data Inh_ElseIf = Inh_ElseIf {Inh_ElseIf -> [MToken]
comments_Inh_ElseIf :: ([MToken]), Inh_ElseIf -> Bool
forceMultiline_Inh_ElseIf :: Bool, Inh_ElseIf -> Int
indent_Inh_ElseIf :: Int, Inh_ElseIf -> PrettyPrintConfig
ppconf_Inh_ElseIf :: PrettyPrintConfig}
data Syn_ElseIf = Syn_ElseIf {Syn_ElseIf -> [MToken]
comments_Syn_ElseIf :: ([MToken]), Syn_ElseIf -> (MExpr, Block)
copy_Syn_ElseIf :: ElseIf, Syn_ElseIf -> Bool
isMultiline_Syn_ElseIf :: Bool, Syn_ElseIf -> Doc
pretty_Syn_ElseIf :: Doc}
wrap_ElseIf
  :: T_ElseIf
  -> Inh_ElseIf
  -> Syn_ElseIf
wrap_ElseIf :: T_ElseIf -> Inh_ElseIf -> Syn_ElseIf
wrap_ElseIf T_ElseIf
sem (Inh_ElseIf [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, (MExpr, Block)
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty) = T_ElseIf
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> (MExpr, Block) -> Bool -> Doc -> Syn_ElseIf
Syn_ElseIf [MToken]
_lhsOcomments (MExpr, Block)
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty)
  )
sem_ElseIf_Tuple
  :: T_MExpr
  -> T_Block
  -> T_ElseIf
sem_ElseIf_Tuple :: T_MExpr -> T_Block -> T_ElseIf
sem_ElseIf_Tuple T_MExpr
x1_ T_Block
x2_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _x2Oindent :: Int
            _x2OstatRegion :: Region
            _x1OparentOperatorPrecedence :: OperatorLevel
            _x1OparentOperatorAssociative :: Bool
            _lhsOcopy :: ElseIf
            _lhsOcomments :: ([MToken])
            _x1Ocomments :: ([MToken])
            _x1OforceMultiline :: Bool
            _x1Oindent :: Int
            _x1Oppconf :: PrettyPrintConfig
            _x2Ocomments :: ([MToken])
            _x2OforceMultiline :: Bool
            _x2Oppconf :: PrettyPrintConfig
            _x1Icomments :: ([MToken])
            _x1Icopy :: MExpr
            _x1IendsWithPrefixExpression :: Bool
            _x1IisAssociative :: Bool
            _x1IisLiteral :: Bool
            _x1IisMultiline :: Bool
            _x1Ipos :: Region
            _x1Iprecedence :: OperatorLevel
            _x1Ipretty :: Doc
            _x2Icomments :: ([MToken])
            _x2Icopy :: Block
            _x2IisMultiline :: Bool
            _x2Ipretty :: Doc
            _x2IstatementCount :: Int
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"elseif" Doc -> Doc -> Doc
<-> Doc
_x1Ipretty Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"then" Doc -> Doc -> Doc
$+$ Doc
_x2Ipretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_x1IisMultiline Bool -> Bool -> Bool
|| Bool
_x2IisMultiline
              )
            _x2Oindent :: Int
_x2Oindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _x2OstatRegion :: Region
_x2OstatRegion =
              ( Region
emptyRg
              )
            _x1OparentOperatorPrecedence :: OperatorLevel
_x1OparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _x1OparentOperatorAssociative :: Bool
_x1OparentOperatorAssociative =
              ( Bool
True
              )
            _copy :: (MExpr, Block)
_copy =
              ( (MExpr
_x1Icopy, Block
_x2Icopy)
              )
            _lhsOcopy :: (MExpr, Block)
_lhsOcopy =
              ( (MExpr, Block)
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_x2Icomments
              )
            _x1Ocomments :: [MToken]
_x1Ocomments =
              ( [MToken]
_lhsIcomments
              )
            _x1OforceMultiline :: Bool
_x1OforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _x1Oindent :: Int
_x1Oindent =
              ( Int
_lhsIindent
              )
            _x1Oppconf :: PrettyPrintConfig
_x1Oppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _x2Ocomments :: [MToken]
_x2Ocomments =
              ( [MToken]
_x1Icomments
              )
            _x2OforceMultiline :: Bool
_x2OforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _x2Oppconf :: PrettyPrintConfig
_x2Oppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_x1Icomments, MExpr
_x1Icopy, Bool
_x1IendsWithPrefixExpression, Bool
_x1IisAssociative, Bool
_x1IisLiteral, Bool
_x1IisMultiline, Region
_x1Ipos, OperatorLevel
_x1Iprecedence, Doc
_x1Ipretty) =
              T_MExpr
x1_ [MToken]
_x1Ocomments Bool
_x1OforceMultiline Int
_x1Oindent Bool
_x1OparentOperatorAssociative OperatorLevel
_x1OparentOperatorPrecedence PrettyPrintConfig
_x1Oppconf
            ([MToken]
_x2Icomments, Block
_x2Icopy, Bool
_x2IisMultiline, Doc
_x2Ipretty, Int
_x2IstatementCount) =
              T_Block
x2_ [MToken]
_x2Ocomments Bool
_x2OforceMultiline Int
_x2Oindent PrettyPrintConfig
_x2Oppconf Region
_x2OstatRegion
          in
            ([MToken]
_lhsOcomments, (MExpr, Block)
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )

-- ElseIfList --------------------------------------------------
-- cata
sem_ElseIfList
  :: ElseIfList
  -> T_ElseIfList
sem_ElseIfList :: ElseIfList -> T_ElseIfList
sem_ElseIfList ElseIfList
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_MElseIf -> T_ElseIfList -> T_ElseIfList
sem_ElseIfList_Cons T_ElseIfList
sem_ElseIfList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map MElseIf -> T_MElseIf
sem_MElseIf ElseIfList
list))

-- semantic domain
type T_ElseIfList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), ElseIfList, Bool, Bool, Region, Doc)
data Inh_ElseIfList = Inh_ElseIfList {Inh_ElseIfList -> [MToken]
comments_Inh_ElseIfList :: ([MToken]), Inh_ElseIfList -> Bool
forceMultiline_Inh_ElseIfList :: Bool, Inh_ElseIfList -> Int
indent_Inh_ElseIfList :: Int, Inh_ElseIfList -> PrettyPrintConfig
ppconf_Inh_ElseIfList :: PrettyPrintConfig}
data Syn_ElseIfList = Syn_ElseIfList {Syn_ElseIfList -> [MToken]
comments_Syn_ElseIfList :: ([MToken]), Syn_ElseIfList -> ElseIfList
copy_Syn_ElseIfList :: ElseIfList, Syn_ElseIfList -> Bool
elsesExist_Syn_ElseIfList :: Bool, Syn_ElseIfList -> Bool
isMultiline_Syn_ElseIfList :: Bool, Syn_ElseIfList -> Region
pos_Syn_ElseIfList :: Region, Syn_ElseIfList -> Doc
pretty_Syn_ElseIfList :: Doc}
wrap_ElseIfList
  :: T_ElseIfList
  -> Inh_ElseIfList
  -> Syn_ElseIfList
wrap_ElseIfList :: T_ElseIfList -> Inh_ElseIfList -> Syn_ElseIfList
wrap_ElseIfList T_ElseIfList
sem (Inh_ElseIfList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, ElseIfList
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty) = T_ElseIfList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> ElseIfList -> Bool -> Bool -> Region -> Doc -> Syn_ElseIfList
Syn_ElseIfList [MToken]
_lhsOcomments ElseIfList
_lhsOcopy Bool
_lhsOelsesExist Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_ElseIfList_Cons
  :: T_MElseIf
  -> T_ElseIfList
  -> T_ElseIfList
sem_ElseIfList_Cons :: T_MElseIf -> T_ElseIfList -> T_ElseIfList
sem_ElseIfList_Cons T_MElseIf
hd_ T_ElseIfList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOelsesExist :: Bool
            _lhsOpos :: Region
            _lhsOisMultiline :: Bool
            _lhsOcopy :: ElseIfList
            _lhsOcomments :: ([MToken])
            _hdOcomments :: ([MToken])
            _hdOforceMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOcomments :: ([MToken])
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _hdIcomments :: ([MToken])
            _hdIcopy :: MElseIf
            _hdIisMultiline :: Bool
            _hdIpos :: Region
            _hdIpretty :: Doc
            _tlIcomments :: ([MToken])
            _tlIcopy :: ElseIfList
            _tlIelsesExist :: Bool
            _tlIisMultiline :: Bool
            _tlIpos :: Region
            _tlIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent Doc
_hdIpretty Doc -> Doc -> Doc
$+$ Doc
_tlIpretty
              )
            _lhsOelsesExist :: Bool
_lhsOelsesExist =
              ( Bool
True
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_hdIpos
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_hdIisMultiline Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
              )
            _copy :: ElseIfList
_copy =
              ( (:) MElseIf
_hdIcopy ElseIfList
_tlIcopy
              )
            _lhsOcopy :: ElseIfList
_lhsOcopy =
              ( ElseIfList
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( [MToken]
_lhsIcomments
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( [MToken]
_hdIcomments
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_hdIcomments, MElseIf
_hdIcopy, Bool
_hdIisMultiline, Region
_hdIpos, Doc
_hdIpretty) =
              T_MElseIf
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent PrettyPrintConfig
_hdOppconf
            ([MToken]
_tlIcomments, ElseIfList
_tlIcopy, Bool
_tlIelsesExist, Bool
_tlIisMultiline, Region
_tlIpos, Doc
_tlIpretty) =
              T_ElseIfList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf
          in
            ([MToken]
_lhsOcomments, ElseIfList
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )
sem_ElseIfList_Nil :: T_ElseIfList
sem_ElseIfList_Nil :: T_ElseIfList
sem_ElseIfList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOpos :: Region
            _lhsOisMultiline :: Bool
            _lhsOelsesExist :: Bool
            _lhsOcopy :: ElseIfList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
emptyRg
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOelsesExist :: Bool
_lhsOelsesExist =
              ( Bool
False
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: ElseIfList
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, ElseIfList
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- Expr --------------------------------------------------------
-- cata
sem_Expr
  :: Expr
  -> T_Expr
sem_Expr :: Expr -> T_Expr
sem_Expr (Expr
ANil) =
  (T_Expr
sem_Expr_ANil)
sem_Expr (Expr
AFalse) =
  (T_Expr
sem_Expr_AFalse)
sem_Expr (Expr
ATrue) =
  (T_Expr
sem_Expr_ATrue)
sem_Expr (ANumber String
_num) =
  (String -> T_Expr
sem_Expr_ANumber String
_num)
sem_Expr (AString MToken
_str) =
  (MToken -> T_Expr
sem_Expr_AString MToken
_str)
sem_Expr (Expr
AVarArg) =
  (T_Expr
sem_Expr_AVarArg)
sem_Expr (AnonymousFunc [MToken]
_pars Block
_body) =
  ([MToken] -> T_Block -> T_Expr
sem_Expr_AnonymousFunc [MToken]
_pars (Block -> T_Block
sem_Block Block
_body))
sem_Expr (APrefixExpr PrefixExp
_pexpr) =
  (T_PrefixExp -> T_Expr
sem_Expr_APrefixExpr (PrefixExp -> T_PrefixExp
sem_PrefixExp PrefixExp
_pexpr))
sem_Expr (ATableConstructor FieldList
_fields) =
  (T_FieldList -> T_Expr
sem_Expr_ATableConstructor (FieldList -> T_FieldList
sem_FieldList FieldList
_fields))
sem_Expr (BinOpExpr BinOp
_op MExpr
_left MExpr
_right) =
  (T_BinOp -> T_MExpr -> T_MExpr -> T_Expr
sem_Expr_BinOpExpr (BinOp -> T_BinOp
sem_BinOp BinOp
_op) (MExpr -> T_MExpr
sem_MExpr MExpr
_left) (MExpr -> T_MExpr
sem_MExpr MExpr
_right))
sem_Expr (UnOpExpr UnOp
_op MExpr
_right) =
  (T_UnOp -> T_MExpr -> T_Expr
sem_Expr_UnOpExpr (UnOp -> T_UnOp
sem_UnOp UnOp
_op) (MExpr -> T_MExpr
sem_MExpr MExpr
_right))

-- semantic domain
type T_Expr =
  ([MToken])
  -> Bool
  -> Int
  -> Bool
  -> OperatorLevel
  -> PrettyPrintConfig
  -> Region
  -> (([MToken]), Expr, Bool, Bool, Bool, Bool, OperatorLevel, Doc)
data Inh_Expr = Inh_Expr {Inh_Expr -> [MToken]
comments_Inh_Expr :: ([MToken]), Inh_Expr -> Bool
forceMultiline_Inh_Expr :: Bool, Inh_Expr -> Int
indent_Inh_Expr :: Int, Inh_Expr -> Bool
parentOperatorAssociative_Inh_Expr :: Bool, Inh_Expr -> OperatorLevel
parentOperatorPrecedence_Inh_Expr :: OperatorLevel, Inh_Expr -> PrettyPrintConfig
ppconf_Inh_Expr :: PrettyPrintConfig, Inh_Expr -> Region
statRegion_Inh_Expr :: Region}
data Syn_Expr = Syn_Expr {Syn_Expr -> [MToken]
comments_Syn_Expr :: ([MToken]), Syn_Expr -> Expr
copy_Syn_Expr :: Expr, Syn_Expr -> Bool
endsWithPrefixExpression_Syn_Expr :: Bool, Syn_Expr -> Bool
isAssociative_Syn_Expr :: Bool, Syn_Expr -> Bool
isLiteral_Syn_Expr :: Bool, Syn_Expr -> Bool
isMultiline_Syn_Expr :: Bool, Syn_Expr -> OperatorLevel
precedence_Syn_Expr :: OperatorLevel, Syn_Expr -> Doc
pretty_Syn_Expr :: Doc}
wrap_Expr
  :: T_Expr
  -> Inh_Expr
  -> Syn_Expr
wrap_Expr :: T_Expr -> Inh_Expr -> Syn_Expr
wrap_Expr T_Expr
sem (Inh_Expr [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion) =
  ( let
      ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_Expr
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion
    in
      ([MToken]
-> Expr
-> Bool
-> Bool
-> Bool
-> Bool
-> OperatorLevel
-> Doc
-> Syn_Expr
Syn_Expr [MToken]
_lhsOcomments Expr
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Bool
_lhsOisAssociative Bool
_lhsOisLiteral Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_Expr_ANil :: T_Expr
sem_Expr_ANil :: T_Expr
sem_Expr_ANil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"nil"
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( Expr
ANil
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_AFalse :: T_Expr
sem_Expr_AFalse :: T_Expr
sem_Expr_AFalse =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"false"
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( Expr
AFalse
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_ATrue :: T_Expr
sem_Expr_ATrue :: T_Expr
sem_Expr_ATrue =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"true"
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( Expr
ATrue
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_ANumber
  :: String
  -> T_Expr
sem_Expr_ANumber :: String -> T_Expr
sem_Expr_ANumber String
num_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
num_
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( String -> Expr
ANumber String
num_
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_AString
  :: MToken
  -> T_Expr
sem_Expr_AString :: MToken -> T_Expr
sem_Expr_AString MToken
str_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( MToken -> Doc
tok MToken
str_
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( MToken -> Expr
AString MToken
str_
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_AVarArg :: T_Expr
sem_Expr_AVarArg :: T_Expr
sem_Expr_AVarArg =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"..."
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( Expr
AVarArg
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_AnonymousFunc
  :: ([MToken])
  -> T_Block
  -> T_Expr
sem_Expr_AnonymousFunc :: [MToken] -> T_Block -> T_Expr
sem_Expr_AnonymousFunc [MToken]
pars_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOendsWithPrefixExpression :: Bool
            _bodyOindent :: Int
            _lhsOpretty :: Doc
            _lhsOisAssociative :: Bool
            _lhsOisLiteral :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOisMultiline :: Bool
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_lhsIforceMultiline Bool -> Bool -> Bool
|| Bool
_bodyIisMultiline
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _singleLinePretty :: Doc
_singleLinePretty =
              ( String -> Doc
zeroWidthText String
"function"
                  Doc -> Doc -> Doc
<> PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyParams (forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok (Doc -> String
render Doc
_comma) [MToken]
pars_)
                    Doc -> Doc -> Doc
<-> Doc
_bodyIpretty
                    Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"end"
              )
            _multilinePretty :: Doc
_multilinePretty =
              ( String -> Doc
zeroWidthText String
"function"
                  Doc -> Doc -> Doc
<> PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyParams (forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok (Doc -> String
render Doc
_comma) [MToken]
pars_)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _emptyParams :: IsEmpty
_emptyParams =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null [MToken]
pars_
              )
            _bodyOindent :: Int
_bodyOindent =
              ( if Bool
_isMultiline then Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1 else Int
0
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline then Doc
_multilinePretty else Doc
_singleLinePretty
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( [MToken] -> Block -> Expr
AnonymousFunc [MToken]
pars_ Block
_bodyIcopy
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_lhsIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_APrefixExpr
  :: T_PrefixExp
  -> T_Expr
sem_Expr_APrefixExpr :: T_PrefixExp -> T_Expr
sem_Expr_APrefixExpr T_PrefixExp
pexpr_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOisLiteral :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _pexprOcomments :: ([MToken])
            _pexprOforceMultiline :: Bool
            _pexprOindent :: Int
            _pexprOparentOperatorAssociative :: Bool
            _pexprOparentOperatorPrecedence :: OperatorLevel
            _pexprOppconf :: PrettyPrintConfig
            _pexprIcomments :: ([MToken])
            _pexprIcopy :: PrefixExp
            _pexprIisAssociative :: Bool
            _pexprIisLiteral :: Bool
            _pexprIisMultiline :: Bool
            _pexprIprecedence :: OperatorLevel
            _pexprIpretty :: Doc
            _pexprIstartsWithExprPrefixExpression :: Bool
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_pexprIpretty
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
True
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_pexprIisMultiline
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_pexprIisAssociative
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
_pexprIisLiteral
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
_pexprIprecedence
              )
            _copy :: Expr
_copy =
              ( PrefixExp -> Expr
APrefixExpr PrefixExp
_pexprIcopy
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_pexprIcomments
              )
            _pexprOcomments :: [MToken]
_pexprOcomments =
              ( [MToken]
_lhsIcomments
              )
            _pexprOforceMultiline :: Bool
_pexprOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _pexprOindent :: Int
_pexprOindent =
              ( Int
_lhsIindent
              )
            _pexprOparentOperatorAssociative :: Bool
_pexprOparentOperatorAssociative =
              ( Bool
_lhsIparentOperatorAssociative
              )
            _pexprOparentOperatorPrecedence :: OperatorLevel
_pexprOparentOperatorPrecedence =
              ( OperatorLevel
_lhsIparentOperatorPrecedence
              )
            _pexprOppconf :: PrettyPrintConfig
_pexprOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_pexprIcomments, PrefixExp
_pexprIcopy, Bool
_pexprIisAssociative, Bool
_pexprIisLiteral, Bool
_pexprIisMultiline, OperatorLevel
_pexprIprecedence, Doc
_pexprIpretty, Bool
_pexprIstartsWithExprPrefixExpression) =
              T_PrefixExp
pexpr_ [MToken]
_pexprOcomments Bool
_pexprOforceMultiline Int
_pexprOindent Bool
_pexprOparentOperatorAssociative OperatorLevel
_pexprOparentOperatorPrecedence PrettyPrintConfig
_pexprOppconf
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_ATableConstructor
  :: T_FieldList
  -> T_Expr
sem_Expr_ATableConstructor :: T_FieldList -> T_Expr
sem_Expr_ATableConstructor T_FieldList
fields_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _fieldsOindent :: Int
            _fieldsOsomeElementsInListAreMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _lhsOisMultiline :: Bool
            _fieldsOcomments :: ([MToken])
            _fieldsOforceMultiline :: Bool
            _fieldsOppconf :: PrettyPrintConfig
            _fieldsIcomments :: ([MToken])
            _fieldsIcopy :: FieldList
            _fieldsIisMultiline :: Bool
            _fieldsIisNil :: Bool
            _fieldsIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline then Doc
_prettyMulti else Doc
_prettySingle
              )
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_lhsIforceMultiline Bool -> Bool -> Bool
|| Bool
_fieldsIisMultiline
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _prettyMulti :: Doc
_prettyMulti =
              ( Char -> Doc
zchr Char
'{' Doc -> Doc -> Doc
$+$ Doc
_fieldsIpretty Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (Char -> Doc
zchr Char
'}')
              )
            _prettySingle :: Doc
_prettySingle =
              ( PrettyPrintConfig -> IsEmpty -> Doc -> Doc
braces PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyContents Doc
_fieldsIpretty
              )
            _emptyContents :: IsEmpty
_emptyContents =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null FieldList
_fieldsIcopy
              )
            _fieldsOindent :: Int
_fieldsOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ (if Bool
_fieldsIisMultiline then Int
1 else Int
0)
              )
            _fieldsOsomeElementsInListAreMultiline :: Bool
_fieldsOsomeElementsInListAreMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Expr
_copy =
              ( FieldList -> Expr
ATableConstructor FieldList
_fieldsIcopy
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_fieldsIcomments
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _fieldsOcomments :: [MToken]
_fieldsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _fieldsOforceMultiline :: Bool
_fieldsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _fieldsOppconf :: PrettyPrintConfig
_fieldsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_fieldsIcomments, FieldList
_fieldsIcopy, Bool
_fieldsIisMultiline, Bool
_fieldsIisNil, Doc
_fieldsIpretty) =
              T_FieldList
fields_ [MToken]
_fieldsOcomments Bool
_fieldsOforceMultiline Int
_fieldsOindent PrettyPrintConfig
_fieldsOppconf Bool
_fieldsOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_BinOpExpr
  :: T_BinOp
  -> T_MExpr
  -> T_MExpr
  -> T_Expr
sem_Expr_BinOpExpr :: T_BinOp -> T_MExpr -> T_MExpr -> T_Expr
sem_Expr_BinOpExpr T_BinOp
op_ T_MExpr
left_ T_MExpr
right_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOisMultiline :: Bool
            _leftOparentOperatorPrecedence :: OperatorLevel
            _rightOparentOperatorPrecedence :: OperatorLevel
            _leftOparentOperatorAssociative :: Bool
            _rightOparentOperatorAssociative :: Bool
            _lhsOisAssociative :: Bool
            _lhsOisLiteral :: Bool
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _opOcomments :: ([MToken])
            _opOindent :: Int
            _opOppconf :: PrettyPrintConfig
            _leftOcomments :: ([MToken])
            _leftOforceMultiline :: Bool
            _leftOindent :: Int
            _leftOppconf :: PrettyPrintConfig
            _rightOcomments :: ([MToken])
            _rightOforceMultiline :: Bool
            _rightOindent :: Int
            _rightOppconf :: PrettyPrintConfig
            _opIcomments :: ([MToken])
            _opIcopy :: BinOp
            _opIisAssociative :: Bool
            _opIisMultiline :: Bool
            _opIprecedence :: OperatorLevel
            _opIpretty :: Doc
            _leftIcomments :: ([MToken])
            _leftIcopy :: MExpr
            _leftIendsWithPrefixExpression :: Bool
            _leftIisAssociative :: Bool
            _leftIisLiteral :: Bool
            _leftIisMultiline :: Bool
            _leftIpos :: Region
            _leftIprecedence :: OperatorLevel
            _leftIpretty :: Doc
            _rightIcomments :: ([MToken])
            _rightIcopy :: MExpr
            _rightIendsWithPrefixExpression :: Bool
            _rightIisAssociative :: Bool
            _rightIisLiteral :: Bool
            _rightIisMultiline :: Bool
            _rightIpos :: Region
            _rightIprecedence :: OperatorLevel
            _rightIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_leftIpretty Doc -> Doc -> Doc
<-> Doc
_opIpretty Doc -> Doc -> Doc
<-> Doc
_rightIpretty
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_rightIendsWithPrefixExpression
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( forall a. Ord a => a -> a -> a
min OperatorLevel
_opIprecedence forall a b. (a -> b) -> a -> b
$ forall a. Ord a => a -> a -> a
min OperatorLevel
_leftIprecedence OperatorLevel
_rightIprecedence
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_leftIisMultiline Bool -> Bool -> Bool
|| Bool
_rightIisMultiline
              )
            _leftOparentOperatorPrecedence :: OperatorLevel
_leftOparentOperatorPrecedence =
              ( OperatorLevel
_opIprecedence
              )
            _rightOparentOperatorPrecedence :: OperatorLevel
_rightOparentOperatorPrecedence =
              ( OperatorLevel
_opIprecedence
              )
            _leftOparentOperatorAssociative :: Bool
_leftOparentOperatorAssociative =
              ( Bool
_opIisAssociative
              )
            _rightOparentOperatorAssociative :: Bool
_rightOparentOperatorAssociative =
              ( Bool
_opIisAssociative
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_opIisAssociative Bool -> Bool -> Bool
&& Bool
_leftIisAssociative Bool -> Bool -> Bool
&& Bool
_rightIisAssociative
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( ((\Bool
_ Bool
_ -> Bool
False) Bool
_leftIisLiteral Bool
_rightIisLiteral)
              )
            _copy :: Expr
_copy =
              ( BinOp -> MExpr -> MExpr -> Expr
BinOpExpr BinOp
_opIcopy MExpr
_leftIcopy MExpr
_rightIcopy
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_rightIcomments
              )
            _opOcomments :: [MToken]
_opOcomments =
              ( [MToken]
_lhsIcomments
              )
            _opOindent :: Int
_opOindent =
              ( Int
_lhsIindent
              )
            _opOppconf :: PrettyPrintConfig
_opOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _leftOcomments :: [MToken]
_leftOcomments =
              ( [MToken]
_opIcomments
              )
            _leftOforceMultiline :: Bool
_leftOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _leftOindent :: Int
_leftOindent =
              ( Int
_lhsIindent
              )
            _leftOppconf :: PrettyPrintConfig
_leftOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _rightOcomments :: [MToken]
_rightOcomments =
              ( [MToken]
_leftIcomments
              )
            _rightOforceMultiline :: Bool
_rightOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _rightOindent :: Int
_rightOindent =
              ( Int
_lhsIindent
              )
            _rightOppconf :: PrettyPrintConfig
_rightOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_opIcomments, BinOp
_opIcopy, Bool
_opIisAssociative, Bool
_opIisMultiline, OperatorLevel
_opIprecedence, Doc
_opIpretty) =
              T_BinOp
op_ [MToken]
_opOcomments Int
_opOindent PrettyPrintConfig
_opOppconf
            ([MToken]
_leftIcomments, MExpr
_leftIcopy, Bool
_leftIendsWithPrefixExpression, Bool
_leftIisAssociative, Bool
_leftIisLiteral, Bool
_leftIisMultiline, Region
_leftIpos, OperatorLevel
_leftIprecedence, Doc
_leftIpretty) =
              T_MExpr
left_ [MToken]
_leftOcomments Bool
_leftOforceMultiline Int
_leftOindent Bool
_leftOparentOperatorAssociative OperatorLevel
_leftOparentOperatorPrecedence PrettyPrintConfig
_leftOppconf
            ([MToken]
_rightIcomments, MExpr
_rightIcopy, Bool
_rightIendsWithPrefixExpression, Bool
_rightIisAssociative, Bool
_rightIisLiteral, Bool
_rightIisMultiline, Region
_rightIpos, OperatorLevel
_rightIprecedence, Doc
_rightIpretty) =
              T_MExpr
right_ [MToken]
_rightOcomments Bool
_rightOforceMultiline Int
_rightOindent Bool
_rightOparentOperatorAssociative OperatorLevel
_rightOparentOperatorPrecedence PrettyPrintConfig
_rightOppconf
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_Expr_UnOpExpr
  :: T_UnOp
  -> T_MExpr
  -> T_Expr
sem_Expr_UnOpExpr :: T_UnOp -> T_MExpr -> T_Expr
sem_Expr_UnOpExpr T_UnOp
op_ T_MExpr
right_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOprecedence :: OperatorLevel
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _rightOparentOperatorPrecedence :: OperatorLevel
            _lhsOisAssociative :: Bool
            _lhsOisLiteral :: Bool
            _lhsOcopy :: Expr
            _lhsOcomments :: ([MToken])
            _opOcomments :: ([MToken])
            _opOindent :: Int
            _opOppconf :: PrettyPrintConfig
            _rightOcomments :: ([MToken])
            _rightOforceMultiline :: Bool
            _rightOindent :: Int
            _rightOparentOperatorAssociative :: Bool
            _rightOppconf :: PrettyPrintConfig
            _opIcomments :: ([MToken])
            _opIcopy :: UnOp
            _opIisMultiline :: Bool
            _opIpretty :: Doc
            _rightIcomments :: ([MToken])
            _rightIcopy :: MExpr
            _rightIendsWithPrefixExpression :: Bool
            _rightIisAssociative :: Bool
            _rightIisLiteral :: Bool
            _rightIisMultiline :: Bool
            _rightIpos :: Region
            _rightIprecedence :: OperatorLevel
            _rightIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_opIpretty Doc -> Doc -> Doc
<> Doc
_rightIpretty
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( forall a. Ord a => a -> a -> a
min OperatorLevel
_rightIprecedence OperatorLevel
OperatorLevel7
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_rightIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_opIisMultiline Bool -> Bool -> Bool
|| Bool
_rightIisMultiline
              )
            _rightOparentOperatorPrecedence :: OperatorLevel
_rightOparentOperatorPrecedence =
              ( OperatorLevel
OperatorLevel7
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_rightIisAssociative
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
_rightIisLiteral
              )
            _copy :: Expr
_copy =
              ( UnOp -> MExpr -> Expr
UnOpExpr UnOp
_opIcopy MExpr
_rightIcopy
              )
            _lhsOcopy :: Expr
_lhsOcopy =
              ( Expr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_rightIcomments
              )
            _opOcomments :: [MToken]
_opOcomments =
              ( [MToken]
_lhsIcomments
              )
            _opOindent :: Int
_opOindent =
              ( Int
_lhsIindent
              )
            _opOppconf :: PrettyPrintConfig
_opOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _rightOcomments :: [MToken]
_rightOcomments =
              ( [MToken]
_opIcomments
              )
            _rightOforceMultiline :: Bool
_rightOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _rightOindent :: Int
_rightOindent =
              ( Int
_lhsIindent
              )
            _rightOparentOperatorAssociative :: Bool
_rightOparentOperatorAssociative =
              ( Bool
_lhsIparentOperatorAssociative
              )
            _rightOppconf :: PrettyPrintConfig
_rightOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_opIcomments, UnOp
_opIcopy, Bool
_opIisMultiline, Doc
_opIpretty) =
              T_UnOp
op_ [MToken]
_opOcomments Int
_opOindent PrettyPrintConfig
_opOppconf
            ([MToken]
_rightIcomments, MExpr
_rightIcopy, Bool
_rightIendsWithPrefixExpression, Bool
_rightIisAssociative, Bool
_rightIisLiteral, Bool
_rightIisMultiline, Region
_rightIpos, OperatorLevel
_rightIprecedence, Doc
_rightIpretty) =
              T_MExpr
right_ [MToken]
_rightOcomments Bool
_rightOforceMultiline Int
_rightOindent Bool
_rightOparentOperatorAssociative OperatorLevel
_rightOparentOperatorPrecedence PrettyPrintConfig
_rightOppconf
          in
            ([MToken]
_lhsOcomments, Expr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- ExprSuffixList ----------------------------------------------
-- cata
sem_ExprSuffixList
  :: ExprSuffixList
  -> T_ExprSuffixList
sem_ExprSuffixList :: ExprSuffixList -> T_ExprSuffixList
sem_ExprSuffixList ExprSuffixList
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_PFExprSuffix -> T_ExprSuffixList -> T_ExprSuffixList
sem_ExprSuffixList_Cons T_ExprSuffixList
sem_ExprSuffixList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map PFExprSuffix -> T_PFExprSuffix
sem_PFExprSuffix ExprSuffixList
list))

-- semantic domain
type T_ExprSuffixList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), ExprSuffixList, Bool, Bool, OperatorLevel, Doc)
data Inh_ExprSuffixList = Inh_ExprSuffixList {Inh_ExprSuffixList -> [MToken]
comments_Inh_ExprSuffixList :: ([MToken]), Inh_ExprSuffixList -> Bool
forceMultiline_Inh_ExprSuffixList :: Bool, Inh_ExprSuffixList -> Int
indent_Inh_ExprSuffixList :: Int, Inh_ExprSuffixList -> PrettyPrintConfig
ppconf_Inh_ExprSuffixList :: PrettyPrintConfig}
data Syn_ExprSuffixList = Syn_ExprSuffixList {Syn_ExprSuffixList -> [MToken]
comments_Syn_ExprSuffixList :: ([MToken]), Syn_ExprSuffixList -> ExprSuffixList
copy_Syn_ExprSuffixList :: ExprSuffixList, Syn_ExprSuffixList -> Bool
isAssociative_Syn_ExprSuffixList :: Bool, Syn_ExprSuffixList -> Bool
isMultiline_Syn_ExprSuffixList :: Bool, Syn_ExprSuffixList -> OperatorLevel
precedence_Syn_ExprSuffixList :: OperatorLevel, Syn_ExprSuffixList -> Doc
pretty_Syn_ExprSuffixList :: Doc}
wrap_ExprSuffixList
  :: T_ExprSuffixList
  -> Inh_ExprSuffixList
  -> Syn_ExprSuffixList
wrap_ExprSuffixList :: T_ExprSuffixList -> Inh_ExprSuffixList -> Syn_ExprSuffixList
wrap_ExprSuffixList T_ExprSuffixList
sem (Inh_ExprSuffixList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, ExprSuffixList
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_ExprSuffixList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> ExprSuffixList
-> Bool
-> Bool
-> OperatorLevel
-> Doc
-> Syn_ExprSuffixList
Syn_ExprSuffixList [MToken]
_lhsOcomments ExprSuffixList
_lhsOcopy Bool
_lhsOisAssociative Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_ExprSuffixList_Cons
  :: T_PFExprSuffix
  -> T_ExprSuffixList
  -> T_ExprSuffixList
sem_ExprSuffixList_Cons :: T_PFExprSuffix -> T_ExprSuffixList -> T_ExprSuffixList
sem_ExprSuffixList_Cons T_PFExprSuffix
hd_ T_ExprSuffixList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: ExprSuffixList
            _lhsOcomments :: ([MToken])
            _hdOcomments :: ([MToken])
            _hdOforceMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOcomments :: ([MToken])
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _hdIcomments :: ([MToken])
            _hdIcopy :: PFExprSuffix
            _hdIisAssociative :: Bool
            _hdIisMultiline :: Bool
            _hdIprecedence :: OperatorLevel
            _hdIpretty :: Doc
            _tlIcomments :: ([MToken])
            _tlIcopy :: ExprSuffixList
            _tlIisAssociative :: Bool
            _tlIisMultiline :: Bool
            _tlIprecedence :: OperatorLevel
            _tlIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_hdIpretty Doc -> Doc -> Doc
<> Doc
_tlIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_hdIisMultiline Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_hdIisAssociative Bool -> Bool -> Bool
&& Bool
_tlIisAssociative
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( (forall a. Ord a => a -> a -> a
min OperatorLevel
_hdIprecedence OperatorLevel
_tlIprecedence)
              )
            _copy :: ExprSuffixList
_copy =
              ( (:) PFExprSuffix
_hdIcopy ExprSuffixList
_tlIcopy
              )
            _lhsOcopy :: ExprSuffixList
_lhsOcopy =
              ( ExprSuffixList
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( [MToken]
_lhsIcomments
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( [MToken]
_hdIcomments
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_hdIcomments, PFExprSuffix
_hdIcopy, Bool
_hdIisAssociative, Bool
_hdIisMultiline, OperatorLevel
_hdIprecedence, Doc
_hdIpretty) =
              T_PFExprSuffix
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent PrettyPrintConfig
_hdOppconf
            ([MToken]
_tlIcomments, ExprSuffixList
_tlIcopy, Bool
_tlIisAssociative, Bool
_tlIisMultiline, OperatorLevel
_tlIprecedence, Doc
_tlIpretty) =
              T_ExprSuffixList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf
          in
            ([MToken]
_lhsOcomments, ExprSuffixList
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_ExprSuffixList_Nil :: T_ExprSuffixList
sem_ExprSuffixList_Nil :: T_ExprSuffixList
sem_ExprSuffixList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: ExprSuffixList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: ExprSuffixList
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, ExprSuffixList
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- Field -------------------------------------------------------
-- cata
sem_Field
  :: Field
  -> T_Field
sem_Field :: Field -> T_Field
sem_Field (ExprField MExpr
_key MExpr
_value FieldSep
_sep) =
  (T_MExpr -> T_MExpr -> T_FieldSep -> T_Field
sem_Field_ExprField (MExpr -> T_MExpr
sem_MExpr MExpr
_key) (MExpr -> T_MExpr
sem_MExpr MExpr
_value) (FieldSep -> T_FieldSep
sem_FieldSep FieldSep
_sep))
sem_Field (NamedField MToken
_key MExpr
_value FieldSep
_sep) =
  (MToken -> T_MExpr -> T_FieldSep -> T_Field
sem_Field_NamedField MToken
_key (MExpr -> T_MExpr
sem_MExpr MExpr
_value) (FieldSep -> T_FieldSep
sem_FieldSep FieldSep
_sep))
sem_Field (UnnamedField MExpr
_value FieldSep
_sep) =
  (T_MExpr -> T_FieldSep -> T_Field
sem_Field_UnnamedField (MExpr -> T_MExpr
sem_MExpr MExpr
_value) (FieldSep -> T_FieldSep
sem_FieldSep FieldSep
_sep))

-- semantic domain
type T_Field =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), Field, Bool, Bool, Region, Doc)
data Inh_Field = Inh_Field {Inh_Field -> [MToken]
comments_Inh_Field :: ([MToken]), Inh_Field -> Bool
forceMultiline_Inh_Field :: Bool, Inh_Field -> Int
indent_Inh_Field :: Int, Inh_Field -> PrettyPrintConfig
ppconf_Inh_Field :: PrettyPrintConfig}
data Syn_Field = Syn_Field {Syn_Field -> [MToken]
comments_Syn_Field :: ([MToken]), Syn_Field -> Field
copy_Syn_Field :: Field, Syn_Field -> Bool
isMultiline_Syn_Field :: Bool, Syn_Field -> Bool
isSemiColon_Syn_Field :: Bool, Syn_Field -> Region
pos_Syn_Field :: Region, Syn_Field -> Doc
pretty_Syn_Field :: Doc}
wrap_Field
  :: T_Field
  -> Inh_Field
  -> Syn_Field
wrap_Field :: T_Field -> Inh_Field -> Syn_Field
wrap_Field T_Field
sem (Inh_Field [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, Field
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Region
_lhsOpos, Doc
_lhsOpretty) = T_Field
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> Field -> Bool -> Bool -> Region -> Doc -> Syn_Field
Syn_Field [MToken]
_lhsOcomments Field
_lhsOcopy Bool
_lhsOisMultiline Bool
_lhsOisSemiColon Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_Field_ExprField
  :: T_MExpr
  -> T_MExpr
  -> T_FieldSep
  -> T_Field
sem_Field_ExprField :: T_MExpr -> T_MExpr -> T_FieldSep -> T_Field
sem_Field_ExprField T_MExpr
key_ T_MExpr
value_ T_FieldSep
sep_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _keyOparentOperatorPrecedence :: OperatorLevel
            _keyOparentOperatorAssociative :: Bool
            _valueOparentOperatorPrecedence :: OperatorLevel
            _valueOparentOperatorAssociative :: Bool
            _lhsOisSemiColon :: Bool
            _lhsOcopy :: Field
            _lhsOcomments :: ([MToken])
            _lhsOpos :: Region
            _keyOcomments :: ([MToken])
            _keyOforceMultiline :: Bool
            _keyOindent :: Int
            _keyOppconf :: PrettyPrintConfig
            _valueOcomments :: ([MToken])
            _valueOforceMultiline :: Bool
            _valueOindent :: Int
            _valueOppconf :: PrettyPrintConfig
            _sepOindent :: Int
            _sepOppconf :: PrettyPrintConfig
            _keyIcomments :: ([MToken])
            _keyIcopy :: MExpr
            _keyIendsWithPrefixExpression :: Bool
            _keyIisAssociative :: Bool
            _keyIisLiteral :: Bool
            _keyIisMultiline :: Bool
            _keyIpos :: Region
            _keyIprecedence :: OperatorLevel
            _keyIpretty :: Doc
            _valueIcomments :: ([MToken])
            _valueIcopy :: MExpr
            _valueIendsWithPrefixExpression :: Bool
            _valueIisAssociative :: Bool
            _valueIisLiteral :: Bool
            _valueIisMultiline :: Bool
            _valueIpos :: Region
            _valueIprecedence :: OperatorLevel
            _valueIpretty :: Doc
            _sepIcopy :: FieldSep
            _sepIisMultiline :: Bool
            _sepIisSemiColon :: Bool
            _sepIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Doc -> Doc
brackets PrettyPrintConfig
_lhsIppconf Doc
_keyIpretty Doc -> Doc -> Doc
<-> Char -> Doc
zchr Char
'=' Doc -> Doc -> Doc
<-> Doc
_valueIpretty Doc -> Doc -> Doc
<> Doc
_sepIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _keyOparentOperatorPrecedence :: OperatorLevel
_keyOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _keyOparentOperatorAssociative :: Bool
_keyOparentOperatorAssociative =
              ( Bool
True
              )
            _valueOparentOperatorPrecedence :: OperatorLevel
_valueOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _valueOparentOperatorAssociative :: Bool
_valueOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
_sepIisSemiColon
              )
            _copy :: Field
_copy =
              ( MExpr -> MExpr -> FieldSep -> Field
ExprField MExpr
_keyIcopy MExpr
_valueIcopy FieldSep
_sepIcopy
              )
            _lhsOcopy :: Field
_lhsOcopy =
              ( Field
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_valueIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_valueIpos
              )
            _keyOcomments :: [MToken]
_keyOcomments =
              ( [MToken]
_lhsIcomments
              )
            _keyOforceMultiline :: Bool
_keyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _keyOindent :: Int
_keyOindent =
              ( Int
_lhsIindent
              )
            _keyOppconf :: PrettyPrintConfig
_keyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _valueOcomments :: [MToken]
_valueOcomments =
              ( [MToken]
_keyIcomments
              )
            _valueOforceMultiline :: Bool
_valueOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _valueOindent :: Int
_valueOindent =
              ( Int
_lhsIindent
              )
            _valueOppconf :: PrettyPrintConfig
_valueOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _sepOindent :: Int
_sepOindent =
              ( Int
_lhsIindent
              )
            _sepOppconf :: PrettyPrintConfig
_sepOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_keyIcomments, MExpr
_keyIcopy, Bool
_keyIendsWithPrefixExpression, Bool
_keyIisAssociative, Bool
_keyIisLiteral, Bool
_keyIisMultiline, Region
_keyIpos, OperatorLevel
_keyIprecedence, Doc
_keyIpretty) =
              T_MExpr
key_ [MToken]
_keyOcomments Bool
_keyOforceMultiline Int
_keyOindent Bool
_keyOparentOperatorAssociative OperatorLevel
_keyOparentOperatorPrecedence PrettyPrintConfig
_keyOppconf
            ([MToken]
_valueIcomments, MExpr
_valueIcopy, Bool
_valueIendsWithPrefixExpression, Bool
_valueIisAssociative, Bool
_valueIisLiteral, Bool
_valueIisMultiline, Region
_valueIpos, OperatorLevel
_valueIprecedence, Doc
_valueIpretty) =
              T_MExpr
value_ [MToken]
_valueOcomments Bool
_valueOforceMultiline Int
_valueOindent Bool
_valueOparentOperatorAssociative OperatorLevel
_valueOparentOperatorPrecedence PrettyPrintConfig
_valueOppconf
            (FieldSep
_sepIcopy, Bool
_sepIisMultiline, Bool
_sepIisSemiColon, Doc
_sepIpretty) =
              T_FieldSep
sep_ Int
_sepOindent PrettyPrintConfig
_sepOppconf
          in
            ([MToken]
_lhsOcomments, Field
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )
sem_Field_NamedField
  :: MToken
  -> T_MExpr
  -> T_FieldSep
  -> T_Field
sem_Field_NamedField :: MToken -> T_MExpr -> T_FieldSep -> T_Field
sem_Field_NamedField MToken
key_ T_MExpr
value_ T_FieldSep
sep_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _valueOparentOperatorPrecedence :: OperatorLevel
            _valueOparentOperatorAssociative :: Bool
            _lhsOisSemiColon :: Bool
            _lhsOcopy :: Field
            _lhsOcomments :: ([MToken])
            _lhsOpos :: Region
            _valueOcomments :: ([MToken])
            _valueOforceMultiline :: Bool
            _valueOindent :: Int
            _valueOppconf :: PrettyPrintConfig
            _sepOindent :: Int
            _sepOppconf :: PrettyPrintConfig
            _valueIcomments :: ([MToken])
            _valueIcopy :: MExpr
            _valueIendsWithPrefixExpression :: Bool
            _valueIisAssociative :: Bool
            _valueIisLiteral :: Bool
            _valueIisMultiline :: Bool
            _valueIpos :: Region
            _valueIprecedence :: OperatorLevel
            _valueIpretty :: Doc
            _sepIcopy :: FieldSep
            _sepIisMultiline :: Bool
            _sepIisSemiColon :: Bool
            _sepIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( MToken -> Doc
tok MToken
key_ Doc -> Doc -> Doc
<-> Char -> Doc
zchr Char
'=' Doc -> Doc -> Doc
<-> Doc
_valueIpretty Doc -> Doc -> Doc
<> Doc
_sepIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _valueOparentOperatorPrecedence :: OperatorLevel
_valueOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _valueOparentOperatorAssociative :: Bool
_valueOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
_sepIisSemiColon
              )
            _copy :: Field
_copy =
              ( MToken -> MExpr -> FieldSep -> Field
NamedField MToken
key_ MExpr
_valueIcopy FieldSep
_sepIcopy
              )
            _lhsOcopy :: Field
_lhsOcopy =
              ( Field
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_valueIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_valueIpos
              )
            _valueOcomments :: [MToken]
_valueOcomments =
              ( [MToken]
_lhsIcomments
              )
            _valueOforceMultiline :: Bool
_valueOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _valueOindent :: Int
_valueOindent =
              ( Int
_lhsIindent
              )
            _valueOppconf :: PrettyPrintConfig
_valueOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _sepOindent :: Int
_sepOindent =
              ( Int
_lhsIindent
              )
            _sepOppconf :: PrettyPrintConfig
_sepOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_valueIcomments, MExpr
_valueIcopy, Bool
_valueIendsWithPrefixExpression, Bool
_valueIisAssociative, Bool
_valueIisLiteral, Bool
_valueIisMultiline, Region
_valueIpos, OperatorLevel
_valueIprecedence, Doc
_valueIpretty) =
              T_MExpr
value_ [MToken]
_valueOcomments Bool
_valueOforceMultiline Int
_valueOindent Bool
_valueOparentOperatorAssociative OperatorLevel
_valueOparentOperatorPrecedence PrettyPrintConfig
_valueOppconf
            (FieldSep
_sepIcopy, Bool
_sepIisMultiline, Bool
_sepIisSemiColon, Doc
_sepIpretty) =
              T_FieldSep
sep_ Int
_sepOindent PrettyPrintConfig
_sepOppconf
          in
            ([MToken]
_lhsOcomments, Field
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )
sem_Field_UnnamedField
  :: T_MExpr
  -> T_FieldSep
  -> T_Field
sem_Field_UnnamedField :: T_MExpr -> T_FieldSep -> T_Field
sem_Field_UnnamedField T_MExpr
value_ T_FieldSep
sep_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _valueOparentOperatorPrecedence :: OperatorLevel
            _valueOparentOperatorAssociative :: Bool
            _lhsOisSemiColon :: Bool
            _lhsOcopy :: Field
            _lhsOcomments :: ([MToken])
            _lhsOpos :: Region
            _valueOcomments :: ([MToken])
            _valueOforceMultiline :: Bool
            _valueOindent :: Int
            _valueOppconf :: PrettyPrintConfig
            _sepOindent :: Int
            _sepOppconf :: PrettyPrintConfig
            _valueIcomments :: ([MToken])
            _valueIcopy :: MExpr
            _valueIendsWithPrefixExpression :: Bool
            _valueIisAssociative :: Bool
            _valueIisLiteral :: Bool
            _valueIisMultiline :: Bool
            _valueIpos :: Region
            _valueIprecedence :: OperatorLevel
            _valueIpretty :: Doc
            _sepIcopy :: FieldSep
            _sepIisMultiline :: Bool
            _sepIisSemiColon :: Bool
            _sepIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_valueIpretty Doc -> Doc -> Doc
<> Doc
_sepIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_valueIisMultiline Bool -> Bool -> Bool
|| Bool
_sepIisMultiline
              )
            _valueOparentOperatorPrecedence :: OperatorLevel
_valueOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _valueOparentOperatorAssociative :: Bool
_valueOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
_sepIisSemiColon
              )
            _copy :: Field
_copy =
              ( MExpr -> FieldSep -> Field
UnnamedField MExpr
_valueIcopy FieldSep
_sepIcopy
              )
            _lhsOcopy :: Field
_lhsOcopy =
              ( Field
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_valueIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_valueIpos
              )
            _valueOcomments :: [MToken]
_valueOcomments =
              ( [MToken]
_lhsIcomments
              )
            _valueOforceMultiline :: Bool
_valueOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _valueOindent :: Int
_valueOindent =
              ( Int
_lhsIindent
              )
            _valueOppconf :: PrettyPrintConfig
_valueOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _sepOindent :: Int
_sepOindent =
              ( Int
_lhsIindent
              )
            _sepOppconf :: PrettyPrintConfig
_sepOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_valueIcomments, MExpr
_valueIcopy, Bool
_valueIendsWithPrefixExpression, Bool
_valueIisAssociative, Bool
_valueIisLiteral, Bool
_valueIisMultiline, Region
_valueIpos, OperatorLevel
_valueIprecedence, Doc
_valueIpretty) =
              T_MExpr
value_ [MToken]
_valueOcomments Bool
_valueOforceMultiline Int
_valueOindent Bool
_valueOparentOperatorAssociative OperatorLevel
_valueOparentOperatorPrecedence PrettyPrintConfig
_valueOppconf
            (FieldSep
_sepIcopy, Bool
_sepIisMultiline, Bool
_sepIisSemiColon, Doc
_sepIpretty) =
              T_FieldSep
sep_ Int
_sepOindent PrettyPrintConfig
_sepOppconf
          in
            ([MToken]
_lhsOcomments, Field
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- FieldList ---------------------------------------------------
-- cata
sem_FieldList
  :: FieldList
  -> T_FieldList
sem_FieldList :: FieldList -> T_FieldList
sem_FieldList FieldList
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_Field -> T_FieldList -> T_FieldList
sem_FieldList_Cons T_FieldList
sem_FieldList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map Field -> T_Field
sem_Field FieldList
list))

-- semantic domain
type T_FieldList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Bool
  -> (([MToken]), FieldList, Bool, Bool, Doc)
data Inh_FieldList = Inh_FieldList {Inh_FieldList -> [MToken]
comments_Inh_FieldList :: ([MToken]), Inh_FieldList -> Bool
forceMultiline_Inh_FieldList :: Bool, Inh_FieldList -> Int
indent_Inh_FieldList :: Int, Inh_FieldList -> PrettyPrintConfig
ppconf_Inh_FieldList :: PrettyPrintConfig, Inh_FieldList -> Bool
someElementsInListAreMultiline_Inh_FieldList :: Bool}
data Syn_FieldList = Syn_FieldList {Syn_FieldList -> [MToken]
comments_Syn_FieldList :: ([MToken]), Syn_FieldList -> FieldList
copy_Syn_FieldList :: FieldList, Syn_FieldList -> Bool
isMultiline_Syn_FieldList :: Bool, Syn_FieldList -> Bool
isNil_Syn_FieldList :: Bool, Syn_FieldList -> Doc
pretty_Syn_FieldList :: Doc}
wrap_FieldList
  :: T_FieldList
  -> Inh_FieldList
  -> Syn_FieldList
wrap_FieldList :: T_FieldList -> Inh_FieldList -> Syn_FieldList
wrap_FieldList T_FieldList
sem (Inh_FieldList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Bool
_lhsIsomeElementsInListAreMultiline) =
  ( let
      ([MToken]
_lhsOcomments, FieldList
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisNil, Doc
_lhsOpretty) = T_FieldList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Bool
_lhsIsomeElementsInListAreMultiline
    in
      ([MToken] -> FieldList -> Bool -> Bool -> Doc -> Syn_FieldList
Syn_FieldList [MToken]
_lhsOcomments FieldList
_lhsOcopy Bool
_lhsOisMultiline Bool
_lhsOisNil Doc
_lhsOpretty)
  )
sem_FieldList_Cons
  :: T_Field
  -> T_FieldList
  -> T_FieldList
sem_FieldList_Cons :: T_Field -> T_FieldList -> T_FieldList
sem_FieldList_Cons T_Field
hd_ T_FieldList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Bool
_lhsIsomeElementsInListAreMultiline ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisNil :: Bool
            _tlOsomeElementsInListAreMultiline :: Bool
            _hdOcomments :: ([MToken])
            _tlOcomments :: ([MToken])
            _lhsOcomments :: ([MToken])
            _lhsOcopy :: FieldList
            _lhsOisMultiline :: Bool
            _hdOforceMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _hdIcomments :: ([MToken])
            _hdIcopy :: Field
            _hdIisMultiline :: Bool
            _hdIisSemiColon :: Bool
            _hdIpos :: Region
            _hdIpretty :: Doc
            _tlIcomments :: ([MToken])
            _tlIcopy :: FieldList
            _tlIisMultiline :: Bool
            _tlIisNil :: Bool
            _tlIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline
                  then
                    PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBefore)
                      Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent Doc
_hdIpretty
                        Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
                      Doc -> Doc -> Doc
$+$ Doc
_tlIpretty
                  else
                    Doc
_hdIpretty
                      Doc -> Doc -> Doc
`_optionalSpaceAfterSep` Doc
_tlIpretty
              )
            _lhsOisNil :: Bool
_lhsOisNil =
              ( Bool
False
              )
            _optionalSpaceAfterSep :: Doc -> Doc -> Doc
_optionalSpaceAfterSep =
              ( if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Doc -> Doc -> Doc
(<->) else Doc -> Doc -> Doc
(<>)
              )
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_lhsIforceMultiline
                  Bool -> Bool -> Bool
|| Bool
_hdIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_lhsIsomeElementsInListAreMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBefore)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _tlOsomeElementsInListAreMultiline :: Bool
_tlOsomeElementsInListAreMultiline =
              ( Bool
_lhsIsomeElementsInListAreMultiline
                  Bool -> Bool -> Bool
|| Bool
_hdIisMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBefore)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _commentsBefore :: ([MToken], [MToken])
_commentsBefore =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`before` Region
_hdIpos) [MToken]
_lhsIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsBefore
              )
            _commentsAfter :: ([MToken], [MToken])
_commentsAfter =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` Region
_hdIpos) [MToken]
_hdIcomments
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfter
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _copy :: FieldList
_copy =
              ( (:) Field
_hdIcopy FieldList
_tlIcopy
              )
            _lhsOcopy :: FieldList
_lhsOcopy =
              ( FieldList
_copy
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_hdIcomments, Field
_hdIcopy, Bool
_hdIisMultiline, Bool
_hdIisSemiColon, Region
_hdIpos, Doc
_hdIpretty) =
              T_Field
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent PrettyPrintConfig
_hdOppconf
            ([MToken]
_tlIcomments, FieldList
_tlIcopy, Bool
_tlIisMultiline, Bool
_tlIisNil, Doc
_tlIpretty) =
              T_FieldList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf Bool
_tlOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, FieldList
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisNil, Doc
_lhsOpretty)
        )
  )
sem_FieldList_Nil :: T_FieldList
sem_FieldList_Nil :: T_FieldList
sem_FieldList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Bool
_lhsIsomeElementsInListAreMultiline ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisNil :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: FieldList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOisNil :: Bool
_lhsOisNil =
              ( Bool
True
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: FieldList
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, FieldList
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisNil, Doc
_lhsOpretty)
        )
  )

-- FieldSep ----------------------------------------------------
-- cata
sem_FieldSep
  :: FieldSep
  -> T_FieldSep
sem_FieldSep :: FieldSep -> T_FieldSep
sem_FieldSep (FieldSep
CommaSep) =
  (T_FieldSep
sem_FieldSep_CommaSep)
sem_FieldSep (FieldSep
SemicolonSep) =
  (T_FieldSep
sem_FieldSep_SemicolonSep)
sem_FieldSep (FieldSep
NoSep) =
  (T_FieldSep
sem_FieldSep_NoSep)

-- semantic domain
type T_FieldSep =
  Int
  -> PrettyPrintConfig
  -> (FieldSep, Bool, Bool, Doc)
data Inh_FieldSep = Inh_FieldSep {Inh_FieldSep -> Int
indent_Inh_FieldSep :: Int, Inh_FieldSep -> PrettyPrintConfig
ppconf_Inh_FieldSep :: PrettyPrintConfig}
data Syn_FieldSep = Syn_FieldSep {Syn_FieldSep -> FieldSep
copy_Syn_FieldSep :: FieldSep, Syn_FieldSep -> Bool
isMultiline_Syn_FieldSep :: Bool, Syn_FieldSep -> Bool
isSemiColon_Syn_FieldSep :: Bool, Syn_FieldSep -> Doc
pretty_Syn_FieldSep :: Doc}
wrap_FieldSep
  :: T_FieldSep
  -> Inh_FieldSep
  -> Syn_FieldSep
wrap_FieldSep :: T_FieldSep -> Inh_FieldSep -> Syn_FieldSep
wrap_FieldSep T_FieldSep
sem (Inh_FieldSep Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      (FieldSep
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Doc
_lhsOpretty) = T_FieldSep
sem Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      (FieldSep -> Bool -> Bool -> Doc -> Syn_FieldSep
Syn_FieldSep FieldSep
_lhsOcopy Bool
_lhsOisMultiline Bool
_lhsOisSemiColon Doc
_lhsOpretty)
  )
sem_FieldSep_CommaSep :: T_FieldSep
sem_FieldSep_CommaSep :: T_FieldSep
sem_FieldSep_CommaSep =
  ( \Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisSemiColon :: Bool
            _lhsOcopy :: FieldSep
            _lhsOpretty :: Doc
_lhsOpretty =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty) Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
False
              )
            _copy :: FieldSep
_copy =
              ( FieldSep
CommaSep
              )
            _lhsOcopy :: FieldSep
_lhsOcopy =
              ( FieldSep
_copy
              )
          in
            (FieldSep
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Doc
_lhsOpretty)
        )
  )
sem_FieldSep_SemicolonSep :: T_FieldSep
sem_FieldSep_SemicolonSep :: T_FieldSep
sem_FieldSep_SemicolonSep =
  ( \Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisSemiColon :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: FieldSep
            _lhsOpretty :: Doc
_lhsOpretty =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty) Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
';'
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
True
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _copy :: FieldSep
_copy =
              ( FieldSep
SemicolonSep
              )
            _lhsOcopy :: FieldSep
_lhsOcopy =
              ( FieldSep
_copy
              )
          in
            (FieldSep
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Doc
_lhsOpretty)
        )
  )
sem_FieldSep_NoSep :: T_FieldSep
sem_FieldSep_NoSep :: T_FieldSep
sem_FieldSep_NoSep =
  ( \Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisSemiColon :: Bool
            _lhsOcopy :: FieldSep
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisSemiColon :: Bool
_lhsOisSemiColon =
              ( Bool
False
              )
            _copy :: FieldSep
_copy =
              ( FieldSep
NoSep
              )
            _lhsOcopy :: FieldSep
_lhsOcopy =
              ( FieldSep
_copy
              )
          in
            (FieldSep
_lhsOcopy, Bool
_lhsOisMultiline, Bool
_lhsOisSemiColon, Doc
_lhsOpretty)
        )
  )

-- FuncName ----------------------------------------------------
-- cata
sem_FuncName
  :: FuncName
  -> T_FuncName
sem_FuncName :: FuncName -> T_FuncName
sem_FuncName (FuncName [MToken]
_names Maybe MToken
_meta) =
  ([MToken] -> Maybe MToken -> T_FuncName
sem_FuncName_FuncName [MToken]
_names Maybe MToken
_meta)

-- semantic domain
type T_FuncName =
  ([MToken])
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), FuncName, Bool, Region, Doc)
data Inh_FuncName = Inh_FuncName {Inh_FuncName -> [MToken]
comments_Inh_FuncName :: ([MToken]), Inh_FuncName -> Int
indent_Inh_FuncName :: Int, Inh_FuncName -> PrettyPrintConfig
ppconf_Inh_FuncName :: PrettyPrintConfig}
data Syn_FuncName = Syn_FuncName {Syn_FuncName -> [MToken]
comments_Syn_FuncName :: ([MToken]), Syn_FuncName -> FuncName
copy_Syn_FuncName :: FuncName, Syn_FuncName -> Bool
isMultiline_Syn_FuncName :: Bool, Syn_FuncName -> Region
pos_Syn_FuncName :: Region, Syn_FuncName -> Doc
pretty_Syn_FuncName :: Doc}
wrap_FuncName
  :: T_FuncName
  -> Inh_FuncName
  -> Syn_FuncName
wrap_FuncName :: T_FuncName -> Inh_FuncName -> Syn_FuncName
wrap_FuncName T_FuncName
sem (Inh_FuncName [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, FuncName
_lhsOcopy, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty) = T_FuncName
sem [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> FuncName -> Bool -> Region -> Doc -> Syn_FuncName
Syn_FuncName [MToken]
_lhsOcomments FuncName
_lhsOcopy Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_FuncName_FuncName
  :: ([MToken])
  -> (Maybe MToken)
  -> T_FuncName
sem_FuncName_FuncName :: [MToken] -> Maybe MToken -> T_FuncName
sem_FuncName_FuncName [MToken]
names_ Maybe MToken
meta_ =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOpos :: Region
            _lhsOcopy :: FuncName
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok String
"." [MToken]
names_ Doc -> Doc -> Doc
<> Maybe MToken -> Doc
metaDoc Maybe MToken
meta_
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOpos :: Region
_lhsOpos =
              ( case Maybe MToken
meta_ of
                  Maybe MToken
Nothing -> Region
_namesPos
                  Just MToken
name -> Region -> Region -> Region
rgOr Region
_namesPos (MToken -> Region
mpos MToken
name)
              )
            _namesPos :: Region
_namesPos =
              ( forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldl1 Region -> Region -> Region
rgOr forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map MToken -> Region
mpos [MToken]
names_
              )
            _copy :: FuncName
_copy =
              ( [MToken] -> Maybe MToken -> FuncName
FuncName [MToken]
names_ Maybe MToken
meta_
              )
            _lhsOcopy :: FuncName
_lhsOcopy =
              ( FuncName
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, FuncName
_lhsOcopy, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- MElse -------------------------------------------------------
-- cata
sem_MElse
  :: MElse
  -> T_MElse
sem_MElse :: MElse -> T_MElse
sem_MElse (MElse Region
_pos Block
_body) =
  (Region -> T_Block -> T_MElse
sem_MElse_MElse Region
_pos (Block -> T_Block
sem_Block Block
_body))

-- semantic domain
type T_MElse =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Region
  -> (([MToken]), MElse, Bool, Bool, Region, Doc)
data Inh_MElse = Inh_MElse {Inh_MElse -> [MToken]
comments_Inh_MElse :: ([MToken]), Inh_MElse -> Bool
forceMultiline_Inh_MElse :: Bool, Inh_MElse -> Int
indent_Inh_MElse :: Int, Inh_MElse -> PrettyPrintConfig
ppconf_Inh_MElse :: PrettyPrintConfig, Inh_MElse -> Region
statRegion_Inh_MElse :: Region}
data Syn_MElse = Syn_MElse {Syn_MElse -> [MToken]
comments_Syn_MElse :: ([MToken]), Syn_MElse -> MElse
copy_Syn_MElse :: MElse, Syn_MElse -> Bool
elsesExist_Syn_MElse :: Bool, Syn_MElse -> Bool
isMultiline_Syn_MElse :: Bool, Syn_MElse -> Region
pos_Syn_MElse :: Region, Syn_MElse -> Doc
pretty_Syn_MElse :: Doc}
wrap_MElse
  :: T_MElse
  -> Inh_MElse
  -> Syn_MElse
wrap_MElse :: T_MElse -> Inh_MElse -> Syn_MElse
wrap_MElse T_MElse
sem (Inh_MElse [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion) =
  ( let
      ([MToken]
_lhsOcomments, MElse
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty) = T_MElse
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion
    in
      ([MToken] -> MElse -> Bool -> Bool -> Region -> Doc -> Syn_MElse
Syn_MElse [MToken]
_lhsOcomments MElse
_lhsOcopy Bool
_lhsOelsesExist Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_MElse_MElse
  :: Region
  -> T_Block
  -> T_MElse
sem_MElse_MElse :: Region -> T_Block -> T_MElse
sem_MElse_MElse Region
pos_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _bodyOindent :: Int
            _lhsOpos :: Region
            _bodyOcomments :: ([MToken])
            _lhsOelsesExist :: Bool
            _lhsOcopy :: MElse
            _lhsOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"else")
                  Doc -> Doc -> Doc
<-> Doc
_prettyCommentsAfter
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_bodyIisMultiline
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _prettyCommentsAfter :: Doc
_prettyCommentsAfter =
              ( PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _commentsAfter :: ([MToken], [MToken])
_commentsAfter =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` Region
pos_) [MToken]
_lhsIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
pos_
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfter
              )
            _lhsOelsesExist :: Bool
_lhsOelsesExist =
              ( Bool
False
              )
            _copy :: MElse
_copy =
              ( Region -> Block -> MElse
MElse Region
pos_ Block
_bodyIcopy
              )
            _lhsOcopy :: MElse
_lhsOcopy =
              ( MElse
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, MElse
_lhsOcopy, Bool
_lhsOelsesExist, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- MElseIf -----------------------------------------------------
-- cata
sem_MElseIf
  :: MElseIf
  -> T_MElseIf
sem_MElseIf :: MElseIf -> T_MElseIf
sem_MElseIf (MElseIf Region
_pos (MExpr, Block)
_elif) =
  (Region -> T_ElseIf -> T_MElseIf
sem_MElseIf_MElseIf Region
_pos ((MExpr, Block) -> T_ElseIf
sem_ElseIf (MExpr, Block)
_elif))

-- semantic domain
type T_MElseIf =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), MElseIf, Bool, Region, Doc)
data Inh_MElseIf = Inh_MElseIf {Inh_MElseIf -> [MToken]
comments_Inh_MElseIf :: ([MToken]), Inh_MElseIf -> Bool
forceMultiline_Inh_MElseIf :: Bool, Inh_MElseIf -> Int
indent_Inh_MElseIf :: Int, Inh_MElseIf -> PrettyPrintConfig
ppconf_Inh_MElseIf :: PrettyPrintConfig}
data Syn_MElseIf = Syn_MElseIf {Syn_MElseIf -> [MToken]
comments_Syn_MElseIf :: ([MToken]), Syn_MElseIf -> MElseIf
copy_Syn_MElseIf :: MElseIf, Syn_MElseIf -> Bool
isMultiline_Syn_MElseIf :: Bool, Syn_MElseIf -> Region
pos_Syn_MElseIf :: Region, Syn_MElseIf -> Doc
pretty_Syn_MElseIf :: Doc}
wrap_MElseIf
  :: T_MElseIf
  -> Inh_MElseIf
  -> Syn_MElseIf
wrap_MElseIf :: T_MElseIf -> Inh_MElseIf -> Syn_MElseIf
wrap_MElseIf T_MElseIf
sem (Inh_MElseIf [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, MElseIf
_lhsOcopy, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty) = T_MElseIf
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> MElseIf -> Bool -> Region -> Doc -> Syn_MElseIf
Syn_MElseIf [MToken]
_lhsOcomments MElseIf
_lhsOcopy Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty)
  )
sem_MElseIf_MElseIf
  :: Region
  -> T_ElseIf
  -> T_MElseIf
sem_MElseIf_MElseIf :: Region -> T_ElseIf -> T_MElseIf
sem_MElseIf_MElseIf Region
pos_ T_ElseIf
elif_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpos :: Region
            _lhsOisMultiline :: Bool
            _lhsOcopy :: MElseIf
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
            _elifOcomments :: ([MToken])
            _elifOforceMultiline :: Bool
            _elifOindent :: Int
            _elifOppconf :: PrettyPrintConfig
            _elifIcomments :: ([MToken])
            _elifIcopy :: ElseIf
            _elifIisMultiline :: Bool
            _elifIpretty :: Doc
            _lhsOpos :: Region
_lhsOpos =
              ( Region
pos_
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_elifIisMultiline
              )
            _copy :: MElseIf
_copy =
              ( Region -> (MExpr, Block) -> MElseIf
MElseIf Region
pos_ (MExpr, Block)
_elifIcopy
              )
            _lhsOcopy :: MElseIf
_lhsOcopy =
              ( MElseIf
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_elifIcomments
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_elifIpretty
              )
            _elifOcomments :: [MToken]
_elifOcomments =
              ( [MToken]
_lhsIcomments
              )
            _elifOforceMultiline :: Bool
_elifOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _elifOindent :: Int
_elifOindent =
              ( Int
_lhsIindent
              )
            _elifOppconf :: PrettyPrintConfig
_elifOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_elifIcomments, (MExpr, Block)
_elifIcopy, Bool
_elifIisMultiline, Doc
_elifIpretty) =
              T_ElseIf
elif_ [MToken]
_elifOcomments Bool
_elifOforceMultiline Int
_elifOindent PrettyPrintConfig
_elifOppconf
          in
            ([MToken]
_lhsOcomments, MElseIf
_lhsOcopy, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty)
        )
  )

-- MExpr -------------------------------------------------------
-- cata
sem_MExpr
  :: MExpr
  -> T_MExpr
sem_MExpr :: MExpr -> T_MExpr
sem_MExpr (MExpr Region
_pos Expr
_expr) =
  (Region -> T_Expr -> T_MExpr
sem_MExpr_MExpr Region
_pos (Expr -> T_Expr
sem_Expr Expr
_expr))

-- semantic domain
type T_MExpr =
  ([MToken])
  -> Bool
  -> Int
  -> Bool
  -> OperatorLevel
  -> PrettyPrintConfig
  -> (([MToken]), MExpr, Bool, Bool, Bool, Bool, Region, OperatorLevel, Doc)
data Inh_MExpr = Inh_MExpr {Inh_MExpr -> [MToken]
comments_Inh_MExpr :: ([MToken]), Inh_MExpr -> Bool
forceMultiline_Inh_MExpr :: Bool, Inh_MExpr -> Int
indent_Inh_MExpr :: Int, Inh_MExpr -> Bool
parentOperatorAssociative_Inh_MExpr :: Bool, Inh_MExpr -> OperatorLevel
parentOperatorPrecedence_Inh_MExpr :: OperatorLevel, Inh_MExpr -> PrettyPrintConfig
ppconf_Inh_MExpr :: PrettyPrintConfig}
data Syn_MExpr = Syn_MExpr {Syn_MExpr -> [MToken]
comments_Syn_MExpr :: ([MToken]), Syn_MExpr -> MExpr
copy_Syn_MExpr :: MExpr, Syn_MExpr -> Bool
endsWithPrefixExpression_Syn_MExpr :: Bool, Syn_MExpr -> Bool
isAssociative_Syn_MExpr :: Bool, Syn_MExpr -> Bool
isLiteral_Syn_MExpr :: Bool, Syn_MExpr -> Bool
isMultiline_Syn_MExpr :: Bool, Syn_MExpr -> Region
pos_Syn_MExpr :: Region, Syn_MExpr -> OperatorLevel
precedence_Syn_MExpr :: OperatorLevel, Syn_MExpr -> Doc
pretty_Syn_MExpr :: Doc}
wrap_MExpr
  :: T_MExpr
  -> Inh_MExpr
  -> Syn_MExpr
wrap_MExpr :: T_MExpr -> Inh_MExpr -> Syn_MExpr
wrap_MExpr T_MExpr
sem (Inh_MExpr [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, MExpr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, Region
_lhsOpos, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_MExpr
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> MExpr
-> Bool
-> Bool
-> Bool
-> Bool
-> Region
-> OperatorLevel
-> Doc
-> Syn_MExpr
Syn_MExpr [MToken]
_lhsOcomments MExpr
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Bool
_lhsOisAssociative Bool
_lhsOisLiteral Bool
_lhsOisMultiline Region
_lhsOpos OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_MExpr_MExpr
  :: Region
  -> T_Expr
  -> T_MExpr
sem_MExpr_MExpr :: Region -> T_Expr -> T_MExpr
sem_MExpr_MExpr Region
pos_ T_Expr
expr_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpos :: Region
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _exprOstatRegion :: Region
            _lhsOisAssociative :: Bool
            _lhsOisLiteral :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: MExpr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
            _exprOcomments :: ([MToken])
            _exprOforceMultiline :: Bool
            _exprOindent :: Int
            _exprOparentOperatorAssociative :: Bool
            _exprOparentOperatorPrecedence :: OperatorLevel
            _exprOppconf :: PrettyPrintConfig
            _exprIcomments :: ([MToken])
            _exprIcopy :: Expr
            _exprIendsWithPrefixExpression :: Bool
            _exprIisAssociative :: Bool
            _exprIisLiteral :: Bool
            _exprIisMultiline :: Bool
            _exprIprecedence :: OperatorLevel
            _exprIpretty :: Doc
            _lhsOpos :: Region
_lhsOpos =
              ( Region
pos_
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_exprIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_exprIisMultiline
              )
            _exprOstatRegion :: Region
_exprOstatRegion =
              ( Region
pos_
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_exprIisAssociative
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
_exprIisLiteral
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
_exprIprecedence
              )
            _copy :: MExpr
_copy =
              ( Region -> Expr -> MExpr
MExpr Region
pos_ Expr
_exprIcopy
              )
            _lhsOcopy :: MExpr
_lhsOcopy =
              ( MExpr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_exprIcomments
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_exprIpretty
              )
            _exprOcomments :: [MToken]
_exprOcomments =
              ( [MToken]
_lhsIcomments
              )
            _exprOforceMultiline :: Bool
_exprOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _exprOindent :: Int
_exprOindent =
              ( Int
_lhsIindent
              )
            _exprOparentOperatorAssociative :: Bool
_exprOparentOperatorAssociative =
              ( Bool
_lhsIparentOperatorAssociative
              )
            _exprOparentOperatorPrecedence :: OperatorLevel
_exprOparentOperatorPrecedence =
              ( OperatorLevel
_lhsIparentOperatorPrecedence
              )
            _exprOppconf :: PrettyPrintConfig
_exprOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_exprIcomments, Expr
_exprIcopy, Bool
_exprIendsWithPrefixExpression, Bool
_exprIisAssociative, Bool
_exprIisLiteral, Bool
_exprIisMultiline, OperatorLevel
_exprIprecedence, Doc
_exprIpretty) =
              T_Expr
expr_ [MToken]
_exprOcomments Bool
_exprOforceMultiline Int
_exprOindent Bool
_exprOparentOperatorAssociative OperatorLevel
_exprOparentOperatorPrecedence PrettyPrintConfig
_exprOppconf Region
_exprOstatRegion
          in
            ([MToken]
_lhsOcomments, MExpr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, Region
_lhsOpos, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- MExprList ---------------------------------------------------
-- cata
sem_MExprList
  :: MExprList
  -> T_MExprList
sem_MExprList :: [MExpr] -> T_MExprList
sem_MExprList [MExpr]
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_MExpr -> T_MExprList -> T_MExprList
sem_MExprList_Cons T_MExprList
sem_MExprList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map MExpr -> T_MExpr
sem_MExpr [MExpr]
list))

-- semantic domain
type T_MExprList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Bool
  -> (([MToken]), MExprList, Bool, Bool, Bool, Region, OperatorLevel, Doc)
data Inh_MExprList = Inh_MExprList {Inh_MExprList -> [MToken]
comments_Inh_MExprList :: ([MToken]), Inh_MExprList -> Bool
forceMultiline_Inh_MExprList :: Bool, Inh_MExprList -> Int
indent_Inh_MExprList :: Int, Inh_MExprList -> PrettyPrintConfig
ppconf_Inh_MExprList :: PrettyPrintConfig, Inh_MExprList -> Bool
someElementsInListAreMultiline_Inh_MExprList :: Bool}
data Syn_MExprList = Syn_MExprList {Syn_MExprList -> [MToken]
comments_Syn_MExprList :: ([MToken]), Syn_MExprList -> [MExpr]
copy_Syn_MExprList :: MExprList, Syn_MExprList -> Bool
isAssociative_Syn_MExprList :: Bool, Syn_MExprList -> Bool
isLast_Syn_MExprList :: Bool, Syn_MExprList -> Bool
isMultiline_Syn_MExprList :: Bool, Syn_MExprList -> Region
pos_Syn_MExprList :: Region, Syn_MExprList -> OperatorLevel
precedence_Syn_MExprList :: OperatorLevel, Syn_MExprList -> Doc
pretty_Syn_MExprList :: Doc}
wrap_MExprList
  :: T_MExprList
  -> Inh_MExprList
  -> Syn_MExprList
wrap_MExprList :: T_MExprList -> Inh_MExprList -> Syn_MExprList
wrap_MExprList T_MExprList
sem (Inh_MExprList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Bool
_lhsIsomeElementsInListAreMultiline) =
  ( let
      ([MToken]
_lhsOcomments, [MExpr]
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Region
_lhsOpos, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_MExprList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Bool
_lhsIsomeElementsInListAreMultiline
    in
      ([MToken]
-> [MExpr]
-> Bool
-> Bool
-> Bool
-> Region
-> OperatorLevel
-> Doc
-> Syn_MExprList
Syn_MExprList [MToken]
_lhsOcomments [MExpr]
_lhsOcopy Bool
_lhsOisAssociative Bool
_lhsOisLast Bool
_lhsOisMultiline Region
_lhsOpos OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_MExprList_Cons
  :: T_MExpr
  -> T_MExprList
  -> T_MExprList
sem_MExprList_Cons :: T_MExpr -> T_MExprList -> T_MExprList
sem_MExprList_Cons T_MExpr
hd_ T_MExprList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Bool
_lhsIsomeElementsInListAreMultiline ->
        ( let
            _lhsOpretty :: Doc
            _hdOcomments :: ([MToken])
            _tlOcomments :: ([MToken])
            _lhsOcomments :: ([MToken])
            _lhsOpos :: Region
            _lhsOisLast :: Bool
            _hdOparentOperatorPrecedence :: OperatorLevel
            _hdOparentOperatorAssociative :: Bool
            _tlOsomeElementsInListAreMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: MExprList
            _lhsOisMultiline :: Bool
            _hdOforceMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _hdIcomments :: ([MToken])
            _hdIcopy :: MExpr
            _hdIendsWithPrefixExpression :: Bool
            _hdIisAssociative :: Bool
            _hdIisLiteral :: Bool
            _hdIisMultiline :: Bool
            _hdIpos :: Region
            _hdIprecedence :: OperatorLevel
            _hdIpretty :: Doc
            _tlIcomments :: ([MToken])
            _tlIcopy :: MExprList
            _tlIisAssociative :: Bool
            _tlIisLast :: Bool
            _tlIisMultiline :: Bool
            _tlIpos :: Region
            _tlIprecedence :: OperatorLevel
            _tlIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline then Doc
_prettyMultiLine else Doc
_prettySingleLine
              )
            _prettySingleLine :: Doc
_prettySingleLine =
              ( Doc
_hdIpretty
                  Doc -> Doc -> Doc
<> Doc
_comma
                  Doc -> Doc -> Doc
<> Doc
_tlIpretty
              )
            _prettyMultiLine :: Doc
_prettyMultiLine =
              ( PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine)
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent Doc
_hdIpretty
                    Doc -> Doc -> Doc
<> Doc
_comma
                      Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
                  Doc -> Doc -> Doc
$+$ Doc
_tlIpretty
              )
            _comma :: Doc
_comma =
              ( if Bool
_tlIisLast
                  then Doc
empty
                  else
                    (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                      Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                      Doc -> Doc -> Doc
<> (if Bool -> Bool
not Bool
_isMultiline Bool -> Bool -> Bool
&& PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _commentsBeforeLine :: ([MToken], [MToken])
_commentsBeforeLine =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos' Token
_) -> Region
pos' Region -> Region -> Bool
`before` Region
_hdIpos) [MToken]
_lhsIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsBeforeLine
              )
            _commentsAfter :: ([MToken], [MToken])
_commentsAfter =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos' Token
_) -> Region
pos' Region -> Region -> Bool
`before` Region
_tlIpos) [MToken]
_hdIcomments
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfter
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
_hdIpos
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
False
              )
            _hdOparentOperatorPrecedence :: OperatorLevel
_hdOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _hdOparentOperatorAssociative :: Bool
_hdOparentOperatorAssociative =
              ( Bool
True
              )
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_lhsIforceMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
                  Bool -> Bool -> Bool
|| Bool
_lhsIsomeElementsInListAreMultiline
                  Bool -> Bool -> Bool
|| Bool
_hdIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
              )
            _tlOsomeElementsInListAreMultiline :: Bool
_tlOsomeElementsInListAreMultiline =
              ( Bool
_lhsIsomeElementsInListAreMultiline
                  Bool -> Bool -> Bool
|| Bool
_hdIisMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_hdIisAssociative Bool -> Bool -> Bool
&& Bool
_tlIisAssociative
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( (forall a. Ord a => a -> a -> a
min OperatorLevel
_hdIprecedence OperatorLevel
_tlIprecedence)
              )
            _copy :: [MExpr]
_copy =
              ( (:) MExpr
_hdIcopy [MExpr]
_tlIcopy
              )
            _lhsOcopy :: [MExpr]
_lhsOcopy =
              ( [MExpr]
_copy
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_hdIcomments, MExpr
_hdIcopy, Bool
_hdIendsWithPrefixExpression, Bool
_hdIisAssociative, Bool
_hdIisLiteral, Bool
_hdIisMultiline, Region
_hdIpos, OperatorLevel
_hdIprecedence, Doc
_hdIpretty) =
              T_MExpr
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent Bool
_hdOparentOperatorAssociative OperatorLevel
_hdOparentOperatorPrecedence PrettyPrintConfig
_hdOppconf
            ([MToken]
_tlIcomments, [MExpr]
_tlIcopy, Bool
_tlIisAssociative, Bool
_tlIisLast, Bool
_tlIisMultiline, Region
_tlIpos, OperatorLevel
_tlIprecedence, Doc
_tlIpretty) =
              T_MExprList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf Bool
_tlOsomeElementsInListAreMultiline
          in
            ([MToken]
_lhsOcomments, [MExpr]
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Region
_lhsOpos, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_MExprList_Nil :: T_MExprList
sem_MExprList_Nil :: T_MExprList
sem_MExprList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Bool
_lhsIsomeElementsInListAreMultiline ->
        ( let
            _lhsOpretty :: Doc
            _lhsOpos :: Region
            _lhsOisMultiline :: Bool
            _lhsOisLast :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: MExprList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOpos :: Region
_lhsOpos =
              ( Region
emptyRg
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
True
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: [MExpr]
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, [MExpr]
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Region
_lhsOpos, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- MStat -------------------------------------------------------
-- cata
sem_MStat
  :: MStat
  -> T_MStat
sem_MStat :: MStat -> T_MStat
sem_MStat (MStat Region
_pos Stat
_stat) =
  (Region -> T_Stat -> T_MStat
sem_MStat_MStat Region
_pos (Stat -> T_Stat
sem_Stat Stat
_stat))

-- semantic domain
type T_MStat =
  ([MToken])
  -> Bool
  -> Int
  -> Bool
  -> PrettyPrintConfig
  -> Bool
  -> (([MToken]), MStat, Bool, Bool, Region, Doc, Bool, Int)
data Inh_MStat = Inh_MStat {Inh_MStat -> [MToken]
comments_Inh_MStat :: ([MToken]), Inh_MStat -> Bool
forceMultiline_Inh_MStat :: Bool, Inh_MStat -> Int
indent_Inh_MStat :: Int, Inh_MStat -> Bool
isLastStatement_Inh_MStat :: Bool, Inh_MStat -> PrettyPrintConfig
ppconf_Inh_MStat :: PrettyPrintConfig, Inh_MStat -> Bool
wouldBeAmbiguousWithoutSemicolon_Inh_MStat :: Bool}
data Syn_MStat = Syn_MStat {Syn_MStat -> [MToken]
comments_Syn_MStat :: ([MToken]), Syn_MStat -> MStat
copy_Syn_MStat :: MStat, Syn_MStat -> Bool
endsWithPrefixExpression_Syn_MStat :: Bool, Syn_MStat -> Bool
isMultiline_Syn_MStat :: Bool, Syn_MStat -> Region
pos_Syn_MStat :: Region, Syn_MStat -> Doc
pretty_Syn_MStat :: Doc, Syn_MStat -> Bool
startsWithExprPrefixExpression_Syn_MStat :: Bool, Syn_MStat -> Int
statementCount_Syn_MStat :: Int}
wrap_MStat
  :: T_MStat
  -> Inh_MStat
  -> Syn_MStat
wrap_MStat :: T_MStat -> Inh_MStat -> Syn_MStat
wrap_MStat T_MStat
sem (Inh_MStat [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIisLastStatement PrettyPrintConfig
_lhsIppconf Bool
_lhsIwouldBeAmbiguousWithoutSemicolon) =
  ( let
      ([MToken]
_lhsOcomments, MStat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Int
_lhsOstatementCount) = T_MStat
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIisLastStatement PrettyPrintConfig
_lhsIppconf Bool
_lhsIwouldBeAmbiguousWithoutSemicolon
    in
      ([MToken]
-> MStat
-> Bool
-> Bool
-> Region
-> Doc
-> Bool
-> Int
-> Syn_MStat
Syn_MStat [MToken]
_lhsOcomments MStat
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Bool
_lhsOisMultiline Region
_lhsOpos Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression Int
_lhsOstatementCount)
  )
sem_MStat_MStat
  :: Region
  -> T_Stat
  -> T_MStat
sem_MStat_MStat :: Region -> T_Stat -> T_MStat
sem_MStat_MStat Region
pos_ T_Stat
stat_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpos :: Region
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _statOstatRegion :: Region
            _statOwouldBeAmbiguousWithoutSemicolon :: Bool
            _lhsOstatementCount :: Int
            _lhsOcopy :: MStat
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
            _statOcomments :: ([MToken])
            _statOforceMultiline :: Bool
            _statOindent :: Int
            _statOisLastStatement :: Bool
            _statOppconf :: PrettyPrintConfig
            _statIcomments :: ([MToken])
            _statIcopy :: Stat
            _statIendsWithPrefixExpression :: Bool
            _statIisMultiline :: Bool
            _statIpretty :: Doc
            _statIstartsWithExprPrefixExpression :: Bool
            _lhsOpos :: Region
_lhsOpos =
              ( Region
pos_
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_statIstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_statIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_statIisMultiline
              )
            _statOstatRegion :: Region
_statOstatRegion =
              ( Region
pos_
              )
            _statOwouldBeAmbiguousWithoutSemicolon :: Bool
_statOwouldBeAmbiguousWithoutSemicolon =
              ( Bool
_lhsIwouldBeAmbiguousWithoutSemicolon
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
1
              )
            _copy :: MStat
_copy =
              ( Region -> Stat -> MStat
MStat Region
pos_ Stat
_statIcopy
              )
            _lhsOcopy :: MStat
_lhsOcopy =
              ( MStat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_statIcomments
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_statIpretty
              )
            _statOcomments :: [MToken]
_statOcomments =
              ( [MToken]
_lhsIcomments
              )
            _statOforceMultiline :: Bool
_statOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _statOindent :: Int
_statOindent =
              ( Int
_lhsIindent
              )
            _statOisLastStatement :: Bool
_statOisLastStatement =
              ( Bool
_lhsIisLastStatement
              )
            _statOppconf :: PrettyPrintConfig
_statOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_statIcomments, Stat
_statIcopy, Bool
_statIendsWithPrefixExpression, Bool
_statIisMultiline, Doc
_statIpretty, Bool
_statIstartsWithExprPrefixExpression) =
              T_Stat
stat_ [MToken]
_statOcomments Bool
_statOforceMultiline Int
_statOindent Bool
_statOisLastStatement PrettyPrintConfig
_statOppconf Region
_statOstatRegion Bool
_statOwouldBeAmbiguousWithoutSemicolon
          in
            ([MToken]
_lhsOcomments, MStat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Region
_lhsOpos, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Int
_lhsOstatementCount)
        )
  )

-- MStatList ---------------------------------------------------
-- cata
sem_MStatList
  :: MStatList
  -> T_MStatList
sem_MStatList :: [MStat] -> T_MStatList
sem_MStatList [MStat]
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_MStat -> T_MStatList -> T_MStatList
sem_MStatList_Cons T_MStatList
sem_MStatList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map MStat -> T_MStat
sem_MStat [MStat]
list))

-- semantic domain
type T_MStatList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> Region
  -> (([MToken]), MStatList, Bool, Bool, Doc, Bool, Int)
data Inh_MStatList = Inh_MStatList {Inh_MStatList -> [MToken]
comments_Inh_MStatList :: ([MToken]), Inh_MStatList -> Bool
forceMultiline_Inh_MStatList :: Bool, Inh_MStatList -> Int
indent_Inh_MStatList :: Int, Inh_MStatList -> PrettyPrintConfig
ppconf_Inh_MStatList :: PrettyPrintConfig, Inh_MStatList -> Region
statRegion_Inh_MStatList :: Region}
data Syn_MStatList = Syn_MStatList {Syn_MStatList -> [MToken]
comments_Syn_MStatList :: ([MToken]), Syn_MStatList -> [MStat]
copy_Syn_MStatList :: MStatList, Syn_MStatList -> Bool
isLast_Syn_MStatList :: Bool, Syn_MStatList -> Bool
isMultiline_Syn_MStatList :: Bool, Syn_MStatList -> Doc
pretty_Syn_MStatList :: Doc, Syn_MStatList -> Bool
startsWithExprPrefixExpression_Syn_MStatList :: Bool, Syn_MStatList -> Int
statementCount_Syn_MStatList :: Int}
wrap_MStatList
  :: T_MStatList
  -> Inh_MStatList
  -> Syn_MStatList
wrap_MStatList :: T_MStatList -> Inh_MStatList -> Syn_MStatList
wrap_MStatList T_MStatList
sem (Inh_MStatList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion) =
  ( let
      ([MToken]
_lhsOcomments, [MStat]
_lhsOcopy, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Int
_lhsOstatementCount) = T_MStatList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion
    in
      ([MToken]
-> [MStat] -> Bool -> Bool -> Doc -> Bool -> Int -> Syn_MStatList
Syn_MStatList [MToken]
_lhsOcomments [MStat]
_lhsOcopy Bool
_lhsOisLast Bool
_lhsOisMultiline Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression Int
_lhsOstatementCount)
  )
sem_MStatList_Cons
  :: T_MStat
  -> T_MStatList
  -> T_MStatList
sem_MStatList_Cons :: T_MStat -> T_MStatList -> T_MStatList
sem_MStatList_Cons T_MStat
hd_ T_MStatList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOisLast :: Bool
            _hdOcomments :: ([MToken])
            _tlOcomments :: ([MToken])
            _lhsOcomments :: ([MToken])
            _hdOisLastStatement :: Bool
            _hdOwouldBeAmbiguousWithoutSemicolon :: Bool
            _hdOforceMultiline :: Bool
            _lhsOstatementCount :: Int
            _lhsOcopy :: MStatList
            _lhsOisMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _tlOstatRegion :: Region
            _hdIcomments :: ([MToken])
            _hdIcopy :: MStat
            _hdIendsWithPrefixExpression :: Bool
            _hdIisMultiline :: Bool
            _hdIpos :: Region
            _hdIpretty :: Doc
            _hdIstartsWithExprPrefixExpression :: Bool
            _hdIstatementCount :: Int
            _tlIcomments :: ([MToken])
            _tlIcopy :: MStatList
            _tlIisLast :: Bool
            _tlIisMultiline :: Bool
            _tlIpretty :: Doc
            _tlIstartsWithExprPrefixExpression :: Bool
            _tlIstatementCount :: Int
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Int -> [MToken] -> Doc
renderMLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine)
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent Doc
_hdIpretty
                    Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
                    Doc -> Doc -> Doc
<> Doc
_addNewline
                  Doc -> Doc -> Doc
$+$ Doc
_tlIpretty
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_hdIstartsWithExprPrefixExpression
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
False
              )
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_hdIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine)
                  Bool -> Bool -> Bool
|| Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfter)
              )
            _addNewline :: Doc
_addNewline =
              ( if Bool -> Bool
not Bool
_tlIisLast Bool -> Bool -> Bool
&& Bool
_hdIisMultiline then Char -> Doc
zchr Char
'\n' else Doc
empty
              )
            _commentsBeforeLine :: ([MToken], [MToken])
_commentsBeforeLine =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos' Token
_) -> Region
pos' Region -> Region -> Bool
`before` Region
_hdIpos) [MToken]
_lhsIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsBeforeLine
              )
            _commentsAfter :: ([MToken], [MToken])
_commentsAfter =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos' Token
_) -> Region
pos' Region -> Region -> Bool
`beforeOrOnLine` Region
_hdIpos) [MToken]
_hdIcomments
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfter
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _hdOisLastStatement :: Bool
_hdOisLastStatement =
              ( Bool
_tlIisLast
              )
            _hdOwouldBeAmbiguousWithoutSemicolon :: Bool
_hdOwouldBeAmbiguousWithoutSemicolon =
              ( Bool
_hdIendsWithPrefixExpression Bool -> Bool -> Bool
&& Bool
_tlIstartsWithExprPrefixExpression
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( [MToken] -> Bool
commentsForceMultiline forall a b. (a -> b) -> a -> b
$ forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsBeforeLine
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
_hdIstatementCount forall a. Num a => a -> a -> a
+ Int
_tlIstatementCount
              )
            _copy :: [MStat]
_copy =
              ( (:) MStat
_hdIcopy [MStat]
_tlIcopy
              )
            _lhsOcopy :: [MStat]
_lhsOcopy =
              ( [MStat]
_copy
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOstatRegion :: Region
_tlOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_hdIcomments, MStat
_hdIcopy, Bool
_hdIendsWithPrefixExpression, Bool
_hdIisMultiline, Region
_hdIpos, Doc
_hdIpretty, Bool
_hdIstartsWithExprPrefixExpression, Int
_hdIstatementCount) =
              T_MStat
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent Bool
_hdOisLastStatement PrettyPrintConfig
_hdOppconf Bool
_hdOwouldBeAmbiguousWithoutSemicolon
            ([MToken]
_tlIcomments, [MStat]
_tlIcopy, Bool
_tlIisLast, Bool
_tlIisMultiline, Doc
_tlIpretty, Bool
_tlIstartsWithExprPrefixExpression, Int
_tlIstatementCount) =
              T_MStatList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf Region
_tlOstatRegion
          in
            ([MToken]
_lhsOcomments, [MStat]
_lhsOcopy, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Int
_lhsOstatementCount)
        )
  )
sem_MStatList_Nil :: T_MStatList
sem_MStatList_Nil :: T_MStatList
sem_MStatList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstatementCount :: Int
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisLast :: Bool
            _lhsOcopy :: MStatList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOstatementCount :: Int
_lhsOstatementCount =
              ( Int
0
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
True
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: [MStat]
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, [MStat]
_lhsOcopy, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Int
_lhsOstatementCount)
        )
  )

-- MaybeMExpr --------------------------------------------------
-- cata
sem_MaybeMExpr
  :: MaybeMExpr
  -> T_MaybeMExpr
sem_MaybeMExpr :: Maybe MExpr -> T_MaybeMExpr
sem_MaybeMExpr (Prelude.Just MExpr
x) =
  (T_MExpr -> T_MaybeMExpr
sem_MaybeMExpr_Just (MExpr -> T_MExpr
sem_MExpr MExpr
x))
sem_MaybeMExpr Maybe MExpr
Prelude.Nothing =
  T_MaybeMExpr
sem_MaybeMExpr_Nothing

-- semantic domain
type T_MaybeMExpr =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), MaybeMExpr, Bool, Bool, Bool, Bool, OperatorLevel, Doc)
data Inh_MaybeMExpr = Inh_MaybeMExpr {Inh_MaybeMExpr -> [MToken]
comments_Inh_MaybeMExpr :: ([MToken]), Inh_MaybeMExpr -> Bool
forceMultiline_Inh_MaybeMExpr :: Bool, Inh_MaybeMExpr -> Int
indent_Inh_MaybeMExpr :: Int, Inh_MaybeMExpr -> PrettyPrintConfig
ppconf_Inh_MaybeMExpr :: PrettyPrintConfig}
data Syn_MaybeMExpr = Syn_MaybeMExpr {Syn_MaybeMExpr -> [MToken]
comments_Syn_MaybeMExpr :: ([MToken]), Syn_MaybeMExpr -> Maybe MExpr
copy_Syn_MaybeMExpr :: MaybeMExpr, Syn_MaybeMExpr -> Bool
endsWithPrefixExpression_Syn_MaybeMExpr :: Bool, Syn_MaybeMExpr -> Bool
isAssociative_Syn_MaybeMExpr :: Bool, Syn_MaybeMExpr -> Bool
isDefined_Syn_MaybeMExpr :: Bool, Syn_MaybeMExpr -> Bool
isMultiline_Syn_MaybeMExpr :: Bool, Syn_MaybeMExpr -> OperatorLevel
precedence_Syn_MaybeMExpr :: OperatorLevel, Syn_MaybeMExpr -> Doc
pretty_Syn_MaybeMExpr :: Doc}
wrap_MaybeMExpr
  :: T_MaybeMExpr
  -> Inh_MaybeMExpr
  -> Syn_MaybeMExpr
wrap_MaybeMExpr :: T_MaybeMExpr -> Inh_MaybeMExpr -> Syn_MaybeMExpr
wrap_MaybeMExpr T_MaybeMExpr
sem (Inh_MaybeMExpr [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, Maybe MExpr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisDefined, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_MaybeMExpr
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> Maybe MExpr
-> Bool
-> Bool
-> Bool
-> Bool
-> OperatorLevel
-> Doc
-> Syn_MaybeMExpr
Syn_MaybeMExpr [MToken]
_lhsOcomments Maybe MExpr
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Bool
_lhsOisAssociative Bool
_lhsOisDefined Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_MaybeMExpr_Just
  :: T_MExpr
  -> T_MaybeMExpr
sem_MaybeMExpr_Just :: T_MExpr -> T_MaybeMExpr
sem_MaybeMExpr_Just T_MExpr
just_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisDefined :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _justOparentOperatorPrecedence :: OperatorLevel
            _justOparentOperatorAssociative :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: MaybeMExpr
            _lhsOcomments :: ([MToken])
            _justOcomments :: ([MToken])
            _justOforceMultiline :: Bool
            _justOindent :: Int
            _justOppconf :: PrettyPrintConfig
            _justIcomments :: ([MToken])
            _justIcopy :: MExpr
            _justIendsWithPrefixExpression :: Bool
            _justIisAssociative :: Bool
            _justIisLiteral :: Bool
            _justIisMultiline :: Bool
            _justIpos :: Region
            _justIprecedence :: OperatorLevel
            _justIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_justIpretty
              )
            _lhsOisDefined :: Bool
_lhsOisDefined =
              ( Bool
True
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_justIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_justIisMultiline
              )
            _justOparentOperatorPrecedence :: OperatorLevel
_justOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _justOparentOperatorAssociative :: Bool
_justOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_justIisAssociative
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
_justIprecedence
              )
            _copy :: Maybe MExpr
_copy =
              ( forall a. a -> Maybe a
Just MExpr
_justIcopy
              )
            _lhsOcopy :: Maybe MExpr
_lhsOcopy =
              ( Maybe MExpr
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_justIcomments
              )
            _justOcomments :: [MToken]
_justOcomments =
              ( [MToken]
_lhsIcomments
              )
            _justOforceMultiline :: Bool
_justOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _justOindent :: Int
_justOindent =
              ( Int
_lhsIindent
              )
            _justOppconf :: PrettyPrintConfig
_justOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_justIcomments, MExpr
_justIcopy, Bool
_justIendsWithPrefixExpression, Bool
_justIisAssociative, Bool
_justIisLiteral, Bool
_justIisMultiline, Region
_justIpos, OperatorLevel
_justIprecedence, Doc
_justIpretty) =
              T_MExpr
just_ [MToken]
_justOcomments Bool
_justOforceMultiline Int
_justOindent Bool
_justOparentOperatorAssociative OperatorLevel
_justOparentOperatorPrecedence PrettyPrintConfig
_justOppconf
          in
            ([MToken]
_lhsOcomments, Maybe MExpr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisDefined, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_MaybeMExpr_Nothing :: T_MaybeMExpr
sem_MaybeMExpr_Nothing :: T_MaybeMExpr
sem_MaybeMExpr_Nothing =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisDefined :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: MaybeMExpr
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOisDefined :: Bool
_lhsOisDefined =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: Maybe a
_copy =
              ( forall a. Maybe a
Nothing
              )
            _lhsOcopy :: Maybe MExpr
_lhsOcopy =
              ( forall a. Maybe a
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Maybe MExpr
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisAssociative, Bool
_lhsOisDefined, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- PFExprSuffix ------------------------------------------------
-- cata
sem_PFExprSuffix
  :: PFExprSuffix
  -> T_PFExprSuffix
sem_PFExprSuffix :: PFExprSuffix -> T_PFExprSuffix
sem_PFExprSuffix (Call Args
_args) =
  (T_Args -> T_PFExprSuffix
sem_PFExprSuffix_Call (Args -> T_Args
sem_Args Args
_args))
sem_PFExprSuffix (MetaCall MToken
_fn Args
_args) =
  (MToken -> T_Args -> T_PFExprSuffix
sem_PFExprSuffix_MetaCall MToken
_fn (Args -> T_Args
sem_Args Args
_args))
sem_PFExprSuffix (ExprIndex MExpr
_index) =
  (T_MExpr -> T_PFExprSuffix
sem_PFExprSuffix_ExprIndex (MExpr -> T_MExpr
sem_MExpr MExpr
_index))
sem_PFExprSuffix (DotIndex MToken
_index) =
  (MToken -> T_PFExprSuffix
sem_PFExprSuffix_DotIndex MToken
_index)

-- semantic domain
type T_PFExprSuffix =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), PFExprSuffix, Bool, Bool, OperatorLevel, Doc)
data Inh_PFExprSuffix = Inh_PFExprSuffix {Inh_PFExprSuffix -> [MToken]
comments_Inh_PFExprSuffix :: ([MToken]), Inh_PFExprSuffix -> Bool
forceMultiline_Inh_PFExprSuffix :: Bool, Inh_PFExprSuffix -> Int
indent_Inh_PFExprSuffix :: Int, Inh_PFExprSuffix -> PrettyPrintConfig
ppconf_Inh_PFExprSuffix :: PrettyPrintConfig}
data Syn_PFExprSuffix = Syn_PFExprSuffix {Syn_PFExprSuffix -> [MToken]
comments_Syn_PFExprSuffix :: ([MToken]), Syn_PFExprSuffix -> PFExprSuffix
copy_Syn_PFExprSuffix :: PFExprSuffix, Syn_PFExprSuffix -> Bool
isAssociative_Syn_PFExprSuffix :: Bool, Syn_PFExprSuffix -> Bool
isMultiline_Syn_PFExprSuffix :: Bool, Syn_PFExprSuffix -> OperatorLevel
precedence_Syn_PFExprSuffix :: OperatorLevel, Syn_PFExprSuffix -> Doc
pretty_Syn_PFExprSuffix :: Doc}
wrap_PFExprSuffix
  :: T_PFExprSuffix
  -> Inh_PFExprSuffix
  -> Syn_PFExprSuffix
wrap_PFExprSuffix :: T_PFExprSuffix -> Inh_PFExprSuffix -> Syn_PFExprSuffix
wrap_PFExprSuffix T_PFExprSuffix
sem (Inh_PFExprSuffix [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, PFExprSuffix
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty) = T_PFExprSuffix
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> PFExprSuffix
-> Bool
-> Bool
-> OperatorLevel
-> Doc
-> Syn_PFExprSuffix
Syn_PFExprSuffix [MToken]
_lhsOcomments PFExprSuffix
_lhsOcopy Bool
_lhsOisAssociative Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty)
  )
sem_PFExprSuffix_Call
  :: T_Args
  -> T_PFExprSuffix
sem_PFExprSuffix_Call :: T_Args -> T_PFExprSuffix
sem_PFExprSuffix_Call T_Args
args_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: PFExprSuffix
            _lhsOcomments :: ([MToken])
            _argsOcomments :: ([MToken])
            _argsOforceMultiline :: Bool
            _argsOindent :: Int
            _argsOppconf :: PrettyPrintConfig
            _argsIcomments :: ([MToken])
            _argsIcopy :: Args
            _argsIisMultiline :: Bool
            _argsIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_argsIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_argsIisMultiline
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: PFExprSuffix
_copy =
              ( Args -> PFExprSuffix
Call Args
_argsIcopy
              )
            _lhsOcopy :: PFExprSuffix
_lhsOcopy =
              ( PFExprSuffix
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_argsIcomments
              )
            _argsOcomments :: [MToken]
_argsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _argsOforceMultiline :: Bool
_argsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _argsOindent :: Int
_argsOindent =
              ( Int
_lhsIindent
              )
            _argsOppconf :: PrettyPrintConfig
_argsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_argsIcomments, Args
_argsIcopy, Bool
_argsIisMultiline, Doc
_argsIpretty) =
              T_Args
args_ [MToken]
_argsOcomments Bool
_argsOforceMultiline Int
_argsOindent PrettyPrintConfig
_argsOppconf
          in
            ([MToken]
_lhsOcomments, PFExprSuffix
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_PFExprSuffix_MetaCall
  :: MToken
  -> T_Args
  -> T_PFExprSuffix
sem_PFExprSuffix_MetaCall :: MToken -> T_Args -> T_PFExprSuffix
sem_PFExprSuffix_MetaCall MToken
fn_ T_Args
args_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: PFExprSuffix
            _lhsOcomments :: ([MToken])
            _argsOcomments :: ([MToken])
            _argsOforceMultiline :: Bool
            _argsOindent :: Int
            _argsOppconf :: PrettyPrintConfig
            _argsIcomments :: ([MToken])
            _argsIcopy :: Args
            _argsIisMultiline :: Bool
            _argsIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Char -> Doc
zchr Char
':' Doc -> Doc -> Doc
<> MToken -> Doc
tok MToken
fn_ Doc -> Doc -> Doc
<> Doc
_argsIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_argsIisMultiline
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: PFExprSuffix
_copy =
              ( MToken -> Args -> PFExprSuffix
MetaCall MToken
fn_ Args
_argsIcopy
              )
            _lhsOcopy :: PFExprSuffix
_lhsOcopy =
              ( PFExprSuffix
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_argsIcomments
              )
            _argsOcomments :: [MToken]
_argsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _argsOforceMultiline :: Bool
_argsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _argsOindent :: Int
_argsOindent =
              ( Int
_lhsIindent
              )
            _argsOppconf :: PrettyPrintConfig
_argsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_argsIcomments, Args
_argsIcopy, Bool
_argsIisMultiline, Doc
_argsIpretty) =
              T_Args
args_ [MToken]
_argsOcomments Bool
_argsOforceMultiline Int
_argsOindent PrettyPrintConfig
_argsOppconf
          in
            ([MToken]
_lhsOcomments, PFExprSuffix
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_PFExprSuffix_ExprIndex
  :: T_MExpr
  -> T_PFExprSuffix
sem_PFExprSuffix_ExprIndex :: T_MExpr -> T_PFExprSuffix
sem_PFExprSuffix_ExprIndex T_MExpr
index_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _indexOparentOperatorPrecedence :: OperatorLevel
            _indexOparentOperatorAssociative :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: PFExprSuffix
            _lhsOcomments :: ([MToken])
            _indexOcomments :: ([MToken])
            _indexOforceMultiline :: Bool
            _indexOindent :: Int
            _indexOppconf :: PrettyPrintConfig
            _indexIcomments :: ([MToken])
            _indexIcopy :: MExpr
            _indexIendsWithPrefixExpression :: Bool
            _indexIisAssociative :: Bool
            _indexIisLiteral :: Bool
            _indexIisMultiline :: Bool
            _indexIpos :: Region
            _indexIprecedence :: OperatorLevel
            _indexIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( PrettyPrintConfig -> Doc -> Doc
brackets PrettyPrintConfig
_lhsIppconf Doc
_indexIpretty
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_indexIisMultiline
              )
            _indexOparentOperatorPrecedence :: OperatorLevel
_indexOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _indexOparentOperatorAssociative :: Bool
_indexOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_indexIisAssociative
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
_indexIprecedence
              )
            _copy :: PFExprSuffix
_copy =
              ( MExpr -> PFExprSuffix
ExprIndex MExpr
_indexIcopy
              )
            _lhsOcopy :: PFExprSuffix
_lhsOcopy =
              ( PFExprSuffix
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_indexIcomments
              )
            _indexOcomments :: [MToken]
_indexOcomments =
              ( [MToken]
_lhsIcomments
              )
            _indexOforceMultiline :: Bool
_indexOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _indexOindent :: Int
_indexOindent =
              ( Int
_lhsIindent
              )
            _indexOppconf :: PrettyPrintConfig
_indexOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_indexIcomments, MExpr
_indexIcopy, Bool
_indexIendsWithPrefixExpression, Bool
_indexIisAssociative, Bool
_indexIisLiteral, Bool
_indexIisMultiline, Region
_indexIpos, OperatorLevel
_indexIprecedence, Doc
_indexIpretty) =
              T_MExpr
index_ [MToken]
_indexOcomments Bool
_indexOforceMultiline Int
_indexOindent Bool
_indexOparentOperatorAssociative OperatorLevel
_indexOparentOperatorPrecedence PrettyPrintConfig
_indexOppconf
          in
            ([MToken]
_lhsOcomments, PFExprSuffix
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )
sem_PFExprSuffix_DotIndex
  :: MToken
  -> T_PFExprSuffix
sem_PFExprSuffix_DotIndex :: MToken -> T_PFExprSuffix
sem_PFExprSuffix_DotIndex MToken
index_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: PFExprSuffix
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Char -> Doc
zchr Char
'.' Doc -> Doc -> Doc
<> MToken -> Doc
tok MToken
index_
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
False
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
OperatorLevel8
              )
            _copy :: PFExprSuffix
_copy =
              ( MToken -> PFExprSuffix
DotIndex MToken
index_
              )
            _lhsOcopy :: PFExprSuffix
_lhsOcopy =
              ( PFExprSuffix
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, PFExprSuffix
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty)
        )
  )

-- PrefixExp ---------------------------------------------------
-- cata
sem_PrefixExp
  :: PrefixExp
  -> T_PrefixExp
sem_PrefixExp :: PrefixExp -> T_PrefixExp
sem_PrefixExp (PFVar MToken
_name ExprSuffixList
_suffixes) =
  (MToken -> T_ExprSuffixList -> T_PrefixExp
sem_PrefixExp_PFVar MToken
_name (ExprSuffixList -> T_ExprSuffixList
sem_ExprSuffixList ExprSuffixList
_suffixes))
sem_PrefixExp (ExprVar MExpr
_expr ExprSuffixList
_suffixes) =
  (T_MExpr -> T_ExprSuffixList -> T_PrefixExp
sem_PrefixExp_ExprVar (MExpr -> T_MExpr
sem_MExpr MExpr
_expr) (ExprSuffixList -> T_ExprSuffixList
sem_ExprSuffixList ExprSuffixList
_suffixes))

-- semantic domain
type T_PrefixExp =
  ([MToken])
  -> Bool
  -> Int
  -> Bool
  -> OperatorLevel
  -> PrettyPrintConfig
  -> (([MToken]), PrefixExp, Bool, Bool, Bool, OperatorLevel, Doc, Bool)
data Inh_PrefixExp = Inh_PrefixExp {Inh_PrefixExp -> [MToken]
comments_Inh_PrefixExp :: ([MToken]), Inh_PrefixExp -> Bool
forceMultiline_Inh_PrefixExp :: Bool, Inh_PrefixExp -> Int
indent_Inh_PrefixExp :: Int, Inh_PrefixExp -> Bool
parentOperatorAssociative_Inh_PrefixExp :: Bool, Inh_PrefixExp -> OperatorLevel
parentOperatorPrecedence_Inh_PrefixExp :: OperatorLevel, Inh_PrefixExp -> PrettyPrintConfig
ppconf_Inh_PrefixExp :: PrettyPrintConfig}
data Syn_PrefixExp = Syn_PrefixExp {Syn_PrefixExp -> [MToken]
comments_Syn_PrefixExp :: ([MToken]), Syn_PrefixExp -> PrefixExp
copy_Syn_PrefixExp :: PrefixExp, Syn_PrefixExp -> Bool
isAssociative_Syn_PrefixExp :: Bool, Syn_PrefixExp -> Bool
isLiteral_Syn_PrefixExp :: Bool, Syn_PrefixExp -> Bool
isMultiline_Syn_PrefixExp :: Bool, Syn_PrefixExp -> OperatorLevel
precedence_Syn_PrefixExp :: OperatorLevel, Syn_PrefixExp -> Doc
pretty_Syn_PrefixExp :: Doc, Syn_PrefixExp -> Bool
startsWithExprPrefixExpression_Syn_PrefixExp :: Bool}
wrap_PrefixExp
  :: T_PrefixExp
  -> Inh_PrefixExp
  -> Syn_PrefixExp
wrap_PrefixExp :: T_PrefixExp -> Inh_PrefixExp -> Syn_PrefixExp
wrap_PrefixExp T_PrefixExp
sem (Inh_PrefixExp [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, PrefixExp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression) = T_PrefixExp
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIparentOperatorAssociative OperatorLevel
_lhsIparentOperatorPrecedence PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> PrefixExp
-> Bool
-> Bool
-> Bool
-> OperatorLevel
-> Doc
-> Bool
-> Syn_PrefixExp
Syn_PrefixExp [MToken]
_lhsOcomments PrefixExp
_lhsOcopy Bool
_lhsOisAssociative Bool
_lhsOisLiteral Bool
_lhsOisMultiline OperatorLevel
_lhsOprecedence Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression)
  )
sem_PrefixExp_PFVar
  :: MToken
  -> T_ExprSuffixList
  -> T_PrefixExp
sem_PrefixExp_PFVar :: MToken -> T_ExprSuffixList -> T_PrefixExp
sem_PrefixExp_PFVar MToken
name_ T_ExprSuffixList
suffixes_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisLiteral :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOprecedence :: OperatorLevel
            _lhsOcopy :: PrefixExp
            _lhsOcomments :: ([MToken])
            _suffixesOcomments :: ([MToken])
            _suffixesOforceMultiline :: Bool
            _suffixesOindent :: Int
            _suffixesOppconf :: PrettyPrintConfig
            _suffixesIcomments :: ([MToken])
            _suffixesIcopy :: ExprSuffixList
            _suffixesIisAssociative :: Bool
            _suffixesIisMultiline :: Bool
            _suffixesIprecedence :: OperatorLevel
            _suffixesIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( MToken -> Doc
tok MToken
name_ Doc -> Doc -> Doc
<> Doc
_suffixesIpretty
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
False
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_suffixesIisMultiline
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_suffixesIisAssociative
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( OperatorLevel
_suffixesIprecedence
              )
            _copy :: PrefixExp
_copy =
              ( MToken -> ExprSuffixList -> PrefixExp
PFVar MToken
name_ ExprSuffixList
_suffixesIcopy
              )
            _lhsOcopy :: PrefixExp
_lhsOcopy =
              ( PrefixExp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_suffixesIcomments
              )
            _suffixesOcomments :: [MToken]
_suffixesOcomments =
              ( [MToken]
_lhsIcomments
              )
            _suffixesOforceMultiline :: Bool
_suffixesOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _suffixesOindent :: Int
_suffixesOindent =
              ( Int
_lhsIindent
              )
            _suffixesOppconf :: PrettyPrintConfig
_suffixesOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_suffixesIcomments, ExprSuffixList
_suffixesIcopy, Bool
_suffixesIisAssociative, Bool
_suffixesIisMultiline, OperatorLevel
_suffixesIprecedence, Doc
_suffixesIpretty) =
              T_ExprSuffixList
suffixes_ [MToken]
_suffixesOcomments Bool
_suffixesOforceMultiline Int
_suffixesOindent PrettyPrintConfig
_suffixesOppconf
          in
            ([MToken]
_lhsOcomments, PrefixExp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_PrefixExp_ExprVar
  :: T_MExpr
  -> T_ExprSuffixList
  -> T_PrefixExp
sem_PrefixExp_ExprVar :: T_MExpr -> T_ExprSuffixList -> T_PrefixExp
sem_PrefixExp_ExprVar T_MExpr
expr_ T_ExprSuffixList
suffixes_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIparentOperatorAssociative
     OperatorLevel
_lhsIparentOperatorPrecedence
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOprecedence :: OperatorLevel
            _lhsOisLiteral :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisAssociative :: Bool
            _lhsOcopy :: PrefixExp
            _lhsOcomments :: ([MToken])
            _exprOcomments :: ([MToken])
            _exprOforceMultiline :: Bool
            _exprOindent :: Int
            _exprOparentOperatorAssociative :: Bool
            _exprOparentOperatorPrecedence :: OperatorLevel
            _exprOppconf :: PrettyPrintConfig
            _suffixesOcomments :: ([MToken])
            _suffixesOforceMultiline :: Bool
            _suffixesOindent :: Int
            _suffixesOppconf :: PrettyPrintConfig
            _exprIcomments :: ([MToken])
            _exprIcopy :: MExpr
            _exprIendsWithPrefixExpression :: Bool
            _exprIisAssociative :: Bool
            _exprIisLiteral :: Bool
            _exprIisMultiline :: Bool
            _exprIpos :: Region
            _exprIprecedence :: OperatorLevel
            _exprIpretty :: Doc
            _suffixesIcomments :: ([MToken])
            _suffixesIcopy :: ExprSuffixList
            _suffixesIisAssociative :: Bool
            _suffixesIisMultiline :: Bool
            _suffixesIprecedence :: OperatorLevel
            _suffixesIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( (if Bool
_noparens then Doc
_exprIpretty else PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
NonEmpty Doc
_exprIpretty)
                  Doc -> Doc -> Doc
<> Doc
_suffixesIpretty
              )
            _lhsOprecedence :: OperatorLevel
_lhsOprecedence =
              ( if Bool
_noparens then OperatorLevel
_exprIprecedence else OperatorLevel
OperatorLevel8
              )
            _lhsOisLiteral :: Bool
_lhsOisLiteral =
              ( Bool
False
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
True
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_exprIisMultiline Bool -> Bool -> Bool
|| Bool
_suffixesIisMultiline
              )
            _containsParenthesizedExpr :: Bool
_containsParenthesizedExpr =
              ( case MExpr
_exprIcopy of
                  MExpr Region
_ (APrefixExpr (ExprVar (MExpr Region
_ Expr
AVarArg) ExprSuffixList
_)) -> Bool
False
                  MExpr Region
_ (APrefixExpr PrefixExp
_) -> Bool
True
                  MExpr
_ -> Bool
False
              )
            _noparens :: Bool
_noparens =
              ( (PrettyPrintConfig -> Bool
removeRedundantParens PrettyPrintConfig
_lhsIppconf Bool -> Bool -> Bool
|| PrettyPrintConfig -> Bool
minimizeParens PrettyPrintConfig
_lhsIppconf)
                  Bool -> Bool -> Bool
&& ( Bool
_containsParenthesizedExpr
                        Bool -> Bool -> Bool
|| (OperatorLevel
_lhsIparentOperatorPrecedence forall a. Eq a => a -> a -> Bool
== OperatorLevel
TopLevelExpression Bool -> Bool -> Bool
|| Bool
_exprIisLiteral)
                          Bool -> Bool -> Bool
&& forall (t :: * -> *) a. Foldable t => t a -> Int
length ExprSuffixList
_suffixesIcopy forall a. Eq a => a -> a -> Bool
== Int
0
                     )
                  Bool -> Bool -> Bool
|| ( PrettyPrintConfig -> Bool
minimizeParens PrettyPrintConfig
_lhsIppconf
                        Bool -> Bool -> Bool
&& forall (t :: * -> *) a. Foldable t => t a -> Int
length ExprSuffixList
_suffixesIcopy forall a. Eq a => a -> a -> Bool
== Int
0
                        Bool -> Bool -> Bool
&& ( OperatorLevel
_lhsIparentOperatorPrecedence forall a. Ord a => a -> a -> Bool
< OperatorLevel
_exprIprecedence
                              Bool -> Bool -> Bool
|| PrettyPrintConfig -> Bool
assumeOperatorAssociativity PrettyPrintConfig
_lhsIppconf
                                Bool -> Bool -> Bool
&& OperatorLevel
_lhsIparentOperatorPrecedence forall a. Eq a => a -> a -> Bool
== OperatorLevel
_exprIprecedence
                                Bool -> Bool -> Bool
&& Bool
_lhsIparentOperatorAssociative
                           )
                     )
              )
            _lhsOisAssociative :: Bool
_lhsOisAssociative =
              ( Bool
_exprIisAssociative Bool -> Bool -> Bool
&& Bool
_suffixesIisAssociative
              )
            _copy :: PrefixExp
_copy =
              ( MExpr -> ExprSuffixList -> PrefixExp
ExprVar MExpr
_exprIcopy ExprSuffixList
_suffixesIcopy
              )
            _lhsOcopy :: PrefixExp
_lhsOcopy =
              ( PrefixExp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_suffixesIcomments
              )
            _exprOcomments :: [MToken]
_exprOcomments =
              ( [MToken]
_lhsIcomments
              )
            _exprOforceMultiline :: Bool
_exprOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _exprOindent :: Int
_exprOindent =
              ( Int
_lhsIindent
              )
            _exprOparentOperatorAssociative :: Bool
_exprOparentOperatorAssociative =
              ( Bool
_lhsIparentOperatorAssociative
              )
            _exprOparentOperatorPrecedence :: OperatorLevel
_exprOparentOperatorPrecedence =
              ( OperatorLevel
_lhsIparentOperatorPrecedence
              )
            _exprOppconf :: PrettyPrintConfig
_exprOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _suffixesOcomments :: [MToken]
_suffixesOcomments =
              ( [MToken]
_exprIcomments
              )
            _suffixesOforceMultiline :: Bool
_suffixesOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _suffixesOindent :: Int
_suffixesOindent =
              ( Int
_lhsIindent
              )
            _suffixesOppconf :: PrettyPrintConfig
_suffixesOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_exprIcomments, MExpr
_exprIcopy, Bool
_exprIendsWithPrefixExpression, Bool
_exprIisAssociative, Bool
_exprIisLiteral, Bool
_exprIisMultiline, Region
_exprIpos, OperatorLevel
_exprIprecedence, Doc
_exprIpretty) =
              T_MExpr
expr_ [MToken]
_exprOcomments Bool
_exprOforceMultiline Int
_exprOindent Bool
_exprOparentOperatorAssociative OperatorLevel
_exprOparentOperatorPrecedence PrettyPrintConfig
_exprOppconf
            ([MToken]
_suffixesIcomments, ExprSuffixList
_suffixesIcopy, Bool
_suffixesIisAssociative, Bool
_suffixesIisMultiline, OperatorLevel
_suffixesIprecedence, Doc
_suffixesIpretty) =
              T_ExprSuffixList
suffixes_ [MToken]
_suffixesOcomments Bool
_suffixesOforceMultiline Int
_suffixesOindent PrettyPrintConfig
_suffixesOppconf
          in
            ([MToken]
_lhsOcomments, PrefixExp
_lhsOcopy, Bool
_lhsOisAssociative, Bool
_lhsOisLiteral, Bool
_lhsOisMultiline, OperatorLevel
_lhsOprecedence, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )

-- Stat --------------------------------------------------------
-- cata
sem_Stat
  :: Stat
  -> T_Stat
sem_Stat :: Stat -> T_Stat
sem_Stat (Def [(PrefixExp, Maybe MExpr)]
_vars) =
  (T_VarsList -> T_Stat
sem_Stat_Def ([(PrefixExp, Maybe MExpr)] -> T_VarsList
sem_VarsList [(PrefixExp, Maybe MExpr)]
_vars))
sem_Stat (LocDef [(PrefixExp, Maybe MExpr)]
_vars) =
  (T_VarsList -> T_Stat
sem_Stat_LocDef ([(PrefixExp, Maybe MExpr)] -> T_VarsList
sem_VarsList [(PrefixExp, Maybe MExpr)]
_vars))
sem_Stat (AFuncCall PrefixExp
_fn) =
  (T_PrefixExp -> T_Stat
sem_Stat_AFuncCall (PrefixExp -> T_PrefixExp
sem_PrefixExp PrefixExp
_fn))
sem_Stat (ALabel MToken
_lbl) =
  (MToken -> T_Stat
sem_Stat_ALabel MToken
_lbl)
sem_Stat (Stat
ABreak) =
  (T_Stat
sem_Stat_ABreak)
sem_Stat (Stat
AContinue) =
  (T_Stat
sem_Stat_AContinue)
sem_Stat (AGoto MToken
_lbl) =
  (MToken -> T_Stat
sem_Stat_AGoto MToken
_lbl)
sem_Stat (ADo Block
_body) =
  (T_Block -> T_Stat
sem_Stat_ADo (Block -> T_Block
sem_Block Block
_body))
sem_Stat (AWhile MExpr
_cond Block
_body) =
  (T_MExpr -> T_Block -> T_Stat
sem_Stat_AWhile (MExpr -> T_MExpr
sem_MExpr MExpr
_cond) (Block -> T_Block
sem_Block Block
_body))
sem_Stat (ARepeat Block
_body MExpr
_cond) =
  (T_Block -> T_MExpr -> T_Stat
sem_Stat_ARepeat (Block -> T_Block
sem_Block Block
_body) (MExpr -> T_MExpr
sem_MExpr MExpr
_cond))
sem_Stat (AIf MExpr
_cond Block
_body ElseIfList
_elifs Else
_els) =
  (T_MExpr -> T_Block -> T_ElseIfList -> T_Else -> T_Stat
sem_Stat_AIf (MExpr -> T_MExpr
sem_MExpr MExpr
_cond) (Block -> T_Block
sem_Block Block
_body) (ElseIfList -> T_ElseIfList
sem_ElseIfList ElseIfList
_elifs) (Else -> T_Else
sem_Else Else
_els))
sem_Stat (ANFor MToken
_var MExpr
_val MExpr
_to MExpr
_step Block
_body) =
  (MToken -> T_MExpr -> T_MExpr -> T_MExpr -> T_Block -> T_Stat
sem_Stat_ANFor MToken
_var (MExpr -> T_MExpr
sem_MExpr MExpr
_val) (MExpr -> T_MExpr
sem_MExpr MExpr
_to) (MExpr -> T_MExpr
sem_MExpr MExpr
_step) (Block -> T_Block
sem_Block Block
_body))
sem_Stat (AGFor [MToken]
_vars [MExpr]
_vals Block
_body) =
  ([MToken] -> T_MExprList -> T_Block -> T_Stat
sem_Stat_AGFor [MToken]
_vars ([MExpr] -> T_MExprList
sem_MExprList [MExpr]
_vals) (Block -> T_Block
sem_Block Block
_body))
sem_Stat (AFunc FuncName
_name [MToken]
_args Block
_body) =
  (T_FuncName -> [MToken] -> T_Block -> T_Stat
sem_Stat_AFunc (FuncName -> T_FuncName
sem_FuncName FuncName
_name) [MToken]
_args (Block -> T_Block
sem_Block Block
_body))
sem_Stat (ALocFunc FuncName
_name [MToken]
_args Block
_body) =
  (T_FuncName -> [MToken] -> T_Block -> T_Stat
sem_Stat_ALocFunc (FuncName -> T_FuncName
sem_FuncName FuncName
_name) [MToken]
_args (Block -> T_Block
sem_Block Block
_body))

-- semantic domain
type T_Stat =
  ([MToken])
  -> Bool
  -> Int
  -> Bool
  -> PrettyPrintConfig
  -> Region
  -> Bool
  -> (([MToken]), Stat, Bool, Bool, Doc, Bool)
data Inh_Stat = Inh_Stat {Inh_Stat -> [MToken]
comments_Inh_Stat :: ([MToken]), Inh_Stat -> Bool
forceMultiline_Inh_Stat :: Bool, Inh_Stat -> Int
indent_Inh_Stat :: Int, Inh_Stat -> Bool
isLastStatement_Inh_Stat :: Bool, Inh_Stat -> PrettyPrintConfig
ppconf_Inh_Stat :: PrettyPrintConfig, Inh_Stat -> Region
statRegion_Inh_Stat :: Region, Inh_Stat -> Bool
wouldBeAmbiguousWithoutSemicolon_Inh_Stat :: Bool}
data Syn_Stat = Syn_Stat {Syn_Stat -> [MToken]
comments_Syn_Stat :: ([MToken]), Syn_Stat -> Stat
copy_Syn_Stat :: Stat, Syn_Stat -> Bool
endsWithPrefixExpression_Syn_Stat :: Bool, Syn_Stat -> Bool
isMultiline_Syn_Stat :: Bool, Syn_Stat -> Doc
pretty_Syn_Stat :: Doc, Syn_Stat -> Bool
startsWithExprPrefixExpression_Syn_Stat :: Bool}
wrap_Stat
  :: T_Stat
  -> Inh_Stat
  -> Syn_Stat
wrap_Stat :: T_Stat -> Inh_Stat -> Syn_Stat
wrap_Stat T_Stat
sem (Inh_Stat [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIisLastStatement PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion Bool
_lhsIwouldBeAmbiguousWithoutSemicolon) =
  ( let
      ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression) = T_Stat
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent Bool
_lhsIisLastStatement PrettyPrintConfig
_lhsIppconf Region
_lhsIstatRegion Bool
_lhsIwouldBeAmbiguousWithoutSemicolon
    in
      ([MToken] -> Stat -> Bool -> Bool -> Doc -> Bool -> Syn_Stat
Syn_Stat [MToken]
_lhsOcomments Stat
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Bool
_lhsOisMultiline Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression)
  )
sem_Stat_Def
  :: T_VarsList
  -> T_Stat
sem_Stat_Def :: T_VarsList -> T_Stat
sem_Stat_Def T_VarsList
vars_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _varsOcomments :: ([MToken])
            _varsOforceMultiline :: Bool
            _varsOindent :: Int
            _varsOppconf :: PrettyPrintConfig
            _varsIcomments :: ([MToken])
            _varsIcopy :: VarsList
            _varsIendsWithPrefixExpression :: Bool
            _varsIexprPretty :: Doc
            _varsIisDefined :: Bool
            _varsIisLast :: Bool
            _varsIisMultiline :: Bool
            _varsIpretty :: Doc
            _varsIstartsWithExprPrefixExpression :: Bool
            _varsIvarPretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_varsIpretty Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_varsIstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_varsIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_varsIisMultiline
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf Bool -> Bool -> Bool
|| Bool
_lhsIwouldBeAmbiguousWithoutSemicolon
                  then Char -> Doc
zchr Char
';'
                  else Doc
empty
              )
            _copy :: Stat
_copy =
              ( [(PrefixExp, Maybe MExpr)] -> Stat
Def [(PrefixExp, Maybe MExpr)]
_varsIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_varsIcomments
              )
            _varsOcomments :: [MToken]
_varsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _varsOforceMultiline :: Bool
_varsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _varsOindent :: Int
_varsOindent =
              ( Int
_lhsIindent
              )
            _varsOppconf :: PrettyPrintConfig
_varsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_varsIcomments, [(PrefixExp, Maybe MExpr)]
_varsIcopy, Bool
_varsIendsWithPrefixExpression, Doc
_varsIexprPretty, Bool
_varsIisDefined, Bool
_varsIisLast, Bool
_varsIisMultiline, Doc
_varsIpretty, Bool
_varsIstartsWithExprPrefixExpression, Doc
_varsIvarPretty) =
              T_VarsList
vars_ [MToken]
_varsOcomments Bool
_varsOforceMultiline Int
_varsOindent PrettyPrintConfig
_varsOppconf
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_LocDef
  :: T_VarsList
  -> T_Stat
sem_Stat_LocDef :: T_VarsList -> T_Stat
sem_Stat_LocDef T_VarsList
vars_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _varsOcomments :: ([MToken])
            _varsOforceMultiline :: Bool
            _varsOindent :: Int
            _varsOppconf :: PrettyPrintConfig
            _varsIcomments :: ([MToken])
            _varsIcopy :: VarsList
            _varsIendsWithPrefixExpression :: Bool
            _varsIexprPretty :: Doc
            _varsIisDefined :: Bool
            _varsIisLast :: Bool
            _varsIisMultiline :: Bool
            _varsIpretty :: Doc
            _varsIstartsWithExprPrefixExpression :: Bool
            _varsIvarPretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"local" Doc -> Doc -> Doc
<-> Doc
_varsIpretty Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_varsIstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
_varsIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_varsIisMultiline
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf Bool -> Bool -> Bool
|| Bool
_lhsIwouldBeAmbiguousWithoutSemicolon
                  then Char -> Doc
zchr Char
';'
                  else Doc
empty
              )
            _copy :: Stat
_copy =
              ( [(PrefixExp, Maybe MExpr)] -> Stat
LocDef [(PrefixExp, Maybe MExpr)]
_varsIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_varsIcomments
              )
            _varsOcomments :: [MToken]
_varsOcomments =
              ( [MToken]
_lhsIcomments
              )
            _varsOforceMultiline :: Bool
_varsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _varsOindent :: Int
_varsOindent =
              ( Int
_lhsIindent
              )
            _varsOppconf :: PrettyPrintConfig
_varsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_varsIcomments, [(PrefixExp, Maybe MExpr)]
_varsIcopy, Bool
_varsIendsWithPrefixExpression, Doc
_varsIexprPretty, Bool
_varsIisDefined, Bool
_varsIisLast, Bool
_varsIisMultiline, Doc
_varsIpretty, Bool
_varsIstartsWithExprPrefixExpression, Doc
_varsIvarPretty) =
              T_VarsList
vars_ [MToken]
_varsOcomments Bool
_varsOforceMultiline Int
_varsOindent PrettyPrintConfig
_varsOppconf
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AFuncCall
  :: T_PrefixExp
  -> T_Stat
sem_Stat_AFuncCall :: T_PrefixExp -> T_Stat
sem_Stat_AFuncCall T_PrefixExp
fn_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _fnOparentOperatorPrecedence :: OperatorLevel
            _fnOparentOperatorAssociative :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _fnOcomments :: ([MToken])
            _fnOforceMultiline :: Bool
            _fnOindent :: Int
            _fnOppconf :: PrettyPrintConfig
            _fnIcomments :: ([MToken])
            _fnIcopy :: PrefixExp
            _fnIisAssociative :: Bool
            _fnIisLiteral :: Bool
            _fnIisMultiline :: Bool
            _fnIprecedence :: OperatorLevel
            _fnIpretty :: Doc
            _fnIstartsWithExprPrefixExpression :: Bool
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_fnIpretty Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_fnIisMultiline
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
';' else Doc
empty
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_fnIstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
True
              )
            _fnOparentOperatorPrecedence :: OperatorLevel
_fnOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _fnOparentOperatorAssociative :: Bool
_fnOparentOperatorAssociative =
              ( Bool
True
              )
            _copy :: Stat
_copy =
              ( PrefixExp -> Stat
AFuncCall PrefixExp
_fnIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_fnIcomments
              )
            _fnOcomments :: [MToken]
_fnOcomments =
              ( [MToken]
_lhsIcomments
              )
            _fnOforceMultiline :: Bool
_fnOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _fnOindent :: Int
_fnOindent =
              ( Int
_lhsIindent
              )
            _fnOppconf :: PrettyPrintConfig
_fnOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_fnIcomments, PrefixExp
_fnIcopy, Bool
_fnIisAssociative, Bool
_fnIisLiteral, Bool
_fnIisMultiline, OperatorLevel
_fnIprecedence, Doc
_fnIpretty, Bool
_fnIstartsWithExprPrefixExpression) =
              T_PrefixExp
fn_ [MToken]
_fnOcomments Bool
_fnOforceMultiline Int
_fnOindent Bool
_fnOparentOperatorAssociative OperatorLevel
_fnOparentOperatorPrecedence PrettyPrintConfig
_fnOppconf
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ALabel
  :: MToken
  -> T_Stat
sem_Stat_ALabel :: MToken -> T_Stat
sem_Stat_ALabel MToken
lbl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"::"
                  Doc -> Doc -> Doc
<> Doc
_whitespace
                  Doc -> Doc -> Doc
<> MToken -> Doc
tok MToken
lbl_
                  Doc -> Doc -> Doc
<> Doc
_whitespace
                  Doc -> Doc -> Doc
<> String -> Doc
zeroWidthText String
"::"
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _whitespace :: Doc
_whitespace =
              ( if PrettyPrintConfig -> Bool
spaceAfterLabel PrettyPrintConfig
_lhsIppconf then String -> Doc
zeroWidthText String
" " else Doc
empty
              )
            _copy :: Stat
_copy =
              ( MToken -> Stat
ALabel MToken
lbl_
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ABreak :: T_Stat
sem_Stat_ABreak :: T_Stat
sem_Stat_ABreak =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"break" Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
';' else Doc
empty
              )
            _copy :: Stat
_copy =
              ( Stat
ABreak
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AContinue :: T_Stat
sem_Stat_AContinue :: T_Stat
sem_Stat_AContinue =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"continue" Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
';' else Doc
empty
              )
            _copy :: Stat
_copy =
              ( Stat
AContinue
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AGoto
  :: MToken
  -> T_Stat
sem_Stat_AGoto :: MToken -> T_Stat
sem_Stat_AGoto MToken
lbl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"goto" Doc -> Doc -> Doc
<-> MToken -> Doc
tok MToken
lbl_ Doc -> Doc -> Doc
<> Doc
_semicolon
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _semicolon :: Doc
_semicolon =
              ( if PrettyPrintConfig -> Bool
semicolons PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
';' else Doc
empty
              )
            _copy :: Stat
_copy =
              ( MToken -> Stat
AGoto MToken
lbl_
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ADo
  :: T_Block
  -> T_Stat
sem_Stat_ADo :: T_Block -> T_Stat
sem_Stat_ADo T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _bodyOindent :: Int
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"do"
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _copy :: Stat
_copy =
              ( Block -> Stat
ADo Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_lhsIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AWhile
  :: T_MExpr
  -> T_Block
  -> T_Stat
sem_Stat_AWhile :: T_MExpr -> T_Block -> T_Stat
sem_Stat_AWhile T_MExpr
cond_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _condOparentOperatorPrecedence :: OperatorLevel
            _condOparentOperatorAssociative :: Bool
            _lhsOpretty :: Doc
            _bodyOindent :: Int
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _condOcomments :: ([MToken])
            _condOforceMultiline :: Bool
            _condOindent :: Int
            _condOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _condIcomments :: ([MToken])
            _condIcopy :: MExpr
            _condIendsWithPrefixExpression :: Bool
            _condIisAssociative :: Bool
            _condIisLiteral :: Bool
            _condIisMultiline :: Bool
            _condIpos :: Region
            _condIprecedence :: OperatorLevel
            _condIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _condOparentOperatorPrecedence :: OperatorLevel
_condOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _condOparentOperatorAssociative :: Bool
_condOparentOperatorAssociative =
              ( Bool
True
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"while"
                  Doc -> Doc -> Doc
<-> Doc
_condIpretty
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"do"
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _copy :: Stat
_copy =
              ( MExpr -> Block -> Stat
AWhile MExpr
_condIcopy Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _condOcomments :: [MToken]
_condOcomments =
              ( [MToken]
_lhsIcomments
              )
            _condOforceMultiline :: Bool
_condOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _condOindent :: Int
_condOindent =
              ( Int
_lhsIindent
              )
            _condOppconf :: PrettyPrintConfig
_condOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_condIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_condIcomments, MExpr
_condIcopy, Bool
_condIendsWithPrefixExpression, Bool
_condIisAssociative, Bool
_condIisLiteral, Bool
_condIisMultiline, Region
_condIpos, OperatorLevel
_condIprecedence, Doc
_condIpretty) =
              T_MExpr
cond_ [MToken]
_condOcomments Bool
_condOforceMultiline Int
_condOindent Bool
_condOparentOperatorAssociative OperatorLevel
_condOparentOperatorPrecedence PrettyPrintConfig
_condOppconf
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ARepeat
  :: T_Block
  -> T_MExpr
  -> T_Stat
sem_Stat_ARepeat :: T_Block -> T_MExpr -> T_Stat
sem_Stat_ARepeat T_Block
body_ T_MExpr
cond_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _bodyOindent :: Int
            _condOparentOperatorPrecedence :: OperatorLevel
            _condOparentOperatorAssociative :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _condOcomments :: ([MToken])
            _condOforceMultiline :: Bool
            _condOindent :: Int
            _condOppconf :: PrettyPrintConfig
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _condIcomments :: ([MToken])
            _condIcopy :: MExpr
            _condIendsWithPrefixExpression :: Bool
            _condIisAssociative :: Bool
            _condIisLiteral :: Bool
            _condIisMultiline :: Bool
            _condIpos :: Region
            _condIprecedence :: OperatorLevel
            _condIpretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"repeat"
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"until" Doc -> Doc -> Doc
<-> Doc
_condIpretty)
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _condOparentOperatorPrecedence :: OperatorLevel
_condOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _condOparentOperatorAssociative :: Bool
_condOparentOperatorAssociative =
              ( Bool
True
              )
            _copy :: Stat
_copy =
              ( Block -> MExpr -> Stat
ARepeat Block
_bodyIcopy MExpr
_condIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_condIcomments
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_lhsIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            _condOcomments :: [MToken]
_condOcomments =
              ( [MToken]
_bodyIcomments
              )
            _condOforceMultiline :: Bool
_condOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _condOindent :: Int
_condOindent =
              ( Int
_lhsIindent
              )
            _condOppconf :: PrettyPrintConfig
_condOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
            ([MToken]
_condIcomments, MExpr
_condIcopy, Bool
_condIendsWithPrefixExpression, Bool
_condIisAssociative, Bool
_condIisLiteral, Bool
_condIisMultiline, Region
_condIpos, OperatorLevel
_condIprecedence, Doc
_condIpretty) =
              T_MExpr
cond_ [MToken]
_condOcomments Bool
_condOforceMultiline Int
_condOindent Bool
_condOparentOperatorAssociative OperatorLevel
_condOparentOperatorPrecedence PrettyPrintConfig
_condOppconf
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AIf
  :: T_MExpr
  -> T_Block
  -> T_ElseIfList
  -> T_Else
  -> T_Stat
sem_Stat_AIf :: T_MExpr -> T_Block -> T_ElseIfList -> T_Else -> T_Stat
sem_Stat_AIf T_MExpr
cond_ T_Block
body_ T_ElseIfList
elifs_ T_Else
els_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _condOcomments :: ([MToken])
            _condOparentOperatorPrecedence :: OperatorLevel
            _condOparentOperatorAssociative :: Bool
            _bodyOindent :: Int
            _bodyOstatRegion :: Region
            _lhsOpretty :: Doc
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _lhsOisMultiline :: Bool
            _condOforceMultiline :: Bool
            _condOindent :: Int
            _condOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _elifsOcomments :: ([MToken])
            _elifsOforceMultiline :: Bool
            _elifsOindent :: Int
            _elifsOppconf :: PrettyPrintConfig
            _elsOcomments :: ([MToken])
            _elsOforceMultiline :: Bool
            _elsOindent :: Int
            _elsOppconf :: PrettyPrintConfig
            _elsOstatRegion :: Region
            _condIcomments :: ([MToken])
            _condIcopy :: MExpr
            _condIendsWithPrefixExpression :: Bool
            _condIisAssociative :: Bool
            _condIisLiteral :: Bool
            _condIisMultiline :: Bool
            _condIpos :: Region
            _condIprecedence :: OperatorLevel
            _condIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _elifsIcomments :: ([MToken])
            _elifsIcopy :: ElseIfList
            _elifsIelsesExist :: Bool
            _elifsIisMultiline :: Bool
            _elifsIpos :: Region
            _elifsIpretty :: Doc
            _elsIcomments :: ([MToken])
            _elsIcopy :: Else
            _elsIelsesExist :: Bool
            _elsIisMultiline :: Bool
            _elsIpos :: Region
            _elsIpretty :: Doc
            _isMultiline :: Bool
_isMultiline =
              ( Bool
_lhsIforceMultiline
                  Bool -> Bool -> Bool
|| Bool
_condIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_bodyIisMultiline
                  Bool -> Bool -> Bool
|| Bool
_elifsIelsesExist
                  Bool -> Bool -> Bool
|| Bool
_elsIelsesExist
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _singleLinePretty :: Doc
_singleLinePretty =
              ( String -> Doc
zeroWidthText String
"if"
                  Doc -> Doc -> Doc
<-> Doc
_condIpretty
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"then"
                  Doc -> Doc -> Doc
<-> Doc
_bodyIpretty
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"end"
                  Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterThen)
              )
            _multilinePretty :: Doc
_multilinePretty =
              ( String -> Doc
zeroWidthText String
"if"
                  Doc -> Doc -> Doc
<-> Doc
_condIpretty
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"then"
                  Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterThen)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ Doc
_elifsIpretty
                  Doc -> Doc -> Doc
$+$ Doc
_elsIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _commentsAfterThen :: ([MToken], [MToken])
_commentsAfterThen =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` Region
_condIpos) [MToken]
_lhsIcomments
              )
            _condOcomments :: [MToken]
_condOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfterThen
              )
            _condOparentOperatorPrecedence :: OperatorLevel
_condOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _condOparentOperatorAssociative :: Bool
_condOparentOperatorAssociative =
              ( Bool
True
              )
            _bodyOindent :: Int
_bodyOindent =
              ( if Bool
_isMultiline then Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1 else Int
0
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion Region -> Region -> Region
`upto` Region
_elifsIpos Region -> Region -> Region
`upto` Region
_elsIpos
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( if Bool
_isMultiline then Doc
_multilinePretty else Doc
_singleLinePretty
              )
            _copy :: Stat
_copy =
              ( MExpr -> Block -> ElseIfList -> Else -> Stat
AIf MExpr
_condIcopy Block
_bodyIcopy ElseIfList
_elifsIcopy Else
_elsIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_elsIcomments
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_isMultiline
              )
            _condOforceMultiline :: Bool
_condOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _condOindent :: Int
_condOindent =
              ( Int
_lhsIindent
              )
            _condOppconf :: PrettyPrintConfig
_condOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_condIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _elifsOcomments :: [MToken]
_elifsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _elifsOforceMultiline :: Bool
_elifsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _elifsOindent :: Int
_elifsOindent =
              ( Int
_lhsIindent
              )
            _elifsOppconf :: PrettyPrintConfig
_elifsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _elsOcomments :: [MToken]
_elsOcomments =
              ( [MToken]
_elifsIcomments
              )
            _elsOforceMultiline :: Bool
_elsOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _elsOindent :: Int
_elsOindent =
              ( Int
_lhsIindent
              )
            _elsOppconf :: PrettyPrintConfig
_elsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _elsOstatRegion :: Region
_elsOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_condIcomments, MExpr
_condIcopy, Bool
_condIendsWithPrefixExpression, Bool
_condIisAssociative, Bool
_condIisLiteral, Bool
_condIisMultiline, Region
_condIpos, OperatorLevel
_condIprecedence, Doc
_condIpretty) =
              T_MExpr
cond_ [MToken]
_condOcomments Bool
_condOforceMultiline Int
_condOindent Bool
_condOparentOperatorAssociative OperatorLevel
_condOparentOperatorPrecedence PrettyPrintConfig
_condOppconf
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
            ([MToken]
_elifsIcomments, ElseIfList
_elifsIcopy, Bool
_elifsIelsesExist, Bool
_elifsIisMultiline, Region
_elifsIpos, Doc
_elifsIpretty) =
              T_ElseIfList
elifs_ [MToken]
_elifsOcomments Bool
_elifsOforceMultiline Int
_elifsOindent PrettyPrintConfig
_elifsOppconf
            ([MToken]
_elsIcomments, Else
_elsIcopy, Bool
_elsIelsesExist, Bool
_elsIisMultiline, Region
_elsIpos, Doc
_elsIpretty) =
              T_Else
els_ [MToken]
_elsOcomments Bool
_elsOforceMultiline Int
_elsOindent PrettyPrintConfig
_elsOppconf Region
_elsOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ANFor
  :: MToken
  -> T_MExpr
  -> T_MExpr
  -> T_MExpr
  -> T_Block
  -> T_Stat
sem_Stat_ANFor :: MToken -> T_MExpr -> T_MExpr -> T_MExpr -> T_Block -> T_Stat
sem_Stat_ANFor MToken
var_ T_MExpr
val_ T_MExpr
to_ T_MExpr
step_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOpretty :: Doc
            _valOcomments :: ([MToken])
            _valOparentOperatorPrecedence :: OperatorLevel
            _valOparentOperatorAssociative :: Bool
            _toOparentOperatorPrecedence :: OperatorLevel
            _toOparentOperatorAssociative :: Bool
            _stepOparentOperatorPrecedence :: OperatorLevel
            _stepOparentOperatorAssociative :: Bool
            _bodyOindent :: Int
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _valOforceMultiline :: Bool
            _valOindent :: Int
            _valOppconf :: PrettyPrintConfig
            _toOcomments :: ([MToken])
            _toOforceMultiline :: Bool
            _toOindent :: Int
            _toOppconf :: PrettyPrintConfig
            _stepOcomments :: ([MToken])
            _stepOforceMultiline :: Bool
            _stepOindent :: Int
            _stepOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _valIcomments :: ([MToken])
            _valIcopy :: MExpr
            _valIendsWithPrefixExpression :: Bool
            _valIisAssociative :: Bool
            _valIisLiteral :: Bool
            _valIisMultiline :: Bool
            _valIpos :: Region
            _valIprecedence :: OperatorLevel
            _valIpretty :: Doc
            _toIcomments :: ([MToken])
            _toIcopy :: MExpr
            _toIendsWithPrefixExpression :: Bool
            _toIisAssociative :: Bool
            _toIisLiteral :: Bool
            _toIisMultiline :: Bool
            _toIpos :: Region
            _toIprecedence :: OperatorLevel
            _toIpretty :: Doc
            _stepIcomments :: ([MToken])
            _stepIcopy :: MExpr
            _stepIendsWithPrefixExpression :: Bool
            _stepIisAssociative :: Bool
            _stepIisLiteral :: Bool
            _stepIisMultiline :: Bool
            _stepIpos :: Region
            _stepIprecedence :: OperatorLevel
            _stepIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _step :: Doc
_step =
              ( case MExpr
_stepIcopy of
                  MExpr Region
_ (ANumber String
"1") -> Doc
empty
                  MExpr
_ -> Doc
_comma Doc -> Doc -> Doc
<> Doc
_stepIpretty
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"for"
                  Doc -> Doc -> Doc
<-> MToken -> Doc
tok MToken
var_
                  Doc -> Doc -> Doc
<-> Char -> Doc
zchr Char
'='
                  Doc -> Doc -> Doc
<-> Doc
_valIpretty
                  Doc -> Doc -> Doc
<> Doc
_comma
                  Doc -> Doc -> Doc
<> Doc
_toIpretty
                  Doc -> Doc -> Doc
<> Doc
_step
                    Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"do"
                    Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterFor)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _commentsAfterFor :: ([MToken], [MToken])
_commentsAfterFor =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` MToken -> Region
mpos MToken
var_) [MToken]
_lhsIcomments
              )
            _valOcomments :: [MToken]
_valOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfterFor
              )
            _valOparentOperatorPrecedence :: OperatorLevel
_valOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _valOparentOperatorAssociative :: Bool
_valOparentOperatorAssociative =
              ( Bool
True
              )
            _toOparentOperatorPrecedence :: OperatorLevel
_toOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _toOparentOperatorAssociative :: Bool
_toOparentOperatorAssociative =
              ( Bool
True
              )
            _stepOparentOperatorPrecedence :: OperatorLevel
_stepOparentOperatorPrecedence =
              ( OperatorLevel
TopLevelExpression
              )
            _stepOparentOperatorAssociative :: Bool
_stepOparentOperatorAssociative =
              ( Bool
True
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _copy :: Stat
_copy =
              ( MToken -> MExpr -> MExpr -> MExpr -> Block -> Stat
ANFor MToken
var_ MExpr
_valIcopy MExpr
_toIcopy MExpr
_stepIcopy Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _valOforceMultiline :: Bool
_valOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _valOindent :: Int
_valOindent =
              ( Int
_lhsIindent
              )
            _valOppconf :: PrettyPrintConfig
_valOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _toOcomments :: [MToken]
_toOcomments =
              ( [MToken]
_valIcomments
              )
            _toOforceMultiline :: Bool
_toOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _toOindent :: Int
_toOindent =
              ( Int
_lhsIindent
              )
            _toOppconf :: PrettyPrintConfig
_toOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _stepOcomments :: [MToken]
_stepOcomments =
              ( [MToken]
_toIcomments
              )
            _stepOforceMultiline :: Bool
_stepOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _stepOindent :: Int
_stepOindent =
              ( Int
_lhsIindent
              )
            _stepOppconf :: PrettyPrintConfig
_stepOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_stepIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_valIcomments, MExpr
_valIcopy, Bool
_valIendsWithPrefixExpression, Bool
_valIisAssociative, Bool
_valIisLiteral, Bool
_valIisMultiline, Region
_valIpos, OperatorLevel
_valIprecedence, Doc
_valIpretty) =
              T_MExpr
val_ [MToken]
_valOcomments Bool
_valOforceMultiline Int
_valOindent Bool
_valOparentOperatorAssociative OperatorLevel
_valOparentOperatorPrecedence PrettyPrintConfig
_valOppconf
            ([MToken]
_toIcomments, MExpr
_toIcopy, Bool
_toIendsWithPrefixExpression, Bool
_toIisAssociative, Bool
_toIisLiteral, Bool
_toIisMultiline, Region
_toIpos, OperatorLevel
_toIprecedence, Doc
_toIpretty) =
              T_MExpr
to_ [MToken]
_toOcomments Bool
_toOforceMultiline Int
_toOindent Bool
_toOparentOperatorAssociative OperatorLevel
_toOparentOperatorPrecedence PrettyPrintConfig
_toOppconf
            ([MToken]
_stepIcomments, MExpr
_stepIcopy, Bool
_stepIendsWithPrefixExpression, Bool
_stepIisAssociative, Bool
_stepIisLiteral, Bool
_stepIisMultiline, Region
_stepIpos, OperatorLevel
_stepIprecedence, Doc
_stepIpretty) =
              T_MExpr
step_ [MToken]
_stepOcomments Bool
_stepOforceMultiline Int
_stepOindent Bool
_stepOparentOperatorAssociative OperatorLevel
_stepOparentOperatorPrecedence PrettyPrintConfig
_stepOppconf
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AGFor
  :: ([MToken])
  -> T_MExprList
  -> T_Block
  -> T_Stat
sem_Stat_AGFor :: [MToken] -> T_MExprList -> T_Block -> T_Stat
sem_Stat_AGFor [MToken]
vars_ T_MExprList
vals_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOpretty :: Doc
            _bodyOindent :: Int
            _valsOcomments :: ([MToken])
            _valsOforceMultiline :: Bool
            _valsOsomeElementsInListAreMultiline :: Bool
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _valsOindent :: Int
            _valsOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _valsIcomments :: ([MToken])
            _valsIcopy :: MExprList
            _valsIisAssociative :: Bool
            _valsIisLast :: Bool
            _valsIisMultiline :: Bool
            _valsIpos :: Region
            _valsIprecedence :: OperatorLevel
            _valsIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"for"
                  Doc -> Doc -> Doc
<-> forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok (Doc -> String
render Doc
_comma) [MToken]
vars_
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"in"
                  Doc -> Doc -> Doc
<-> Doc
_valsIpretty
                  Doc -> Doc -> Doc
<-> String -> Doc
zeroWidthText String
"do"
                  Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterFor)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _commentsAfterFor :: ([MToken], [MToken])
_commentsAfterFor =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` MToken -> Region
mpos (forall a. [a] -> a
head [MToken]
vars_)) [MToken]
_lhsIcomments
              )
            _valsOcomments :: [MToken]
_valsOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfterFor
              )
            _valsOforceMultiline :: Bool
_valsOforceMultiline =
              ( Bool
False
              )
            _valsOsomeElementsInListAreMultiline :: Bool
_valsOsomeElementsInListAreMultiline =
              ( Bool
False
              )
            _copy :: Stat
_copy =
              ( [MToken] -> [MExpr] -> Block -> Stat
AGFor [MToken]
vars_ [MExpr]
_valsIcopy Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _valsOindent :: Int
_valsOindent =
              ( Int
_lhsIindent
              )
            _valsOppconf :: PrettyPrintConfig
_valsOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_valsIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_valsIcomments, [MExpr]
_valsIcopy, Bool
_valsIisAssociative, Bool
_valsIisLast, Bool
_valsIisMultiline, Region
_valsIpos, OperatorLevel
_valsIprecedence, Doc
_valsIpretty) =
              T_MExprList
vals_ [MToken]
_valsOcomments Bool
_valsOforceMultiline Int
_valsOindent PrettyPrintConfig
_valsOppconf Bool
_valsOsomeElementsInListAreMultiline
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_AFunc
  :: T_FuncName
  -> ([MToken])
  -> T_Block
  -> T_Stat
sem_Stat_AFunc :: T_FuncName -> [MToken] -> T_Block -> T_Stat
sem_Stat_AFunc T_FuncName
name_ [MToken]
args_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOpretty :: Doc
            _nameOcomments :: ([MToken])
            _bodyOindent :: Int
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _nameOindent :: Int
            _nameOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _nameIcomments :: ([MToken])
            _nameIcopy :: FuncName
            _nameIisMultiline :: Bool
            _nameIpos :: Region
            _nameIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"function"
                  Doc -> Doc -> Doc
<-> Doc
_nameIpretty
                  Doc -> Doc -> Doc
<> PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyParams (forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok (Doc -> String
render Doc
_comma) [MToken]
args_)
                    Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterFunc)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _commentsAfterFunc :: ([MToken], [MToken])
_commentsAfterFunc =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` Region
_nameIpos) [MToken]
_lhsIcomments
              )
            _nameOcomments :: [MToken]
_nameOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfterFunc
              )
            _emptyParams :: IsEmpty
_emptyParams =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null [MToken]
args_
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _copy :: Stat
_copy =
              ( FuncName -> [MToken] -> Block -> Stat
AFunc FuncName
_nameIcopy [MToken]
args_ Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _nameOindent :: Int
_nameOindent =
              ( Int
_lhsIindent
              )
            _nameOppconf :: PrettyPrintConfig
_nameOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_nameIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_nameIcomments, FuncName
_nameIcopy, Bool
_nameIisMultiline, Region
_nameIpos, Doc
_nameIpretty) =
              T_FuncName
name_ [MToken]
_nameOcomments Int
_nameOindent PrettyPrintConfig
_nameOppconf
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )
sem_Stat_ALocFunc
  :: T_FuncName
  -> ([MToken])
  -> T_Block
  -> T_Stat
sem_Stat_ALocFunc :: T_FuncName -> [MToken] -> T_Block -> T_Stat
sem_Stat_ALocFunc T_FuncName
name_ [MToken]
args_ T_Block
body_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     Bool
_lhsIisLastStatement
     PrettyPrintConfig
_lhsIppconf
     Region
_lhsIstatRegion
     Bool
_lhsIwouldBeAmbiguousWithoutSemicolon ->
        ( let
            _lhsOisMultiline :: Bool
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _nameOcomments :: ([MToken])
            _bodyOindent :: Int
            _lhsOcopy :: Stat
            _lhsOcomments :: ([MToken])
            _nameOindent :: Int
            _nameOppconf :: PrettyPrintConfig
            _bodyOcomments :: ([MToken])
            _bodyOforceMultiline :: Bool
            _bodyOppconf :: PrettyPrintConfig
            _bodyOstatRegion :: Region
            _nameIcomments :: ([MToken])
            _nameIcopy :: FuncName
            _nameIisMultiline :: Bool
            _nameIpos :: Region
            _nameIpretty :: Doc
            _bodyIcomments :: ([MToken])
            _bodyIcopy :: Block
            _bodyIisMultiline :: Bool
            _bodyIpretty :: Doc
            _bodyIstatementCount :: Int
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
True
              )
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"local function"
                  Doc -> Doc -> Doc
<-> Doc
_nameIpretty
                  Doc -> Doc -> Doc
<> PrettyPrintConfig -> IsEmpty -> Doc -> Doc
parens PrettyPrintConfig
_lhsIppconf IsEmpty
_emptyParams (forall a. (a -> Doc) -> String -> [a] -> Doc
printList MToken -> Doc
tok (Doc -> String
render Doc
_comma) [MToken]
args_)
                    Doc -> Doc -> Doc
<-> PrettyPrintConfig -> Int -> [MToken] -> Doc
renderSLComments PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (forall a b. (a, b) -> a
fst ([MToken], [MToken])
_commentsAfterFunc)
                  Doc -> Doc -> Doc
$+$ Doc
_bodyIpretty
                  Doc -> Doc -> Doc
$+$ PrettyPrintConfig -> Int -> Doc -> Doc
indent PrettyPrintConfig
_lhsIppconf Int
_lhsIindent (String -> Doc
zeroWidthText String
"end")
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _commentsAfterFunc :: ([MToken], [MToken])
_commentsAfterFunc =
              ( forall a. (a -> Bool) -> [a] -> ([a], [a])
span (\(MToken Region
pos Token
_) -> Region
pos Region -> Region -> Bool
`beforeOrOnLine` Region
_nameIpos) [MToken]
_lhsIcomments
              )
            _nameOcomments :: [MToken]
_nameOcomments =
              ( forall a b. (a, b) -> b
snd ([MToken], [MToken])
_commentsAfterFunc
              )
            _emptyParams :: IsEmpty
_emptyParams =
              ( Bool -> IsEmpty
toEmpty forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null [MToken]
args_
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _bodyOindent :: Int
_bodyOindent =
              ( Int
_lhsIindent forall a. Num a => a -> a -> a
+ Int
1
              )
            _copy :: Stat
_copy =
              ( FuncName -> [MToken] -> Block -> Stat
ALocFunc FuncName
_nameIcopy [MToken]
args_ Block
_bodyIcopy
              )
            _lhsOcopy :: Stat
_lhsOcopy =
              ( Stat
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_bodyIcomments
              )
            _nameOindent :: Int
_nameOindent =
              ( Int
_lhsIindent
              )
            _nameOppconf :: PrettyPrintConfig
_nameOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOcomments :: [MToken]
_bodyOcomments =
              ( [MToken]
_nameIcomments
              )
            _bodyOforceMultiline :: Bool
_bodyOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _bodyOppconf :: PrettyPrintConfig
_bodyOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _bodyOstatRegion :: Region
_bodyOstatRegion =
              ( Region
_lhsIstatRegion
              )
            ([MToken]
_nameIcomments, FuncName
_nameIcopy, Bool
_nameIisMultiline, Region
_nameIpos, Doc
_nameIpretty) =
              T_FuncName
name_ [MToken]
_nameOcomments Int
_nameOindent PrettyPrintConfig
_nameOppconf
            ([MToken]
_bodyIcomments, Block
_bodyIcopy, Bool
_bodyIisMultiline, Doc
_bodyIpretty, Int
_bodyIstatementCount) =
              T_Block
body_ [MToken]
_bodyOcomments Bool
_bodyOforceMultiline Int
_bodyOindent PrettyPrintConfig
_bodyOppconf Region
_bodyOstatRegion
          in
            ([MToken]
_lhsOcomments, Stat
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression)
        )
  )

-- UnOp --------------------------------------------------------
-- cata
sem_UnOp
  :: UnOp
  -> T_UnOp
sem_UnOp :: UnOp -> T_UnOp
sem_UnOp (UnOp
UnMinus) =
  (T_UnOp
sem_UnOp_UnMinus)
sem_UnOp (UnOp
ANot) =
  (T_UnOp
sem_UnOp_ANot)
sem_UnOp (UnOp
AHash) =
  (T_UnOp
sem_UnOp_AHash)

-- semantic domain
type T_UnOp =
  ([MToken])
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), UnOp, Bool, Doc)
data Inh_UnOp = Inh_UnOp {Inh_UnOp -> [MToken]
comments_Inh_UnOp :: ([MToken]), Inh_UnOp -> Int
indent_Inh_UnOp :: Int, Inh_UnOp -> PrettyPrintConfig
ppconf_Inh_UnOp :: PrettyPrintConfig}
data Syn_UnOp = Syn_UnOp {Syn_UnOp -> [MToken]
comments_Syn_UnOp :: ([MToken]), Syn_UnOp -> UnOp
copy_Syn_UnOp :: UnOp, Syn_UnOp -> Bool
isMultiline_Syn_UnOp :: Bool, Syn_UnOp -> Doc
pretty_Syn_UnOp :: Doc}
wrap_UnOp
  :: T_UnOp
  -> Inh_UnOp
  -> Syn_UnOp
wrap_UnOp :: T_UnOp -> Inh_UnOp -> Syn_UnOp
wrap_UnOp T_UnOp
sem (Inh_UnOp [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, UnOp
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty) = T_UnOp
sem [MToken]
_lhsIcomments Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken] -> UnOp -> Bool -> Doc -> Syn_UnOp
Syn_UnOp [MToken]
_lhsOcomments UnOp
_lhsOcopy Bool
_lhsOisMultiline Doc
_lhsOpretty)
  )
sem_UnOp_UnMinus :: T_UnOp
sem_UnOp_UnMinus :: T_UnOp
sem_UnOp_UnMinus =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOcopy :: UnOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"-"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: UnOp
_copy =
              ( UnOp
UnMinus
              )
            _lhsOcopy :: UnOp
_lhsOcopy =
              ( UnOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, UnOp
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )
sem_UnOp_ANot :: T_UnOp
sem_UnOp_ANot :: T_UnOp
sem_UnOp_ANot =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOcopy :: UnOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText (if PrettyPrintConfig -> Bool
cStyle PrettyPrintConfig
_lhsIppconf then String
"!" else String
"not ")
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: UnOp
_copy =
              ( UnOp
ANot
              )
            _lhsOcopy :: UnOp
_lhsOcopy =
              ( UnOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, UnOp
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )
sem_UnOp_AHash :: T_UnOp
sem_UnOp_AHash :: T_UnOp
sem_UnOp_AHash =
  ( \[MToken]
_lhsIcomments
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOisMultiline :: Bool
            _lhsOcopy :: UnOp
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( String -> Doc
zeroWidthText String
"#"
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _copy :: UnOp
_copy =
              ( UnOp
AHash
              )
            _lhsOcopy :: UnOp
_lhsOcopy =
              ( UnOp
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, UnOp
_lhsOcopy, Bool
_lhsOisMultiline, Doc
_lhsOpretty)
        )
  )

-- VarsList ----------------------------------------------------
-- cata
sem_VarsList
  :: VarsList
  -> T_VarsList
sem_VarsList :: [(PrefixExp, Maybe MExpr)] -> T_VarsList
sem_VarsList [(PrefixExp, Maybe MExpr)]
list =
  (forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Prelude.foldr T_Declaration -> T_VarsList -> T_VarsList
sem_VarsList_Cons T_VarsList
sem_VarsList_Nil (forall a b. (a -> b) -> [a] -> [b]
Prelude.map (PrefixExp, Maybe MExpr) -> T_Declaration
sem_Declaration [(PrefixExp, Maybe MExpr)]
list))

-- semantic domain
type T_VarsList =
  ([MToken])
  -> Bool
  -> Int
  -> PrettyPrintConfig
  -> (([MToken]), VarsList, Bool, Doc, Bool, Bool, Bool, Doc, Bool, Doc)
data Inh_VarsList = Inh_VarsList {Inh_VarsList -> [MToken]
comments_Inh_VarsList :: ([MToken]), Inh_VarsList -> Bool
forceMultiline_Inh_VarsList :: Bool, Inh_VarsList -> Int
indent_Inh_VarsList :: Int, Inh_VarsList -> PrettyPrintConfig
ppconf_Inh_VarsList :: PrettyPrintConfig}
data Syn_VarsList = Syn_VarsList {Syn_VarsList -> [MToken]
comments_Syn_VarsList :: ([MToken]), Syn_VarsList -> [(PrefixExp, Maybe MExpr)]
copy_Syn_VarsList :: VarsList, Syn_VarsList -> Bool
endsWithPrefixExpression_Syn_VarsList :: Bool, Syn_VarsList -> Doc
exprPretty_Syn_VarsList :: Doc, Syn_VarsList -> Bool
isDefined_Syn_VarsList :: Bool, Syn_VarsList -> Bool
isLast_Syn_VarsList :: Bool, Syn_VarsList -> Bool
isMultiline_Syn_VarsList :: Bool, Syn_VarsList -> Doc
pretty_Syn_VarsList :: Doc, Syn_VarsList -> Bool
startsWithExprPrefixExpression_Syn_VarsList :: Bool, Syn_VarsList -> Doc
varPretty_Syn_VarsList :: Doc}
wrap_VarsList
  :: T_VarsList
  -> Inh_VarsList
  -> Syn_VarsList
wrap_VarsList :: T_VarsList -> Inh_VarsList -> Syn_VarsList
wrap_VarsList T_VarsList
sem (Inh_VarsList [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf) =
  ( let
      ([MToken]
_lhsOcomments, [(PrefixExp, Maybe MExpr)]
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Doc
_lhsOexprPretty, Bool
_lhsOisDefined, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Doc
_lhsOvarPretty) = T_VarsList
sem [MToken]
_lhsIcomments Bool
_lhsIforceMultiline Int
_lhsIindent PrettyPrintConfig
_lhsIppconf
    in
      ([MToken]
-> [(PrefixExp, Maybe MExpr)]
-> Bool
-> Doc
-> Bool
-> Bool
-> Bool
-> Doc
-> Bool
-> Doc
-> Syn_VarsList
Syn_VarsList [MToken]
_lhsOcomments [(PrefixExp, Maybe MExpr)]
_lhsOcopy Bool
_lhsOendsWithPrefixExpression Doc
_lhsOexprPretty Bool
_lhsOisDefined Bool
_lhsOisLast Bool
_lhsOisMultiline Doc
_lhsOpretty Bool
_lhsOstartsWithExprPrefixExpression Doc
_lhsOvarPretty)
  )
sem_VarsList_Cons
  :: T_Declaration
  -> T_VarsList
  -> T_VarsList
sem_VarsList_Cons :: T_Declaration -> T_VarsList -> T_VarsList
sem_VarsList_Cons T_Declaration
hd_ T_VarsList
tl_ =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisLast :: Bool
            _lhsOexprPretty :: Doc
            _lhsOisDefined :: Bool
            _lhsOvarPretty :: Doc
            _lhsOcopy :: VarsList
            _lhsOcomments :: ([MToken])
            _hdOcomments :: ([MToken])
            _hdOforceMultiline :: Bool
            _hdOindent :: Int
            _hdOppconf :: PrettyPrintConfig
            _tlOcomments :: ([MToken])
            _tlOforceMultiline :: Bool
            _tlOindent :: Int
            _tlOppconf :: PrettyPrintConfig
            _hdIcomments :: ([MToken])
            _hdIcopy :: Declaration
            _hdIendsWithPrefixExpression :: Bool
            _hdIexprPretty :: Doc
            _hdIisDefined :: Bool
            _hdIisMultiline :: Bool
            _hdIpretty :: Doc
            _hdIstartsWithExprPrefixExpression :: Bool
            _hdIvarPretty :: Doc
            _tlIcomments :: ([MToken])
            _tlIcopy :: VarsList
            _tlIendsWithPrefixExpression :: Bool
            _tlIexprPretty :: Doc
            _tlIisDefined :: Bool
            _tlIisLast :: Bool
            _tlIisMultiline :: Bool
            _tlIpretty :: Doc
            _tlIstartsWithExprPrefixExpression :: Bool
            _tlIvarPretty :: Doc
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
_varPretty
                  Doc -> Doc -> Doc
<-> if Bool
_isDefined then Char -> Doc
zchr Char
'=' Doc -> Doc -> Doc
<-> Doc
_exprPretty else Doc
empty
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
_hdIstartsWithExprPrefixExpression
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( if Bool
_tlIisDefined then Bool
_tlIendsWithPrefixExpression else Bool
_hdIendsWithPrefixExpression
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
_hdIisMultiline Bool -> Bool -> Bool
|| Bool
_tlIisMultiline
              )
            _isDefined :: Bool
_isDefined =
              ( Bool
_hdIisDefined Bool -> Bool -> Bool
|| Bool
_tlIisDefined
              )
            _varPretty :: Doc
_varPretty =
              ( Doc
_hdIvarPretty
                  Doc -> Doc -> Doc
<> (if Bool
_tlIisLast then Doc
empty else Doc
_comma)
                  Doc -> Doc -> Doc
<> Doc
_tlIvarPretty
              )
            _exprPretty :: Doc
_exprPretty =
              ( Doc
_hdIexprPretty
                  Doc -> Doc -> Doc
<> (if Bool -> Bool
not Bool
_tlIisLast Bool -> Bool -> Bool
&& Bool
_tlIisDefined then Doc
_comma else Doc
empty)
                  Doc -> Doc -> Doc
<> Doc
_tlIexprPretty
              )
            _comma :: Doc
_comma =
              ( (if PrettyPrintConfig -> Bool
spaceBeforeComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
                  Doc -> Doc -> Doc
<> Char -> Doc
zchr Char
','
                  Doc -> Doc -> Doc
<> (if PrettyPrintConfig -> Bool
spaceAfterComma PrettyPrintConfig
_lhsIppconf then Char -> Doc
zchr Char
' ' else Doc
empty)
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
False
              )
            _lhsOexprPretty :: Doc
_lhsOexprPretty =
              ( Doc
_exprPretty
              )
            _lhsOisDefined :: Bool
_lhsOisDefined =
              ( Bool
_isDefined
              )
            _lhsOvarPretty :: Doc
_lhsOvarPretty =
              ( Doc
_varPretty
              )
            _copy :: [(PrefixExp, Maybe MExpr)]
_copy =
              ( (:) (PrefixExp, Maybe MExpr)
_hdIcopy [(PrefixExp, Maybe MExpr)]
_tlIcopy
              )
            _lhsOcopy :: [(PrefixExp, Maybe MExpr)]
_lhsOcopy =
              ( [(PrefixExp, Maybe MExpr)]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_tlIcomments
              )
            _hdOcomments :: [MToken]
_hdOcomments =
              ( [MToken]
_lhsIcomments
              )
            _hdOforceMultiline :: Bool
_hdOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _hdOindent :: Int
_hdOindent =
              ( Int
_lhsIindent
              )
            _hdOppconf :: PrettyPrintConfig
_hdOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            _tlOcomments :: [MToken]
_tlOcomments =
              ( [MToken]
_hdIcomments
              )
            _tlOforceMultiline :: Bool
_tlOforceMultiline =
              ( Bool
_lhsIforceMultiline
              )
            _tlOindent :: Int
_tlOindent =
              ( Int
_lhsIindent
              )
            _tlOppconf :: PrettyPrintConfig
_tlOppconf =
              ( PrettyPrintConfig
_lhsIppconf
              )
            ([MToken]
_hdIcomments, (PrefixExp, Maybe MExpr)
_hdIcopy, Bool
_hdIendsWithPrefixExpression, Doc
_hdIexprPretty, Bool
_hdIisDefined, Bool
_hdIisMultiline, Doc
_hdIpretty, Bool
_hdIstartsWithExprPrefixExpression, Doc
_hdIvarPretty) =
              T_Declaration
hd_ [MToken]
_hdOcomments Bool
_hdOforceMultiline Int
_hdOindent PrettyPrintConfig
_hdOppconf
            ([MToken]
_tlIcomments, [(PrefixExp, Maybe MExpr)]
_tlIcopy, Bool
_tlIendsWithPrefixExpression, Doc
_tlIexprPretty, Bool
_tlIisDefined, Bool
_tlIisLast, Bool
_tlIisMultiline, Doc
_tlIpretty, Bool
_tlIstartsWithExprPrefixExpression, Doc
_tlIvarPretty) =
              T_VarsList
tl_ [MToken]
_tlOcomments Bool
_tlOforceMultiline Int
_tlOindent PrettyPrintConfig
_tlOppconf
          in
            ([MToken]
_lhsOcomments, [(PrefixExp, Maybe MExpr)]
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Doc
_lhsOexprPretty, Bool
_lhsOisDefined, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Doc
_lhsOvarPretty)
        )
  )
sem_VarsList_Nil :: T_VarsList
sem_VarsList_Nil :: T_VarsList
sem_VarsList_Nil =
  ( \[MToken]
_lhsIcomments
     Bool
_lhsIforceMultiline
     Int
_lhsIindent
     PrettyPrintConfig
_lhsIppconf ->
        ( let
            _lhsOpretty :: Doc
            _lhsOstartsWithExprPrefixExpression :: Bool
            _lhsOendsWithPrefixExpression :: Bool
            _lhsOisMultiline :: Bool
            _lhsOisLast :: Bool
            _lhsOexprPretty :: Doc
            _lhsOisDefined :: Bool
            _lhsOvarPretty :: Doc
            _lhsOcopy :: VarsList
            _lhsOcomments :: ([MToken])
            _lhsOpretty :: Doc
_lhsOpretty =
              ( Doc
empty
              )
            _lhsOstartsWithExprPrefixExpression :: Bool
_lhsOstartsWithExprPrefixExpression =
              ( Bool
False
              )
            _lhsOendsWithPrefixExpression :: Bool
_lhsOendsWithPrefixExpression =
              ( Bool
False
              )
            _lhsOisMultiline :: Bool
_lhsOisMultiline =
              ( Bool
False
              )
            _lhsOisLast :: Bool
_lhsOisLast =
              ( Bool
True
              )
            _lhsOexprPretty :: Doc
_lhsOexprPretty =
              ( Doc
empty
              )
            _lhsOisDefined :: Bool
_lhsOisDefined =
              ( Bool
False
              )
            _lhsOvarPretty :: Doc
_lhsOvarPretty =
              ( Doc
empty
              )
            _copy :: [a]
_copy =
              ( []
              )
            _lhsOcopy :: [(PrefixExp, Maybe MExpr)]
_lhsOcopy =
              ( forall a. [a]
_copy
              )
            _lhsOcomments :: [MToken]
_lhsOcomments =
              ( [MToken]
_lhsIcomments
              )
          in
            ([MToken]
_lhsOcomments, [(PrefixExp, Maybe MExpr)]
_lhsOcopy, Bool
_lhsOendsWithPrefixExpression, Doc
_lhsOexprPretty, Bool
_lhsOisDefined, Bool
_lhsOisLast, Bool
_lhsOisMultiline, Doc
_lhsOpretty, Bool
_lhsOstartsWithExprPrefixExpression, Doc
_lhsOvarPretty)
        )
  )