module PrintCleanCode where
import UU.Scanner.Position(Pos)
import CommonTypes (ConstructorIdent,Identifier)
import Patterns
import Data.Set(Set)
import qualified Data.Set as Set
import Data.Map(Map)
import qualified Data.Map as Map
import Data.Char (isAlphaNum)
import Pretty
import Code
import Options
import CommonTypes (attrname, _LOC, nullIdent)
import Data.List(intersperse)
import System.IO
import System.Directory
import System.FilePath
import CommonTypes(BlockInfo, BlockKind(..))
import Control.Monad.Identity (Identity)
import qualified Control.Monad.Identity
mkTupleExpr :: Bool -> Bool -> Exprs -> Expr
mkTupleExpr unbox' noInh exprs | not unbox' || noInh || length exprs == 1 = TupleExpr exprs
| otherwise = UnboxedTupleExpr exprs
mkTupleType :: Bool -> Bool -> Types -> Type
mkTupleType unbox' noInh tps | not unbox' || noInh || length tps == 1 = TupleType tps
| otherwise = UnboxedTupleType tps
mkTupleLhs :: Bool -> Bool -> [String] -> Lhs
mkTupleLhs unbox' noInh comps | not unbox' || noInh || length comps == 1 = TupleLhs comps
| otherwise = UnboxedTupleLhs comps
type PP_Docs = [PP_Doc]
ppMultiSeqH :: [PP_Doc] -> PP_Doc -> PP_Doc
ppMultiSeqH = ppMultiSeq' (>#<)
ppMultiSeqV :: [PP_Doc] -> PP_Doc -> PP_Doc
ppMultiSeqV = ppMultiSeq' (>-<)
ppMultiSeq' :: (PP_Doc -> PP_Doc -> PP_Doc) -> [PP_Doc] -> PP_Doc -> PP_Doc
ppMultiSeq' next strictArgs expr
= foldr (\v r -> (v >#< "`seq`") `next` pp_parens r) expr strictArgs
reallySimple :: String -> Bool
reallySimple = and . map (\x -> isAlphaNum x || x=='_')
ppTuple :: Bool -> [PP_Doc] -> PP_Doc
ppTuple _ [x] = pp x
ppTuple True pps = "(" >|< pp_block " " (replicate (length pps `max` 1) ')') ",(" pps
ppTuple False pps = "(" >|< pp_block " " ")" "," pps
ppUnboxedTuple :: Bool -> [PP_Doc] -> PP_Doc
ppUnboxedTuple = ppTuple
locname' :: Identifier -> [Char]
locname' n = "_loc_" ++ getName n
renderDocs :: [PP_Doc] -> String
renderDocs pps = foldr (.) id (map (\d -> (disp d 50000) . ( '\n':) ) pps) ""
writeModule :: FilePath -> [PP_Doc] -> IO ()
writeModule path docs
= do bExists <- doesFileExist path
if bExists
then do input <- readFile path
seq (length input) (return ())
if input /= output
then dumpIt
else return ()
else dumpIt
where
output = renderDocs docs
dumpIt = writeFile path output
data Inh_CaseAlt = Inh_CaseAlt { nested_Inh_CaseAlt :: !(Bool), options_Inh_CaseAlt :: !(Options), outputfile_Inh_CaseAlt :: !(String) }
data Syn_CaseAlt = Syn_CaseAlt { pps_Syn_CaseAlt :: !(PP_Docs) }
wrap_CaseAlt :: T_CaseAlt -> Inh_CaseAlt -> (Syn_CaseAlt )
wrap_CaseAlt !(T_CaseAlt act) !(Inh_CaseAlt _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg1 = T_CaseAlt_vIn1 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_CaseAlt_vOut1 _lhsOpps) <- return (inv_CaseAlt_s2 sem arg1)
return (Syn_CaseAlt _lhsOpps)
)
sem_CaseAlt :: CaseAlt -> T_CaseAlt
sem_CaseAlt ( CaseAlt left_ expr_ ) = sem_CaseAlt_CaseAlt ( sem_Lhs left_ ) ( sem_Expr expr_ )
newtype T_CaseAlt = T_CaseAlt {
attach_T_CaseAlt :: Identity (T_CaseAlt_s2 )
}
newtype T_CaseAlt_s2 = C_CaseAlt_s2 {
inv_CaseAlt_s2 :: (T_CaseAlt_v1 )
}
data T_CaseAlt_s3 = C_CaseAlt_s3
type T_CaseAlt_v1 = (T_CaseAlt_vIn1 ) -> (T_CaseAlt_vOut1 )
data T_CaseAlt_vIn1 = T_CaseAlt_vIn1 (Bool) (Options) (String)
data T_CaseAlt_vOut1 = T_CaseAlt_vOut1 (PP_Docs)
sem_CaseAlt_CaseAlt :: T_Lhs -> T_Expr -> T_CaseAlt
sem_CaseAlt_CaseAlt arg_left_ arg_expr_ = T_CaseAlt (return st2) where
!st2 = let
v1 :: T_CaseAlt_v1
v1 = \ !(T_CaseAlt_vIn1 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
_lhsOpps :: PP_Docs
_lhsOpps = rule0 _exprIpp _leftIpp
_leftOisDeclOfLet = rule1 ()
_leftOnested = rule2 _lhsInested
_leftOoptions = rule3 _lhsIoptions
_leftOoutputfile = rule4 _lhsIoutputfile
_exprOnested = rule5 _lhsInested
_exprOoptions = rule6 _lhsIoptions
_exprOoutputfile = rule7 _lhsIoutputfile
!__result_ = T_CaseAlt_vOut1 _lhsOpps
in __result_ )
in C_CaseAlt_s2 v1
rule0 = \ ((_exprIpp) :: PP_Doc) ((_leftIpp) :: PP_Doc) ->
["{" >#< _leftIpp >#< "->", _exprIpp >#< "}"]
rule1 = \ (_ :: ()) ->
False
rule2 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule3 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule4 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule5 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule6 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule7 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
data Inh_CaseAlts = Inh_CaseAlts { nested_Inh_CaseAlts :: !(Bool), options_Inh_CaseAlts :: !(Options), outputfile_Inh_CaseAlts :: !(String) }
data Syn_CaseAlts = Syn_CaseAlts { pps_Syn_CaseAlts :: !(PP_Docs) }
wrap_CaseAlts :: T_CaseAlts -> Inh_CaseAlts -> (Syn_CaseAlts )
wrap_CaseAlts !(T_CaseAlts act) !(Inh_CaseAlts _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg4 = T_CaseAlts_vIn4 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_CaseAlts_vOut4 _lhsOpps) <- return (inv_CaseAlts_s5 sem arg4)
return (Syn_CaseAlts _lhsOpps)
)
sem_CaseAlts :: CaseAlts -> T_CaseAlts
sem_CaseAlts list = Prelude.foldr sem_CaseAlts_Cons sem_CaseAlts_Nil (Prelude.map sem_CaseAlt list)
newtype T_CaseAlts = T_CaseAlts {
attach_T_CaseAlts :: Identity (T_CaseAlts_s5 )
}
newtype T_CaseAlts_s5 = C_CaseAlts_s5 {
inv_CaseAlts_s5 :: (T_CaseAlts_v4 )
}
data T_CaseAlts_s6 = C_CaseAlts_s6
type T_CaseAlts_v4 = (T_CaseAlts_vIn4 ) -> (T_CaseAlts_vOut4 )
data T_CaseAlts_vIn4 = T_CaseAlts_vIn4 (Bool) (Options) (String)
data T_CaseAlts_vOut4 = T_CaseAlts_vOut4 (PP_Docs)
sem_CaseAlts_Cons :: T_CaseAlt -> T_CaseAlts -> T_CaseAlts
sem_CaseAlts_Cons arg_hd_ arg_tl_ = T_CaseAlts (return st5) where
!st5 = let
v4 :: T_CaseAlts_v4
v4 = \ !(T_CaseAlts_vIn4 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_hdX2 = Control.Monad.Identity.runIdentity (attach_T_CaseAlt (arg_hd_))
_tlX5 = Control.Monad.Identity.runIdentity (attach_T_CaseAlts (arg_tl_))
(T_CaseAlt_vOut1 _hdIpps) = inv_CaseAlt_s2 _hdX2 (T_CaseAlt_vIn1 _hdOnested _hdOoptions _hdOoutputfile)
(T_CaseAlts_vOut4 _tlIpps) = inv_CaseAlts_s5 _tlX5 (T_CaseAlts_vIn4 _tlOnested _tlOoptions _tlOoutputfile)
_lhsOpps :: PP_Docs
_lhsOpps = rule8 _hdIpps _tlIpps
_hdOnested = rule9 _lhsInested
_hdOoptions = rule10 _lhsIoptions
_hdOoutputfile = rule11 _lhsIoutputfile
_tlOnested = rule12 _lhsInested
_tlOoptions = rule13 _lhsIoptions
_tlOoutputfile = rule14 _lhsIoutputfile
!__result_ = T_CaseAlts_vOut4 _lhsOpps
in __result_ )
in C_CaseAlts_s5 v4
rule8 = \ ((_hdIpps) :: PP_Docs) ((_tlIpps) :: PP_Docs) ->
_hdIpps ++ _tlIpps
rule9 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule10 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule11 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule12 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule13 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule14 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_CaseAlts_Nil :: T_CaseAlts
sem_CaseAlts_Nil = T_CaseAlts (return st5) where
!st5 = let
v4 :: T_CaseAlts_v4
v4 = \ !(T_CaseAlts_vIn4 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule15 ()
!__result_ = T_CaseAlts_vOut4 _lhsOpps
in __result_ )
in C_CaseAlts_s5 v4
rule15 = \ (_ :: ()) ->
[]
data Inh_Chunk = Inh_Chunk { importBlocks_Inh_Chunk :: !(PP_Doc), isDeclOfLet_Inh_Chunk :: !(Bool), mainFile_Inh_Chunk :: !(String), mainName_Inh_Chunk :: !(String), moduleHeader_Inh_Chunk :: !(String -> String -> String -> Bool -> String), nested_Inh_Chunk :: !(Bool), options_Inh_Chunk :: !(Options), optionsLine_Inh_Chunk :: !(String), pragmaBlocks_Inh_Chunk :: !(String), textBlockMap_Inh_Chunk :: !(Map BlockInfo PP_Doc), textBlocks_Inh_Chunk :: !(PP_Doc) }
data Syn_Chunk = Syn_Chunk { appendCommon_Syn_Chunk :: !([[PP_Doc]]), appendMain_Syn_Chunk :: !([[PP_Doc]]), genSems_Syn_Chunk :: !(IO ()), imports_Syn_Chunk :: !([String]), pps_Syn_Chunk :: !(PP_Docs) }
wrap_Chunk :: T_Chunk -> Inh_Chunk -> (Syn_Chunk )
wrap_Chunk !(T_Chunk act) !(Inh_Chunk _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg7 = T_Chunk_vIn7 _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks
!(T_Chunk_vOut7 _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps) <- return (inv_Chunk_s8 sem arg7)
return (Syn_Chunk _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps)
)
sem_Chunk :: Chunk -> T_Chunk
sem_Chunk ( Chunk !name_ comment_ info_ dataDef_ cataFun_ semDom_ semWrapper_ semFunctions_ !semNames_ ) = sem_Chunk_Chunk name_ ( sem_Decl comment_ ) ( sem_Decls info_ ) ( sem_Decls dataDef_ ) ( sem_Decls cataFun_ ) ( sem_Decls semDom_ ) ( sem_Decls semWrapper_ ) ( sem_Decls semFunctions_ ) semNames_
newtype T_Chunk = T_Chunk {
attach_T_Chunk :: Identity (T_Chunk_s8 )
}
newtype T_Chunk_s8 = C_Chunk_s8 {
inv_Chunk_s8 :: (T_Chunk_v7 )
}
data T_Chunk_s9 = C_Chunk_s9
type T_Chunk_v7 = (T_Chunk_vIn7 ) -> (T_Chunk_vOut7 )
data T_Chunk_vIn7 = T_Chunk_vIn7 (PP_Doc) (Bool) (String) (String) (String -> String -> String -> Bool -> String) (Bool) (Options) (String) (String) (Map BlockInfo PP_Doc) (PP_Doc)
data T_Chunk_vOut7 = T_Chunk_vOut7 ([[PP_Doc]]) ([[PP_Doc]]) (IO ()) ([String]) (PP_Docs)
sem_Chunk_Chunk :: (String) -> T_Decl -> T_Decls -> T_Decls -> T_Decls -> T_Decls -> T_Decls -> T_Decls -> ([String]) -> T_Chunk
sem_Chunk_Chunk !arg_name_ arg_comment_ arg_info_ arg_dataDef_ arg_cataFun_ arg_semDom_ arg_semWrapper_ arg_semFunctions_ !arg_semNames_ = T_Chunk (return st8) where
!st8 = let
v7 :: T_Chunk_v7
v7 = \ !(T_Chunk_vIn7 _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) -> ( let
_commentX20 = Control.Monad.Identity.runIdentity (attach_T_Decl (arg_comment_))
_infoX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_info_))
_dataDefX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_dataDef_))
_cataFunX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_cataFun_))
_semDomX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_semDom_))
_semWrapperX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_semWrapper_))
_semFunctionsX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_semFunctions_))
(T_Decl_vOut19 _commentIpp _commentIppa) = inv_Decl_s20 _commentX20 (T_Decl_vIn19 _commentOisDeclOfLet _commentOnested _commentOoptions _commentOoutputfile)
(T_Decls_vOut22 _infoIpps) = inv_Decls_s23 _infoX23 (T_Decls_vIn22 _infoOisDeclOfLet _infoOnested _infoOoptions _infoOoutputfile)
(T_Decls_vOut22 _dataDefIpps) = inv_Decls_s23 _dataDefX23 (T_Decls_vIn22 _dataDefOisDeclOfLet _dataDefOnested _dataDefOoptions _dataDefOoutputfile)
(T_Decls_vOut22 _cataFunIpps) = inv_Decls_s23 _cataFunX23 (T_Decls_vIn22 _cataFunOisDeclOfLet _cataFunOnested _cataFunOoptions _cataFunOoutputfile)
(T_Decls_vOut22 _semDomIpps) = inv_Decls_s23 _semDomX23 (T_Decls_vIn22 _semDomOisDeclOfLet _semDomOnested _semDomOoptions _semDomOoutputfile)
(T_Decls_vOut22 _semWrapperIpps) = inv_Decls_s23 _semWrapperX23 (T_Decls_vIn22 _semWrapperOisDeclOfLet _semWrapperOnested _semWrapperOoptions _semWrapperOoutputfile)
(T_Decls_vOut22 _semFunctionsIpps) = inv_Decls_s23 _semFunctionsX23 (T_Decls_vIn22 _semFunctionsOisDeclOfLet _semFunctionsOnested _semFunctionsOoptions _semFunctionsOoutputfile)
_outputfile = rule16 _lhsImainFile _lhsIoptions arg_name_
_lhsOpps :: PP_Docs
_lhsOpps = rule17 _cataFunIpps _commentIpp _dataDefIpps _infoIpps _lhsItextBlockMap _semDomIpps _semFunctionsIpps _semWrapperIpps arg_name_
_lhsOimports :: [String]
_lhsOimports = rule18 _lhsImainName arg_name_
_lhsOappendCommon :: [[PP_Doc]]
_lhsOappendCommon = rule19 _commentIpp _dataDefIpps _lhsIoptions _semDomIpps _semWrapperIpps
_lhsOappendMain :: [[PP_Doc]]
_lhsOappendMain = rule20 _cataFunIpps _commentIpp _lhsIoptions _semWrapperIpps
_lhsOgenSems :: IO ()
_lhsOgenSems = rule21 _commentIpp _exports _infoIpps _lhsImainName _lhsImoduleHeader _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _outputfile _semFunctionsIpps arg_name_
_exports = rule22 arg_semNames_
_commentOisDeclOfLet = rule23 _lhsIisDeclOfLet
_commentOnested = rule24 _lhsInested
_commentOoptions = rule25 _lhsIoptions
_commentOoutputfile = rule26 _outputfile
_infoOisDeclOfLet = rule27 _lhsIisDeclOfLet
_infoOnested = rule28 _lhsInested
_infoOoptions = rule29 _lhsIoptions
_infoOoutputfile = rule30 _outputfile
_dataDefOisDeclOfLet = rule31 _lhsIisDeclOfLet
_dataDefOnested = rule32 _lhsInested
_dataDefOoptions = rule33 _lhsIoptions
_dataDefOoutputfile = rule34 _outputfile
_cataFunOisDeclOfLet = rule35 _lhsIisDeclOfLet
_cataFunOnested = rule36 _lhsInested
_cataFunOoptions = rule37 _lhsIoptions
_cataFunOoutputfile = rule38 _outputfile
_semDomOisDeclOfLet = rule39 _lhsIisDeclOfLet
_semDomOnested = rule40 _lhsInested
_semDomOoptions = rule41 _lhsIoptions
_semDomOoutputfile = rule42 _outputfile
_semWrapperOisDeclOfLet = rule43 _lhsIisDeclOfLet
_semWrapperOnested = rule44 _lhsInested
_semWrapperOoptions = rule45 _lhsIoptions
_semWrapperOoutputfile = rule46 _outputfile
_semFunctionsOisDeclOfLet = rule47 _lhsIisDeclOfLet
_semFunctionsOnested = rule48 _lhsInested
_semFunctionsOoptions = rule49 _lhsIoptions
_semFunctionsOoutputfile = rule50 _outputfile
!__result_ = T_Chunk_vOut7 _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps
in __result_ )
in C_Chunk_s8 v7
rule16 = \ ((_lhsImainFile) :: String) ((_lhsIoptions) :: Options) name_ ->
if sepSemMods _lhsIoptions
then replaceBaseName _lhsImainFile (takeBaseName _lhsImainFile ++ "_" ++ name_)
else _lhsImainFile
rule17 = \ ((_cataFunIpps) :: PP_Docs) ((_commentIpp) :: PP_Doc) ((_dataDefIpps) :: PP_Docs) ((_infoIpps) :: PP_Docs) ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) ((_semDomIpps) :: PP_Docs) ((_semFunctionsIpps) :: PP_Docs) ((_semWrapperIpps) :: PP_Docs) name_ ->
_commentIpp
: _infoIpps
++ _dataDefIpps
++ _cataFunIpps
++ _semDomIpps
++ _semWrapperIpps
++ _semFunctionsIpps
++ [Map.findWithDefault empty (BlockOther, Just $ identifier name_) _lhsItextBlockMap]
rule18 = \ ((_lhsImainName) :: String) name_ ->
["import " ++ _lhsImainName ++ "_" ++ name_ ++ "\n"]
rule19 = \ ((_commentIpp) :: PP_Doc) ((_dataDefIpps) :: PP_Docs) ((_lhsIoptions) :: Options) ((_semDomIpps) :: PP_Docs) ((_semWrapperIpps) :: PP_Docs) ->
[ [_commentIpp]
, _dataDefIpps
, _semDomIpps
, if reference _lhsIoptions then _semWrapperIpps else []
]
rule20 = \ ((_cataFunIpps) :: PP_Docs) ((_commentIpp) :: PP_Doc) ((_lhsIoptions) :: Options) ((_semWrapperIpps) :: PP_Docs) ->
[ [_commentIpp]
, _cataFunIpps
, if reference _lhsIoptions then [] else _semWrapperIpps
]
rule21 = \ ((_commentIpp) :: PP_Doc) _exports ((_infoIpps) :: PP_Docs) ((_lhsImainName) :: String) ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ((_lhsIoptionsLine) :: String) ((_lhsIpragmaBlocks) :: String) ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) _outputfile ((_semFunctionsIpps) :: PP_Docs) name_ ->
writeModule _outputfile
[ pp $ _lhsIpragmaBlocks
, pp $ Map.findWithDefault empty (BlockPragma, Just $ identifier name_) _lhsItextBlockMap
, pp $ _lhsIoptionsLine
, pp $ _lhsImoduleHeader _lhsImainName ("_" ++ name_) _exports True
, pp $ ("import " ++ _lhsImainName ++ "_common\n")
, pp $ Map.findWithDefault empty (BlockImport, Just $ identifier name_) _lhsItextBlockMap
, _commentIpp
, vlist_sep "" _infoIpps
, vlist_sep "" _semFunctionsIpps
, Map.findWithDefault empty (BlockOther, Just $ identifier name_) _lhsItextBlockMap
]
rule22 = \ semNames_ ->
concat $ intersperse "," semNames_
rule23 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule24 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule25 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule26 = \ _outputfile ->
_outputfile
rule27 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule28 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule29 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule30 = \ _outputfile ->
_outputfile
rule31 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule32 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule33 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule34 = \ _outputfile ->
_outputfile
rule35 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule36 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule37 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule38 = \ _outputfile ->
_outputfile
rule39 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule40 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule41 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule42 = \ _outputfile ->
_outputfile
rule43 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule44 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule45 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule46 = \ _outputfile ->
_outputfile
rule47 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule48 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule49 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule50 = \ _outputfile ->
_outputfile
data Inh_Chunks = Inh_Chunks { importBlocks_Inh_Chunks :: !(PP_Doc), isDeclOfLet_Inh_Chunks :: !(Bool), mainFile_Inh_Chunks :: !(String), mainName_Inh_Chunks :: !(String), moduleHeader_Inh_Chunks :: !(String -> String -> String -> Bool -> String), nested_Inh_Chunks :: !(Bool), options_Inh_Chunks :: !(Options), optionsLine_Inh_Chunks :: !(String), pragmaBlocks_Inh_Chunks :: !(String), textBlockMap_Inh_Chunks :: !(Map BlockInfo PP_Doc), textBlocks_Inh_Chunks :: !(PP_Doc) }
data Syn_Chunks = Syn_Chunks { appendCommon_Syn_Chunks :: !([[PP_Doc]]), appendMain_Syn_Chunks :: !([[PP_Doc]]), genSems_Syn_Chunks :: !(IO ()), imports_Syn_Chunks :: !([String]), pps_Syn_Chunks :: !(PP_Docs) }
wrap_Chunks :: T_Chunks -> Inh_Chunks -> (Syn_Chunks )
wrap_Chunks !(T_Chunks act) !(Inh_Chunks _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg10 = T_Chunks_vIn10 _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks
!(T_Chunks_vOut10 _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps) <- return (inv_Chunks_s11 sem arg10)
return (Syn_Chunks _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps)
)
sem_Chunks :: Chunks -> T_Chunks
sem_Chunks list = Prelude.foldr sem_Chunks_Cons sem_Chunks_Nil (Prelude.map sem_Chunk list)
newtype T_Chunks = T_Chunks {
attach_T_Chunks :: Identity (T_Chunks_s11 )
}
newtype T_Chunks_s11 = C_Chunks_s11 {
inv_Chunks_s11 :: (T_Chunks_v10 )
}
data T_Chunks_s12 = C_Chunks_s12
type T_Chunks_v10 = (T_Chunks_vIn10 ) -> (T_Chunks_vOut10 )
data T_Chunks_vIn10 = T_Chunks_vIn10 (PP_Doc) (Bool) (String) (String) (String -> String -> String -> Bool -> String) (Bool) (Options) (String) (String) (Map BlockInfo PP_Doc) (PP_Doc)
data T_Chunks_vOut10 = T_Chunks_vOut10 ([[PP_Doc]]) ([[PP_Doc]]) (IO ()) ([String]) (PP_Docs)
sem_Chunks_Cons :: T_Chunk -> T_Chunks -> T_Chunks
sem_Chunks_Cons arg_hd_ arg_tl_ = T_Chunks (return st11) where
!st11 = let
v10 :: T_Chunks_v10
v10 = \ !(T_Chunks_vIn10 _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) -> ( let
_hdX8 = Control.Monad.Identity.runIdentity (attach_T_Chunk (arg_hd_))
_tlX11 = Control.Monad.Identity.runIdentity (attach_T_Chunks (arg_tl_))
(T_Chunk_vOut7 _hdIappendCommon _hdIappendMain _hdIgenSems _hdIimports _hdIpps) = inv_Chunk_s8 _hdX8 (T_Chunk_vIn7 _hdOimportBlocks _hdOisDeclOfLet _hdOmainFile _hdOmainName _hdOmoduleHeader _hdOnested _hdOoptions _hdOoptionsLine _hdOpragmaBlocks _hdOtextBlockMap _hdOtextBlocks)
(T_Chunks_vOut10 _tlIappendCommon _tlIappendMain _tlIgenSems _tlIimports _tlIpps) = inv_Chunks_s11 _tlX11 (T_Chunks_vIn10 _tlOimportBlocks _tlOisDeclOfLet _tlOmainFile _tlOmainName _tlOmoduleHeader _tlOnested _tlOoptions _tlOoptionsLine _tlOpragmaBlocks _tlOtextBlockMap _tlOtextBlocks)
_lhsOpps :: PP_Docs
_lhsOpps = rule51 _hdIpps _tlIpps
_lhsOappendCommon :: [[PP_Doc]]
_lhsOappendCommon = rule52 _hdIappendCommon _tlIappendCommon
_lhsOappendMain :: [[PP_Doc]]
_lhsOappendMain = rule53 _hdIappendMain _tlIappendMain
_lhsOgenSems :: IO ()
_lhsOgenSems = rule54 _hdIgenSems _tlIgenSems
_lhsOimports :: [String]
_lhsOimports = rule55 _hdIimports _tlIimports
_hdOimportBlocks = rule56 _lhsIimportBlocks
_hdOisDeclOfLet = rule57 _lhsIisDeclOfLet
_hdOmainFile = rule58 _lhsImainFile
_hdOmainName = rule59 _lhsImainName
_hdOmoduleHeader = rule60 _lhsImoduleHeader
_hdOnested = rule61 _lhsInested
_hdOoptions = rule62 _lhsIoptions
_hdOoptionsLine = rule63 _lhsIoptionsLine
_hdOpragmaBlocks = rule64 _lhsIpragmaBlocks
_hdOtextBlockMap = rule65 _lhsItextBlockMap
_hdOtextBlocks = rule66 _lhsItextBlocks
_tlOimportBlocks = rule67 _lhsIimportBlocks
_tlOisDeclOfLet = rule68 _lhsIisDeclOfLet
_tlOmainFile = rule69 _lhsImainFile
_tlOmainName = rule70 _lhsImainName
_tlOmoduleHeader = rule71 _lhsImoduleHeader
_tlOnested = rule72 _lhsInested
_tlOoptions = rule73 _lhsIoptions
_tlOoptionsLine = rule74 _lhsIoptionsLine
_tlOpragmaBlocks = rule75 _lhsIpragmaBlocks
_tlOtextBlockMap = rule76 _lhsItextBlockMap
_tlOtextBlocks = rule77 _lhsItextBlocks
!__result_ = T_Chunks_vOut10 _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps
in __result_ )
in C_Chunks_s11 v10
rule51 = \ ((_hdIpps) :: PP_Docs) ((_tlIpps) :: PP_Docs) ->
_hdIpps ++ _tlIpps
rule52 = \ ((_hdIappendCommon) :: [[PP_Doc]]) ((_tlIappendCommon) :: [[PP_Doc]]) ->
_hdIappendCommon ++ _tlIappendCommon
rule53 = \ ((_hdIappendMain) :: [[PP_Doc]]) ((_tlIappendMain) :: [[PP_Doc]]) ->
_hdIappendMain ++ _tlIappendMain
rule54 = \ ((_hdIgenSems) :: IO ()) ((_tlIgenSems) :: IO ()) ->
_hdIgenSems >> _tlIgenSems
rule55 = \ ((_hdIimports) :: [String]) ((_tlIimports) :: [String]) ->
_hdIimports ++ _tlIimports
rule56 = \ ((_lhsIimportBlocks) :: PP_Doc) ->
_lhsIimportBlocks
rule57 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule58 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule59 = \ ((_lhsImainName) :: String) ->
_lhsImainName
rule60 = \ ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ->
_lhsImoduleHeader
rule61 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule62 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule63 = \ ((_lhsIoptionsLine) :: String) ->
_lhsIoptionsLine
rule64 = \ ((_lhsIpragmaBlocks) :: String) ->
_lhsIpragmaBlocks
rule65 = \ ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) ->
_lhsItextBlockMap
rule66 = \ ((_lhsItextBlocks) :: PP_Doc) ->
_lhsItextBlocks
rule67 = \ ((_lhsIimportBlocks) :: PP_Doc) ->
_lhsIimportBlocks
rule68 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule69 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule70 = \ ((_lhsImainName) :: String) ->
_lhsImainName
rule71 = \ ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ->
_lhsImoduleHeader
rule72 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule73 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule74 = \ ((_lhsIoptionsLine) :: String) ->
_lhsIoptionsLine
rule75 = \ ((_lhsIpragmaBlocks) :: String) ->
_lhsIpragmaBlocks
rule76 = \ ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) ->
_lhsItextBlockMap
rule77 = \ ((_lhsItextBlocks) :: PP_Doc) ->
_lhsItextBlocks
sem_Chunks_Nil :: T_Chunks
sem_Chunks_Nil = T_Chunks (return st11) where
!st11 = let
v10 :: T_Chunks_v10
v10 = \ !(T_Chunks_vIn10 _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule78 ()
_lhsOappendCommon :: [[PP_Doc]]
_lhsOappendCommon = rule79 ()
_lhsOappendMain :: [[PP_Doc]]
_lhsOappendMain = rule80 ()
_lhsOgenSems :: IO ()
_lhsOgenSems = rule81 ()
_lhsOimports :: [String]
_lhsOimports = rule82 ()
!__result_ = T_Chunks_vOut10 _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps
in __result_ )
in C_Chunks_s11 v10
rule78 = \ (_ :: ()) ->
[]
rule79 = \ (_ :: ()) ->
[]
rule80 = \ (_ :: ()) ->
[]
rule81 = \ (_ :: ()) ->
return ()
rule82 = \ (_ :: ()) ->
[]
data Inh_DataAlt = Inh_DataAlt { nested_Inh_DataAlt :: !(Bool), strictPre_Inh_DataAlt :: !(PP_Doc) }
data Syn_DataAlt = Syn_DataAlt { pp_Syn_DataAlt :: !(PP_Doc), ppa_Syn_DataAlt :: !(PP_Doc) }
wrap_DataAlt :: T_DataAlt -> Inh_DataAlt -> (Syn_DataAlt )
wrap_DataAlt !(T_DataAlt act) !(Inh_DataAlt _lhsInested _lhsIstrictPre) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg13 = T_DataAlt_vIn13 _lhsInested _lhsIstrictPre
!(T_DataAlt_vOut13 _lhsOpp _lhsOppa) <- return (inv_DataAlt_s14 sem arg13)
return (Syn_DataAlt _lhsOpp _lhsOppa)
)
sem_DataAlt :: DataAlt -> T_DataAlt
sem_DataAlt ( DataAlt !name_ args_ ) = sem_DataAlt_DataAlt name_ ( sem_Types args_ )
sem_DataAlt ( Record !name_ args_ ) = sem_DataAlt_Record name_ ( sem_NamedTypes args_ )
newtype T_DataAlt = T_DataAlt {
attach_T_DataAlt :: Identity (T_DataAlt_s14 )
}
newtype T_DataAlt_s14 = C_DataAlt_s14 {
inv_DataAlt_s14 :: (T_DataAlt_v13 )
}
data T_DataAlt_s15 = C_DataAlt_s15
type T_DataAlt_v13 = (T_DataAlt_vIn13 ) -> (T_DataAlt_vOut13 )
data T_DataAlt_vIn13 = T_DataAlt_vIn13 (Bool) (PP_Doc)
data T_DataAlt_vOut13 = T_DataAlt_vOut13 (PP_Doc) (PP_Doc)
sem_DataAlt_DataAlt :: (String) -> T_Types -> T_DataAlt
sem_DataAlt_DataAlt !arg_name_ arg_args_ = T_DataAlt (return st14) where
!st14 = let
v13 :: T_DataAlt_v13
v13 = \ !(T_DataAlt_vIn13 _lhsInested _lhsIstrictPre) -> ( let
_argsX53 = Control.Monad.Identity.runIdentity (attach_T_Types (arg_args_))
(T_Types_vOut52 _argsIcopy _argsIpps) = inv_Types_s53 _argsX53 (T_Types_vIn52 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule83 _argsIpps _lhsIstrictPre arg_name_
_lhsOppa :: PP_Doc
_lhsOppa = rule84 ()
_argsOnested = rule85 _lhsInested
!__result_ = T_DataAlt_vOut13 _lhsOpp _lhsOppa
in __result_ )
in C_DataAlt_s14 v13
rule83 = \ ((_argsIpps) :: PP_Docs) ((_lhsIstrictPre) :: PP_Doc) name_ ->
name_ >#< hv_sp (map ((_lhsIstrictPre >|<) . pp_parens) _argsIpps)
rule84 = \ (_ :: ()) ->
empty
rule85 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_DataAlt_Record :: (String) -> T_NamedTypes -> T_DataAlt
sem_DataAlt_Record !arg_name_ arg_args_ = T_DataAlt (return st14) where
!st14 = let
v13 :: T_DataAlt_v13
v13 = \ !(T_DataAlt_vIn13 _lhsInested _lhsIstrictPre) -> ( let
_argsX38 = Control.Monad.Identity.runIdentity (attach_T_NamedTypes (arg_args_))
(T_NamedTypes_vOut37 _argsIppas _argsIpps) = inv_NamedTypes_s38 _argsX38 (T_NamedTypes_vIn37 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule86 _argsIpps _lhsIstrictPre arg_name_
_lhsOppa :: PP_Doc
_lhsOppa = rule87 _argsIppas arg_name_
_argsOnested = rule88 _lhsInested
!__result_ = T_DataAlt_vOut13 _lhsOpp _lhsOppa
in __result_ )
in C_DataAlt_s14 v13
rule86 = \ ((_argsIpps) :: PP_Docs) ((_lhsIstrictPre) :: PP_Doc) name_ ->
name_ >#< hv_sp (map ((_lhsIstrictPre >|<) . pp_parens) _argsIpps)
rule87 = \ ((_argsIppas) :: PP_Docs) name_ ->
let f n d = d >#< (pp_block ("(" ++ name_) ")" "" $ map pp (ppat n))
>#< pp "=" >#< pp "x"
ppat n = replicate (length _argsIppas n 1) (pp " _") ++ [pp " x"] ++ replicate n (pp " _")
in snd $ foldr (\x (n, xs) -> (n + 1, f n x >-< xs)) (0, empty) _argsIppas
rule88 = \ ((_lhsInested) :: Bool) ->
_lhsInested
data Inh_DataAlts = Inh_DataAlts { nested_Inh_DataAlts :: !(Bool), strictPre_Inh_DataAlts :: !(PP_Doc) }
data Syn_DataAlts = Syn_DataAlts { ppas_Syn_DataAlts :: !(PP_Docs), pps_Syn_DataAlts :: !(PP_Docs) }
wrap_DataAlts :: T_DataAlts -> Inh_DataAlts -> (Syn_DataAlts )
wrap_DataAlts !(T_DataAlts act) !(Inh_DataAlts _lhsInested _lhsIstrictPre) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg16 = T_DataAlts_vIn16 _lhsInested _lhsIstrictPre
!(T_DataAlts_vOut16 _lhsOppas _lhsOpps) <- return (inv_DataAlts_s17 sem arg16)
return (Syn_DataAlts _lhsOppas _lhsOpps)
)
sem_DataAlts :: DataAlts -> T_DataAlts
sem_DataAlts list = Prelude.foldr sem_DataAlts_Cons sem_DataAlts_Nil (Prelude.map sem_DataAlt list)
newtype T_DataAlts = T_DataAlts {
attach_T_DataAlts :: Identity (T_DataAlts_s17 )
}
newtype T_DataAlts_s17 = C_DataAlts_s17 {
inv_DataAlts_s17 :: (T_DataAlts_v16 )
}
data T_DataAlts_s18 = C_DataAlts_s18
type T_DataAlts_v16 = (T_DataAlts_vIn16 ) -> (T_DataAlts_vOut16 )
data T_DataAlts_vIn16 = T_DataAlts_vIn16 (Bool) (PP_Doc)
data T_DataAlts_vOut16 = T_DataAlts_vOut16 (PP_Docs) (PP_Docs)
sem_DataAlts_Cons :: T_DataAlt -> T_DataAlts -> T_DataAlts
sem_DataAlts_Cons arg_hd_ arg_tl_ = T_DataAlts (return st17) where
!st17 = let
v16 :: T_DataAlts_v16
v16 = \ !(T_DataAlts_vIn16 _lhsInested _lhsIstrictPre) -> ( let
_hdX14 = Control.Monad.Identity.runIdentity (attach_T_DataAlt (arg_hd_))
_tlX17 = Control.Monad.Identity.runIdentity (attach_T_DataAlts (arg_tl_))
(T_DataAlt_vOut13 _hdIpp _hdIppa) = inv_DataAlt_s14 _hdX14 (T_DataAlt_vIn13 _hdOnested _hdOstrictPre)
(T_DataAlts_vOut16 _tlIppas _tlIpps) = inv_DataAlts_s17 _tlX17 (T_DataAlts_vIn16 _tlOnested _tlOstrictPre)
_lhsOpps :: PP_Docs
_lhsOpps = rule89 _hdIpp _tlIpps
_lhsOppas :: PP_Docs
_lhsOppas = rule90 _hdIppa _tlIppas
_hdOnested = rule91 _lhsInested
_hdOstrictPre = rule92 _lhsIstrictPre
_tlOnested = rule93 _lhsInested
_tlOstrictPre = rule94 _lhsIstrictPre
!__result_ = T_DataAlts_vOut16 _lhsOppas _lhsOpps
in __result_ )
in C_DataAlts_s17 v16
rule89 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule90 = \ ((_hdIppa) :: PP_Doc) ((_tlIppas) :: PP_Docs) ->
_hdIppa : _tlIppas
rule91 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule92 = \ ((_lhsIstrictPre) :: PP_Doc) ->
_lhsIstrictPre
rule93 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule94 = \ ((_lhsIstrictPre) :: PP_Doc) ->
_lhsIstrictPre
sem_DataAlts_Nil :: T_DataAlts
sem_DataAlts_Nil = T_DataAlts (return st17) where
!st17 = let
v16 :: T_DataAlts_v16
v16 = \ !(T_DataAlts_vIn16 _lhsInested _lhsIstrictPre) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule95 ()
_lhsOppas :: PP_Docs
_lhsOppas = rule96 ()
!__result_ = T_DataAlts_vOut16 _lhsOppas _lhsOpps
in __result_ )
in C_DataAlts_s17 v16
rule95 = \ (_ :: ()) ->
[]
rule96 = \ (_ :: ()) ->
[]
data Inh_Decl = Inh_Decl { isDeclOfLet_Inh_Decl :: !(Bool), nested_Inh_Decl :: !(Bool), options_Inh_Decl :: !(Options), outputfile_Inh_Decl :: !(String) }
data Syn_Decl = Syn_Decl { pp_Syn_Decl :: !(PP_Doc), ppa_Syn_Decl :: !(PP_Doc) }
wrap_Decl :: T_Decl -> Inh_Decl -> (Syn_Decl )
wrap_Decl !(T_Decl act) !(Inh_Decl _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg19 = T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Decl_vOut19 _lhsOpp _lhsOppa) <- return (inv_Decl_s20 sem arg19)
return (Syn_Decl _lhsOpp _lhsOppa)
)
sem_Decl :: Decl -> T_Decl
sem_Decl ( Decl left_ rhs_ !binds_ !uses_ ) = sem_Decl_Decl ( sem_Lhs left_ ) ( sem_Expr rhs_ ) binds_ uses_
sem_Decl ( Bind left_ rhs_ ) = sem_Decl_Bind ( sem_Lhs left_ ) ( sem_Expr rhs_ )
sem_Decl ( BindLet left_ rhs_ ) = sem_Decl_BindLet ( sem_Lhs left_ ) ( sem_Expr rhs_ )
sem_Decl ( Data !name_ !params_ alts_ !strict_ !derivings_ ) = sem_Decl_Data name_ params_ ( sem_DataAlts alts_ ) strict_ derivings_
sem_Decl ( NewType !name_ !params_ !con_ tp_ ) = sem_Decl_NewType name_ params_ con_ ( sem_Type tp_ )
sem_Decl ( Type !name_ !params_ tp_ ) = sem_Decl_Type name_ params_ ( sem_Type tp_ )
sem_Decl ( TSig !name_ tp_ ) = sem_Decl_TSig name_ ( sem_Type tp_ )
sem_Decl ( Comment !txt_ ) = sem_Decl_Comment txt_
sem_Decl ( PragmaDecl !txt_ ) = sem_Decl_PragmaDecl txt_
sem_Decl ( Resume !monadic_ !nt_ left_ rhs_ ) = sem_Decl_Resume monadic_ nt_ ( sem_Lhs left_ ) ( sem_Expr rhs_ )
sem_Decl ( EvalDecl !nt_ left_ rhs_ ) = sem_Decl_EvalDecl nt_ ( sem_Lhs left_ ) ( sem_Expr rhs_ )
newtype T_Decl = T_Decl {
attach_T_Decl :: Identity (T_Decl_s20 )
}
newtype T_Decl_s20 = C_Decl_s20 {
inv_Decl_s20 :: (T_Decl_v19 )
}
data T_Decl_s21 = C_Decl_s21
type T_Decl_v19 = (T_Decl_vIn19 ) -> (T_Decl_vOut19 )
data T_Decl_vIn19 = T_Decl_vIn19 (Bool) (Bool) (Options) (String)
data T_Decl_vOut19 = T_Decl_vOut19 (PP_Doc) (PP_Doc)
sem_Decl_Decl :: T_Lhs -> T_Expr -> (Set String) -> (Set String) -> T_Decl
sem_Decl_Decl arg_left_ arg_rhs_ _ _ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule97 _leftIpp _rhsIpp
_lhsOppa :: PP_Doc
_lhsOppa = rule98 ()
_leftOisDeclOfLet = rule99 _lhsIisDeclOfLet
_leftOnested = rule100 _lhsInested
_leftOoptions = rule101 _lhsIoptions
_leftOoutputfile = rule102 _lhsIoutputfile
_rhsOnested = rule103 _lhsInested
_rhsOoptions = rule104 _lhsIoptions
_rhsOoutputfile = rule105 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule97 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
_leftIpp >#< "="
>-< indent 4 _rhsIpp
rule98 = \ (_ :: ()) ->
empty
rule99 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule100 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule101 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule102 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule103 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule104 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule105 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Decl_Bind :: T_Lhs -> T_Expr -> T_Decl
sem_Decl_Bind arg_left_ arg_rhs_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule106 _leftIpp _rhsIpp
_lhsOppa :: PP_Doc
_lhsOppa = rule107 ()
_leftOisDeclOfLet = rule108 _lhsIisDeclOfLet
_leftOnested = rule109 _lhsInested
_leftOoptions = rule110 _lhsIoptions
_leftOoutputfile = rule111 _lhsIoutputfile
_rhsOnested = rule112 _lhsInested
_rhsOoptions = rule113 _lhsIoptions
_rhsOoutputfile = rule114 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule106 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
_leftIpp >#< "<-" >#< _rhsIpp
rule107 = \ (_ :: ()) ->
empty
rule108 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule109 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule110 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule111 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule112 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule113 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule114 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Decl_BindLet :: T_Lhs -> T_Expr -> T_Decl
sem_Decl_BindLet arg_left_ arg_rhs_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule115 _leftIpp _rhsIpp
_lhsOppa :: PP_Doc
_lhsOppa = rule116 ()
_leftOisDeclOfLet = rule117 _lhsIisDeclOfLet
_leftOnested = rule118 _lhsInested
_leftOoptions = rule119 _lhsIoptions
_leftOoutputfile = rule120 _lhsIoutputfile
_rhsOnested = rule121 _lhsInested
_rhsOoptions = rule122 _lhsIoptions
_rhsOoutputfile = rule123 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule115 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
"let" >#< _leftIpp >#< "=" >#< _rhsIpp
rule116 = \ (_ :: ()) ->
empty
rule117 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule118 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule119 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule120 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule121 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule122 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule123 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Decl_Data :: (String) -> ([String]) -> T_DataAlts -> (Bool) -> ([String]) -> T_Decl
sem_Decl_Data !arg_name_ !arg_params_ arg_alts_ !arg_strict_ !arg_derivings_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_altsX17 = Control.Monad.Identity.runIdentity (attach_T_DataAlts (arg_alts_))
(T_DataAlts_vOut16 _altsIppas _altsIpps) = inv_DataAlts_s17 _altsX17 (T_DataAlts_vIn16 _altsOnested _altsOstrictPre)
_lhsOpp :: PP_Doc
_lhsOpp = rule124 _altsIppas _altsIpps arg_derivings_ arg_name_ arg_params_
_altsOstrictPre = rule125 arg_strict_
_lhsOppa :: PP_Doc
_lhsOppa = rule126 ()
_altsOnested = rule127 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule124 = \ ((_altsIppas) :: PP_Docs) ((_altsIpps) :: PP_Docs) derivings_ name_ params_ ->
"::" >#< hv_sp (name_ : params_)
>#< ( case _altsIpps of
[] -> empty
(x:xs) -> "=" >#< x
>-< vlist (map ("|" >#<) xs)
>-< if null derivings_
then empty
else "deriving" >#< ppTuple False (map text derivings_)
)
>-< foldr (>-<) empty _altsIppas
rule125 = \ strict_ ->
if strict_ then pp "!" else empty
rule126 = \ (_ :: ()) ->
empty
rule127 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Decl_NewType :: (String) -> ([String]) -> (String) -> T_Type -> T_Decl
sem_Decl_NewType !arg_name_ !arg_params_ !arg_con_ arg_tp_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule128 _tpIpp arg_con_ arg_name_ arg_params_
_lhsOppa :: PP_Doc
_lhsOppa = rule129 ()
_tpOnested = rule130 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule128 = \ ((_tpIpp) :: PP_Doc) con_ name_ params_ ->
"::" >#< hv_sp (name_ : params_) >#< "=" >#< con_ >#< pp_parens _tpIpp
rule129 = \ (_ :: ()) ->
empty
rule130 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Decl_Type :: (String) -> ([String]) -> T_Type -> T_Decl
sem_Decl_Type !arg_name_ !arg_params_ arg_tp_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule131 _tpIpp arg_name_ arg_params_
_lhsOppa :: PP_Doc
_lhsOppa = rule132 ()
_tpOnested = rule133 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule131 = \ ((_tpIpp) :: PP_Doc) name_ params_ ->
"::" >#< hv_sp (name_ : params_) >#< ":==" >#< _tpIpp
rule132 = \ (_ :: ()) ->
empty
rule133 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Decl_TSig :: (String) -> T_Type -> T_Decl
sem_Decl_TSig !arg_name_ arg_tp_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule134 _tpIpp arg_name_
_lhsOppa :: PP_Doc
_lhsOppa = rule135 ()
_tpOnested = rule136 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule134 = \ ((_tpIpp) :: PP_Doc) name_ ->
name_ >#< "::" >#< _tpIpp
rule135 = \ (_ :: ()) ->
empty
rule136 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Decl_Comment :: (String) -> T_Decl
sem_Decl_Comment !arg_txt_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpp :: PP_Doc
_lhsOpp = rule137 arg_txt_
_lhsOppa :: PP_Doc
_lhsOppa = rule138 ()
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule137 = \ txt_ ->
if '\n' `elem` txt_
then "/*" >-< vlist (lines txt_) >-< "*/"
else "//" >#< txt_
rule138 = \ (_ :: ()) ->
empty
sem_Decl_PragmaDecl :: (String) -> T_Decl
sem_Decl_PragmaDecl !arg_txt_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpp :: PP_Doc
_lhsOpp = rule139 arg_txt_
_lhsOppa :: PP_Doc
_lhsOppa = rule140 ()
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule139 = \ txt_ ->
"/*#" >#< text txt_ >#< "#*/"
rule140 = \ (_ :: ()) ->
empty
sem_Decl_Resume :: (Bool) -> (String) -> T_Lhs -> T_Expr -> T_Decl
sem_Decl_Resume !arg_monadic_ _ arg_left_ arg_rhs_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule141 _leftIpp _rhsIpp arg_monadic_
_lhsOppa :: PP_Doc
_lhsOppa = rule142 ()
_leftOisDeclOfLet = rule143 _lhsIisDeclOfLet
_leftOnested = rule144 _lhsInested
_leftOoptions = rule145 _lhsIoptions
_leftOoutputfile = rule146 _lhsIoutputfile
_rhsOnested = rule147 _lhsInested
_rhsOoptions = rule148 _lhsIoptions
_rhsOoutputfile = rule149 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule141 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) monadic_ ->
if monadic_
then _leftIpp >#< "<-" >#< _rhsIpp
else _leftIpp >#< "=" >-< indent 4 _rhsIpp
rule142 = \ (_ :: ()) ->
empty
rule143 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule144 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule145 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule146 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule147 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule148 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule149 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Decl_EvalDecl :: (String) -> T_Lhs -> T_Expr -> T_Decl
sem_Decl_EvalDecl !arg_nt_ arg_left_ arg_rhs_ = T_Decl (return st20) where
!st20 = let
v19 :: T_Decl_v19
v19 = \ !(T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_strat = rule150 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule151 _leftIpp _lhsIoptions _rhsIpp _strat arg_nt_
_lhsOppa :: PP_Doc
_lhsOppa = rule152 ()
_leftOisDeclOfLet = rule153 _lhsIisDeclOfLet
_leftOnested = rule154 _lhsInested
_leftOoptions = rule155 _lhsIoptions
_leftOoutputfile = rule156 _lhsIoutputfile
_rhsOnested = rule157 _lhsInested
_rhsOoptions = rule158 _lhsIoptions
_rhsOoutputfile = rule159 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp _lhsOppa
in __result_ )
in C_Decl_s20 v19
rule150 = \ ((_lhsIoptions) :: Options) ->
if breadthFirstStrict _lhsIoptions
then "stepwiseEval"
else "lazyEval"
rule151 = \ ((_leftIpp) :: PP_Doc) ((_lhsIoptions) :: Options) ((_rhsIpp) :: PP_Doc) _strat nt_ ->
if breadthFirst _lhsIoptions
then _leftIpp >#< "=" >#< "case" >#< _strat >#< pp_parens _rhsIpp >#< "of"
>-< indent 4 (
pp_parens (nt_ >|< "_Syn" >#< "_val") >#< "-> _val"
)
else _leftIpp >#< "=" >#< _rhsIpp
rule152 = \ (_ :: ()) ->
empty
rule153 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule154 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule155 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule156 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule157 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule158 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule159 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
data Inh_Decls = Inh_Decls { isDeclOfLet_Inh_Decls :: !(Bool), nested_Inh_Decls :: !(Bool), options_Inh_Decls :: !(Options), outputfile_Inh_Decls :: !(String) }
data Syn_Decls = Syn_Decls { pps_Syn_Decls :: !(PP_Docs) }
wrap_Decls :: T_Decls -> Inh_Decls -> (Syn_Decls )
wrap_Decls !(T_Decls act) !(Inh_Decls _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg22 = T_Decls_vIn22 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Decls_vOut22 _lhsOpps) <- return (inv_Decls_s23 sem arg22)
return (Syn_Decls _lhsOpps)
)
sem_Decls :: Decls -> T_Decls
sem_Decls list = Prelude.foldr sem_Decls_Cons sem_Decls_Nil (Prelude.map sem_Decl list)
newtype T_Decls = T_Decls {
attach_T_Decls :: Identity (T_Decls_s23 )
}
newtype T_Decls_s23 = C_Decls_s23 {
inv_Decls_s23 :: (T_Decls_v22 )
}
data T_Decls_s24 = C_Decls_s24
type T_Decls_v22 = (T_Decls_vIn22 ) -> (T_Decls_vOut22 )
data T_Decls_vIn22 = T_Decls_vIn22 (Bool) (Bool) (Options) (String)
data T_Decls_vOut22 = T_Decls_vOut22 (PP_Docs)
sem_Decls_Cons :: T_Decl -> T_Decls -> T_Decls
sem_Decls_Cons arg_hd_ arg_tl_ = T_Decls (return st23) where
!st23 = let
v22 :: T_Decls_v22
v22 = \ !(T_Decls_vIn22 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_hdX20 = Control.Monad.Identity.runIdentity (attach_T_Decl (arg_hd_))
_tlX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_tl_))
(T_Decl_vOut19 _hdIpp _hdIppa) = inv_Decl_s20 _hdX20 (T_Decl_vIn19 _hdOisDeclOfLet _hdOnested _hdOoptions _hdOoutputfile)
(T_Decls_vOut22 _tlIpps) = inv_Decls_s23 _tlX23 (T_Decls_vIn22 _tlOisDeclOfLet _tlOnested _tlOoptions _tlOoutputfile)
_lhsOpps :: PP_Docs
_lhsOpps = rule160 _hdIpp _tlIpps
_hdOisDeclOfLet = rule161 _lhsIisDeclOfLet
_hdOnested = rule162 _lhsInested
_hdOoptions = rule163 _lhsIoptions
_hdOoutputfile = rule164 _lhsIoutputfile
_tlOisDeclOfLet = rule165 _lhsIisDeclOfLet
_tlOnested = rule166 _lhsInested
_tlOoptions = rule167 _lhsIoptions
_tlOoutputfile = rule168 _lhsIoutputfile
!__result_ = T_Decls_vOut22 _lhsOpps
in __result_ )
in C_Decls_s23 v22
rule160 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule161 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule162 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule163 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule164 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule165 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule166 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule167 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule168 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Decls_Nil :: T_Decls
sem_Decls_Nil = T_Decls (return st23) where
!st23 = let
v22 :: T_Decls_v22
v22 = \ !(T_Decls_vIn22 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule169 ()
!__result_ = T_Decls_vOut22 _lhsOpps
in __result_ )
in C_Decls_s23 v22
rule169 = \ (_ :: ()) ->
[]
data Inh_Expr = Inh_Expr { nested_Inh_Expr :: !(Bool), options_Inh_Expr :: !(Options), outputfile_Inh_Expr :: !(String) }
data Syn_Expr = Syn_Expr { pp_Syn_Expr :: !(PP_Doc) }
wrap_Expr :: T_Expr -> Inh_Expr -> (Syn_Expr )
wrap_Expr !(T_Expr act) !(Inh_Expr _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg25 = T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Expr_vOut25 _lhsOpp) <- return (inv_Expr_s26 sem arg25)
return (Syn_Expr _lhsOpp)
)
sem_Expr :: Expr -> T_Expr
sem_Expr ( Let decls_ body_ ) = sem_Expr_Let ( sem_Decls decls_ ) ( sem_Expr body_ )
sem_Expr ( Case expr_ alts_ ) = sem_Expr_Case ( sem_Expr expr_ ) ( sem_CaseAlts alts_ )
sem_Expr ( Do stmts_ body_ ) = sem_Expr_Do ( sem_Decls stmts_ ) ( sem_Expr body_ )
sem_Expr ( Lambda args_ body_ ) = sem_Expr_Lambda ( sem_Exprs args_ ) ( sem_Expr body_ )
sem_Expr ( TupleExpr exprs_ ) = sem_Expr_TupleExpr ( sem_Exprs exprs_ )
sem_Expr ( UnboxedTupleExpr exprs_ ) = sem_Expr_UnboxedTupleExpr ( sem_Exprs exprs_ )
sem_Expr ( App !name_ args_ ) = sem_Expr_App name_ ( sem_Exprs args_ )
sem_Expr ( SimpleExpr !txt_ ) = sem_Expr_SimpleExpr txt_
sem_Expr ( TextExpr !lns_ ) = sem_Expr_TextExpr lns_
sem_Expr ( Trace !txt_ expr_ ) = sem_Expr_Trace txt_ ( sem_Expr expr_ )
sem_Expr ( PragmaExpr !onLeftSide_ !onNewLine_ !txt_ expr_ ) = sem_Expr_PragmaExpr onLeftSide_ onNewLine_ txt_ ( sem_Expr expr_ )
sem_Expr ( LineExpr expr_ ) = sem_Expr_LineExpr ( sem_Expr expr_ )
sem_Expr ( TypedExpr expr_ tp_ ) = sem_Expr_TypedExpr ( sem_Expr expr_ ) ( sem_Type tp_ )
sem_Expr ( ResultExpr !nt_ expr_ ) = sem_Expr_ResultExpr nt_ ( sem_Expr expr_ )
sem_Expr ( InvokeExpr !nt_ expr_ args_ ) = sem_Expr_InvokeExpr nt_ ( sem_Expr expr_ ) ( sem_Exprs args_ )
sem_Expr ( ResumeExpr !nt_ expr_ left_ rhs_ ) = sem_Expr_ResumeExpr nt_ ( sem_Expr expr_ ) ( sem_Lhs left_ ) ( sem_Expr rhs_ )
sem_Expr ( SemFun !nt_ args_ body_ ) = sem_Expr_SemFun nt_ ( sem_Exprs args_ ) ( sem_Expr body_ )
newtype T_Expr = T_Expr {
attach_T_Expr :: Identity (T_Expr_s26 )
}
newtype T_Expr_s26 = C_Expr_s26 {
inv_Expr_s26 :: (T_Expr_v25 )
}
data T_Expr_s27 = C_Expr_s27
type T_Expr_v25 = (T_Expr_vIn25 ) -> (T_Expr_vOut25 )
data T_Expr_vIn25 = T_Expr_vIn25 (Bool) (Options) (String)
data T_Expr_vOut25 = T_Expr_vOut25 (PP_Doc)
sem_Expr_Let :: T_Decls -> T_Expr -> T_Expr
sem_Expr_Let arg_decls_ arg_body_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_declsX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_decls_))
_bodyX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_body_))
(T_Decls_vOut22 _declsIpps) = inv_Decls_s23 _declsX23 (T_Decls_vIn22 _declsOisDeclOfLet _declsOnested _declsOoptions _declsOoutputfile)
(T_Expr_vOut25 _bodyIpp) = inv_Expr_s26 _bodyX26 (T_Expr_vIn25 _bodyOnested _bodyOoptions _bodyOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule170 _bodyIpp _declsIpps
_declsOisDeclOfLet = rule171 ()
_declsOnested = rule172 _lhsInested
_declsOoptions = rule173 _lhsIoptions
_declsOoutputfile = rule174 _lhsIoutputfile
_bodyOnested = rule175 _lhsInested
_bodyOoptions = rule176 _lhsIoptions
_bodyOoutputfile = rule177 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule170 = \ ((_bodyIpp) :: PP_Doc) ((_declsIpps) :: PP_Docs) ->
pp_parens ( "let" >#< (vlist _declsIpps)
>-< "in " >#< _bodyIpp
)
rule171 = \ (_ :: ()) ->
True
rule172 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule173 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule174 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule175 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule176 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule177 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_Case :: T_Expr -> T_CaseAlts -> T_Expr
sem_Expr_Case arg_expr_ arg_alts_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
_altsX5 = Control.Monad.Identity.runIdentity (attach_T_CaseAlts (arg_alts_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
(T_CaseAlts_vOut4 _altsIpps) = inv_CaseAlts_s5 _altsX5 (T_CaseAlts_vIn4 _altsOnested _altsOoptions _altsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule178 _altsIpps _exprIpp
_exprOnested = rule179 _lhsInested
_exprOoptions = rule180 _lhsIoptions
_exprOoutputfile = rule181 _lhsIoutputfile
_altsOnested = rule182 _lhsInested
_altsOoptions = rule183 _lhsIoptions
_altsOoutputfile = rule184 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule178 = \ ((_altsIpps) :: PP_Docs) ((_exprIpp) :: PP_Doc) ->
pp_parens ( "case" >#< pp_parens _exprIpp >#< "of"
>-< (vlist _altsIpps)
)
rule179 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule180 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule181 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule182 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule183 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule184 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_Do :: T_Decls -> T_Expr -> T_Expr
sem_Expr_Do arg_stmts_ arg_body_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_stmtsX23 = Control.Monad.Identity.runIdentity (attach_T_Decls (arg_stmts_))
_bodyX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_body_))
(T_Decls_vOut22 _stmtsIpps) = inv_Decls_s23 _stmtsX23 (T_Decls_vIn22 _stmtsOisDeclOfLet _stmtsOnested _stmtsOoptions _stmtsOoutputfile)
(T_Expr_vOut25 _bodyIpp) = inv_Expr_s26 _bodyX26 (T_Expr_vIn25 _bodyOnested _bodyOoptions _bodyOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule185 _bodyIpp _stmtsIpps
_stmtsOisDeclOfLet = rule186 ()
_stmtsOnested = rule187 _lhsInested
_stmtsOoptions = rule188 _lhsIoptions
_stmtsOoutputfile = rule189 _lhsIoutputfile
_bodyOnested = rule190 _lhsInested
_bodyOoptions = rule191 _lhsIoptions
_bodyOoutputfile = rule192 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule185 = \ ((_bodyIpp) :: PP_Doc) ((_stmtsIpps) :: PP_Docs) ->
pp_parens ( "do" >#< ( vlist _stmtsIpps
>-< ("return" >#< _bodyIpp))
)
rule186 = \ (_ :: ()) ->
False
rule187 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule188 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule189 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule190 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule191 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule192 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_Lambda :: T_Exprs -> T_Expr -> T_Expr
sem_Expr_Lambda arg_args_ arg_body_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_argsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_args_))
_bodyX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_body_))
(T_Exprs_vOut28 _argsIpps) = inv_Exprs_s29 _argsX29 (T_Exprs_vIn28 _argsOnested _argsOoptions _argsOoutputfile)
(T_Expr_vOut25 _bodyIpp) = inv_Expr_s26 _bodyX26 (T_Expr_vIn25 _bodyOnested _bodyOoptions _bodyOoutputfile)
_strictParams = rule193 _argsIpps _lhsIoptions
_addBang = rule194 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule195 _addBang _argsIpps _bodyIpp _strictParams
_argsOnested = rule196 _lhsInested
_argsOoptions = rule197 _lhsIoptions
_argsOoutputfile = rule198 _lhsIoutputfile
_bodyOnested = rule199 _lhsInested
_bodyOoptions = rule200 _lhsIoptions
_bodyOoutputfile = rule201 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule193 = \ ((_argsIpps) :: PP_Docs) ((_lhsIoptions) :: Options) ->
if strictSems _lhsIoptions
then _argsIpps
else []
rule194 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> pp_parens ("!" >|< p)
else id
rule195 = \ _addBang ((_argsIpps) :: PP_Docs) ((_bodyIpp) :: PP_Doc) _strictParams ->
pp_parens ( "\\" >#< (vlist (map _addBang _argsIpps)) >#< "->"
>-< indent 4 (_strictParams `ppMultiSeqV` _bodyIpp)
)
rule196 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule197 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule198 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule199 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule200 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule201 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_TupleExpr :: T_Exprs -> T_Expr
sem_Expr_TupleExpr arg_exprs_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_exprs_))
(T_Exprs_vOut28 _exprsIpps) = inv_Exprs_s29 _exprsX29 (T_Exprs_vIn28 _exprsOnested _exprsOoptions _exprsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule202 _exprsIpps _lhsInested
_exprsOnested = rule203 _lhsInested
_exprsOoptions = rule204 _lhsIoptions
_exprsOoutputfile = rule205 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule202 = \ ((_exprsIpps) :: PP_Docs) ((_lhsInested) :: Bool) ->
ppTuple _lhsInested _exprsIpps
rule203 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule204 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule205 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_UnboxedTupleExpr :: T_Exprs -> T_Expr
sem_Expr_UnboxedTupleExpr arg_exprs_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_exprs_))
(T_Exprs_vOut28 _exprsIpps) = inv_Exprs_s29 _exprsX29 (T_Exprs_vIn28 _exprsOnested _exprsOoptions _exprsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule206 _exprsIpps _lhsInested
_exprsOnested = rule207 _lhsInested
_exprsOoptions = rule208 _lhsIoptions
_exprsOoutputfile = rule209 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule206 = \ ((_exprsIpps) :: PP_Docs) ((_lhsInested) :: Bool) ->
ppUnboxedTuple _lhsInested _exprsIpps
rule207 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule208 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule209 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_App :: (String) -> T_Exprs -> T_Expr
sem_Expr_App !arg_name_ arg_args_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_argsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_args_))
(T_Exprs_vOut28 _argsIpps) = inv_Exprs_s29 _argsX29 (T_Exprs_vIn28 _argsOnested _argsOoptions _argsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule210 _argsIpps arg_name_
_argsOnested = rule211 _lhsInested
_argsOoptions = rule212 _lhsIoptions
_argsOoutputfile = rule213 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule210 = \ ((_argsIpps) :: PP_Docs) name_ ->
pp_parens $ name_ >#< hv_sp _argsIpps
rule211 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule212 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule213 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_SimpleExpr :: (String) -> T_Expr
sem_Expr_SimpleExpr !arg_txt_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpp :: PP_Doc
_lhsOpp = rule214 arg_txt_
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule214 = \ txt_ ->
text txt_
sem_Expr_TextExpr :: ([String]) -> T_Expr
sem_Expr_TextExpr !arg_lns_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpp :: PP_Doc
_lhsOpp = rule215 arg_lns_
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule215 = \ lns_ ->
vlist (map text lns_)
sem_Expr_Trace :: (String) -> T_Expr -> T_Expr
sem_Expr_Trace !arg_txt_ arg_expr_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule216 _exprIpp arg_txt_
_exprOnested = rule217 _lhsInested
_exprOoptions = rule218 _lhsIoptions
_exprOoutputfile = rule219 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule216 = \ ((_exprIpp) :: PP_Doc) txt_ ->
"trace" >#< ( pp_parens ("\"" >|< text txt_ >|< "\"")
>-< pp_parens _exprIpp
)
rule217 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule218 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule219 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_PragmaExpr :: (Bool) -> (Bool) -> (String) -> T_Expr -> T_Expr
sem_Expr_PragmaExpr !arg_onLeftSide_ !arg_onNewLine_ !arg_txt_ arg_expr_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule220 _exprIpp arg_onLeftSide_ arg_onNewLine_ arg_txt_
_exprOnested = rule221 _lhsInested
_exprOoptions = rule222 _lhsIoptions
_exprOoutputfile = rule223 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule220 = \ ((_exprIpp) :: PP_Doc) onLeftSide_ onNewLine_ txt_ ->
let pragmaDoc = "/*#" >#< txt_ >#< "#*/"
op = if onNewLine_
then (>-<)
else (>#<)
leftOp x y = if onLeftSide_
then x `op` y
else y
rightOp x y = if onLeftSide_
then x
else x `op` y
in pp_parens (pragmaDoc `leftOp` _exprIpp `rightOp` pragmaDoc)
rule221 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule222 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule223 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_LineExpr :: T_Expr -> T_Expr
sem_Expr_LineExpr arg_expr_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule224 _exprIpp _lhsIoutputfile
_exprOnested = rule225 _lhsInested
_exprOoptions = rule226 _lhsIoptions
_exprOoutputfile = rule227 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule224 = \ ((_exprIpp) :: PP_Doc) ((_lhsIoutputfile) :: String) ->
_exprIpp >-< "/*# LINE" >#< ppWithLineNr (\n -> pp $ show $ n + 1) >#< show _lhsIoutputfile >#< "#*/"
>-< ""
rule225 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule226 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule227 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_TypedExpr :: T_Expr -> T_Type -> T_Expr
sem_Expr_TypedExpr arg_expr_ arg_tp_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule228 _exprIpp _tpIpp
_exprOnested = rule229 _lhsInested
_exprOoptions = rule230 _lhsIoptions
_exprOoutputfile = rule231 _lhsIoutputfile
_tpOnested = rule232 _lhsInested
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule228 = \ ((_exprIpp) :: PP_Doc) ((_tpIpp) :: PP_Doc) ->
pp_parens (_exprIpp >#< "::" >#< _tpIpp)
rule229 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule230 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule231 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule232 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Expr_ResultExpr :: (String) -> T_Expr -> T_Expr
sem_Expr_ResultExpr !arg_nt_ arg_expr_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule233 _exprIpp _lhsIoptions arg_nt_
_exprOnested = rule234 _lhsInested
_exprOoptions = rule235 _lhsIoptions
_exprOoutputfile = rule236 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule233 = \ ((_exprIpp) :: PP_Doc) ((_lhsIoptions) :: Options) nt_ ->
if breadthFirst _lhsIoptions
then "final" >#<
pp_parens (nt_ >|< "_Syn" >#< pp_parens _exprIpp)
else _exprIpp
rule234 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule235 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule236 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_InvokeExpr :: (String) -> T_Expr -> T_Exprs -> T_Expr
sem_Expr_InvokeExpr !arg_nt_ arg_expr_ arg_args_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
_argsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_args_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
(T_Exprs_vOut28 _argsIpps) = inv_Exprs_s29 _argsX29 (T_Exprs_vIn28 _argsOnested _argsOoptions _argsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule237 _argsIpps _exprIpp _lhsIoptions arg_nt_
_exprOnested = rule238 _lhsInested
_exprOoptions = rule239 _lhsIoptions
_exprOoutputfile = rule240 _lhsIoutputfile
_argsOnested = rule241 _lhsInested
_argsOoptions = rule242 _lhsIoptions
_argsOoutputfile = rule243 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule237 = \ ((_argsIpps) :: PP_Docs) ((_exprIpp) :: PP_Doc) ((_lhsIoptions) :: Options) nt_ ->
if breadthFirst _lhsIoptions
then "invoke" >#< pp_parens _exprIpp >#< pp_parens (
nt_ >|< "_Inh" >#< pp_parens (ppTuple False _argsIpps))
else _exprIpp >#< hv_sp _argsIpps
rule238 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule239 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule240 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule241 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule242 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule243 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_ResumeExpr :: (String) -> T_Expr -> T_Lhs -> T_Expr -> T_Expr
sem_Expr_ResumeExpr !arg_nt_ arg_expr_ arg_left_ arg_rhs_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_exprX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_expr_))
_leftX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_left_))
_rhsX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_rhs_))
(T_Expr_vOut25 _exprIpp) = inv_Expr_s26 _exprX26 (T_Expr_vIn25 _exprOnested _exprOoptions _exprOoutputfile)
(T_Lhs_vOut31 _leftIpp) = inv_Lhs_s32 _leftX32 (T_Lhs_vIn31 _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile)
(T_Expr_vOut25 _rhsIpp) = inv_Expr_s26 _rhsX26 (T_Expr_vIn25 _rhsOnested _rhsOoptions _rhsOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule244 _exprIpp _leftIpp _lhsIoptions _rhsIpp arg_nt_
_leftOisDeclOfLet = rule245 ()
_exprOnested = rule246 _lhsInested
_exprOoptions = rule247 _lhsIoptions
_exprOoutputfile = rule248 _lhsIoutputfile
_leftOnested = rule249 _lhsInested
_leftOoptions = rule250 _lhsIoptions
_leftOoutputfile = rule251 _lhsIoutputfile
_rhsOnested = rule252 _lhsInested
_rhsOoptions = rule253 _lhsIoptions
_rhsOoutputfile = rule254 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule244 = \ ((_exprIpp) :: PP_Doc) ((_leftIpp) :: PP_Doc) ((_lhsIoptions) :: Options) ((_rhsIpp) :: PP_Doc) nt_ ->
if breadthFirst _lhsIoptions
then pp_parens ("resume" >#< pp_parens _exprIpp
>-< indent 2 (pp_parens ( "\\" >|<
pp_parens ("~" >|< pp_parens (nt_ >|< "_Syn" >#< "_inh_arg"))
>#< "->"
>-< indent 2 ( "let" >#< _leftIpp >#< "= _inh_arg"
>-< indent 2 ("in" >#< _rhsIpp)
))))
else pp_parens ( "case" >#< pp_parens _exprIpp >#< "of"
>-< ("{" >#< _leftIpp >#< "->")
>-< indent 4 (_rhsIpp >#< "}")
)
rule245 = \ (_ :: ()) ->
False
rule246 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule247 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule248 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule249 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule250 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule251 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule252 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule253 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule254 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Expr_SemFun :: (String) -> T_Exprs -> T_Expr -> T_Expr
sem_Expr_SemFun !arg_nt_ arg_args_ arg_body_ = T_Expr (return st26) where
!st26 = let
v25 :: T_Expr_v25
v25 = \ !(T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_argsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_args_))
_bodyX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_body_))
(T_Exprs_vOut28 _argsIpps) = inv_Exprs_s29 _argsX29 (T_Exprs_vIn28 _argsOnested _argsOoptions _argsOoutputfile)
(T_Expr_vOut25 _bodyIpp) = inv_Expr_s26 _bodyX26 (T_Expr_vIn25 _bodyOnested _bodyOoptions _bodyOoutputfile)
_strictParams = rule255 _argsIpps _lhsIoptions
_addBang = rule256 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule257 _addBang _argsIpps _bodyIpp _lhsIoptions _strictParams arg_nt_
_argsOnested = rule258 _lhsInested
_argsOoptions = rule259 _lhsIoptions
_argsOoutputfile = rule260 _lhsIoutputfile
_bodyOnested = rule261 _lhsInested
_bodyOoptions = rule262 _lhsIoptions
_bodyOoutputfile = rule263 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule255 = \ ((_argsIpps) :: PP_Docs) ((_lhsIoptions) :: Options) ->
if strictSems _lhsIoptions
then _argsIpps
else []
rule256 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> pp_parens ("!" >|< p)
else id
rule257 = \ _addBang ((_argsIpps) :: PP_Docs) ((_bodyIpp) :: PP_Doc) ((_lhsIoptions) :: Options) _strictParams nt_ ->
if breadthFirst _lhsIoptions
then "Child" >#< pp_parens ( "\\" >|<
pp_parens (nt_ >|< "_Inh" >#<
ppTuple False (map _addBang _argsIpps)) >#< "->"
>-< indent 2 (_strictParams `ppMultiSeqV` _bodyIpp))
else if null _argsIpps
then _bodyIpp
else pp_parens ( "\\" >#< (vlist (map _addBang _argsIpps)) >#< "->"
>-< indent 4 (_strictParams `ppMultiSeqV` _bodyIpp)
)
rule258 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule259 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule260 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule261 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule262 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule263 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
data Inh_Exprs = Inh_Exprs { nested_Inh_Exprs :: !(Bool), options_Inh_Exprs :: !(Options), outputfile_Inh_Exprs :: !(String) }
data Syn_Exprs = Syn_Exprs { pps_Syn_Exprs :: !(PP_Docs) }
wrap_Exprs :: T_Exprs -> Inh_Exprs -> (Syn_Exprs )
wrap_Exprs !(T_Exprs act) !(Inh_Exprs _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg28 = T_Exprs_vIn28 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Exprs_vOut28 _lhsOpps) <- return (inv_Exprs_s29 sem arg28)
return (Syn_Exprs _lhsOpps)
)
sem_Exprs :: Exprs -> T_Exprs
sem_Exprs list = Prelude.foldr sem_Exprs_Cons sem_Exprs_Nil (Prelude.map sem_Expr list)
newtype T_Exprs = T_Exprs {
attach_T_Exprs :: Identity (T_Exprs_s29 )
}
newtype T_Exprs_s29 = C_Exprs_s29 {
inv_Exprs_s29 :: (T_Exprs_v28 )
}
data T_Exprs_s30 = C_Exprs_s30
type T_Exprs_v28 = (T_Exprs_vIn28 ) -> (T_Exprs_vOut28 )
data T_Exprs_vIn28 = T_Exprs_vIn28 (Bool) (Options) (String)
data T_Exprs_vOut28 = T_Exprs_vOut28 (PP_Docs)
sem_Exprs_Cons :: T_Expr -> T_Exprs -> T_Exprs
sem_Exprs_Cons arg_hd_ arg_tl_ = T_Exprs (return st29) where
!st29 = let
v28 :: T_Exprs_v28
v28 = \ !(T_Exprs_vIn28 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_hdX26 = Control.Monad.Identity.runIdentity (attach_T_Expr (arg_hd_))
_tlX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_tl_))
(T_Expr_vOut25 _hdIpp) = inv_Expr_s26 _hdX26 (T_Expr_vIn25 _hdOnested _hdOoptions _hdOoutputfile)
(T_Exprs_vOut28 _tlIpps) = inv_Exprs_s29 _tlX29 (T_Exprs_vIn28 _tlOnested _tlOoptions _tlOoutputfile)
_lhsOpps :: PP_Docs
_lhsOpps = rule264 _hdIpp _tlIpps
_hdOnested = rule265 _lhsInested
_hdOoptions = rule266 _lhsIoptions
_hdOoutputfile = rule267 _lhsIoutputfile
_tlOnested = rule268 _lhsInested
_tlOoptions = rule269 _lhsIoptions
_tlOoutputfile = rule270 _lhsIoutputfile
!__result_ = T_Exprs_vOut28 _lhsOpps
in __result_ )
in C_Exprs_s29 v28
rule264 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule265 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule266 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule267 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule268 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule269 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule270 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Exprs_Nil :: T_Exprs
sem_Exprs_Nil = T_Exprs (return st29) where
!st29 = let
v28 :: T_Exprs_v28
v28 = \ !(T_Exprs_vIn28 _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule271 ()
!__result_ = T_Exprs_vOut28 _lhsOpps
in __result_ )
in C_Exprs_s29 v28
rule271 = \ (_ :: ()) ->
[]
data Inh_Lhs = Inh_Lhs { isDeclOfLet_Inh_Lhs :: !(Bool), nested_Inh_Lhs :: !(Bool), options_Inh_Lhs :: !(Options), outputfile_Inh_Lhs :: !(String) }
data Syn_Lhs = Syn_Lhs { pp_Syn_Lhs :: !(PP_Doc) }
wrap_Lhs :: T_Lhs -> Inh_Lhs -> (Syn_Lhs )
wrap_Lhs !(T_Lhs act) !(Inh_Lhs _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg31 = T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Lhs_vOut31 _lhsOpp) <- return (inv_Lhs_s32 sem arg31)
return (Syn_Lhs _lhsOpp)
)
sem_Lhs :: Lhs -> T_Lhs
sem_Lhs ( Pattern3 pat3_ ) = sem_Lhs_Pattern3 ( sem_Pattern pat3_ )
sem_Lhs ( Pattern3SM pat3_ ) = sem_Lhs_Pattern3SM ( sem_Pattern pat3_ )
sem_Lhs ( TupleLhs !comps_ ) = sem_Lhs_TupleLhs comps_
sem_Lhs ( UnboxedTupleLhs !comps_ ) = sem_Lhs_UnboxedTupleLhs comps_
sem_Lhs ( Fun !name_ args_ ) = sem_Lhs_Fun name_ ( sem_Exprs args_ )
sem_Lhs ( Unwrap !name_ sub_ ) = sem_Lhs_Unwrap name_ ( sem_Lhs sub_ )
newtype T_Lhs = T_Lhs {
attach_T_Lhs :: Identity (T_Lhs_s32 )
}
newtype T_Lhs_s32 = C_Lhs_s32 {
inv_Lhs_s32 :: (T_Lhs_v31 )
}
data T_Lhs_s33 = C_Lhs_s33
type T_Lhs_v31 = (T_Lhs_vIn31 ) -> (T_Lhs_vOut31 )
data T_Lhs_vIn31 = T_Lhs_vIn31 (Bool) (Bool) (Options) (String)
data T_Lhs_vOut31 = T_Lhs_vOut31 (PP_Doc)
sem_Lhs_Pattern3 :: T_Pattern -> T_Lhs
sem_Lhs_Pattern3 arg_pat3_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_pat3X41 = Control.Monad.Identity.runIdentity (attach_T_Pattern (arg_pat3_))
(T_Pattern_vOut40 _pat3Icopy _pat3IisUnderscore _pat3Ipp _pat3Ipp' _pat3IstrictVars) = inv_Pattern_s41 _pat3X41 (T_Pattern_vIn40 _pat3ObelowIrrefutable _pat3OisDeclOfLet _pat3Ooptions)
_addStrictGuard = rule272 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule273 _pat3IstrictVars
_hasStrictVars = rule274 _pat3IstrictVars
_lhsOpp :: PP_Doc
_lhsOpp = rule275 _addStrictGuard _pat3Ipp
_pat3ObelowIrrefutable = rule276 ()
_pat3OisDeclOfLet = rule277 _lhsIisDeclOfLet
_pat3Ooptions = rule278 _lhsIoptions
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule272 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule273 = \ ((_pat3IstrictVars) :: [PP_Doc]) ->
_pat3IstrictVars `ppMultiSeqH` (pp "True")
rule274 = \ ((_pat3IstrictVars) :: [PP_Doc]) ->
not (null _pat3IstrictVars)
rule275 = \ _addStrictGuard ((_pat3Ipp) :: PP_Doc) ->
_addStrictGuard _pat3Ipp
rule276 = \ (_ :: ()) ->
False
rule277 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule278 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Lhs_Pattern3SM :: T_Pattern -> T_Lhs
sem_Lhs_Pattern3SM arg_pat3_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_pat3X41 = Control.Monad.Identity.runIdentity (attach_T_Pattern (arg_pat3_))
(T_Pattern_vOut40 _pat3Icopy _pat3IisUnderscore _pat3Ipp _pat3Ipp' _pat3IstrictVars) = inv_Pattern_s41 _pat3X41 (T_Pattern_vIn40 _pat3ObelowIrrefutable _pat3OisDeclOfLet _pat3Ooptions)
_lhsOpp :: PP_Doc
_lhsOpp = rule279 _pat3Ipp'
_pat3ObelowIrrefutable = rule280 ()
_pat3OisDeclOfLet = rule281 _lhsIisDeclOfLet
_pat3Ooptions = rule282 _lhsIoptions
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule279 = \ ((_pat3Ipp') :: PP_Doc) ->
_pat3Ipp'
rule280 = \ (_ :: ()) ->
False
rule281 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule282 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Lhs_TupleLhs :: ([String]) -> T_Lhs
sem_Lhs_TupleLhs !arg_comps_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_addStrictGuard = rule283 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule284 _lhsIisDeclOfLet _lhsIoptions arg_comps_
_hasStrictVars = rule285 arg_comps_
_addBang = rule286 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule287 _addBang _addStrictGuard _lhsInested arg_comps_
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule283 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule284 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) comps_ ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then map text comps_ `ppMultiSeqH` (pp "True")
else pp "True"
rule285 = \ comps_ ->
not (null comps_)
rule286 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule287 = \ _addBang _addStrictGuard ((_lhsInested) :: Bool) comps_ ->
_addStrictGuard $ ppTuple _lhsInested (map (_addBang . text) comps_)
sem_Lhs_UnboxedTupleLhs :: ([String]) -> T_Lhs
sem_Lhs_UnboxedTupleLhs !arg_comps_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_addStrictGuard = rule288 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule289 _lhsIisDeclOfLet _lhsIoptions arg_comps_
_hasStrictVars = rule290 arg_comps_
_addBang = rule291 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule292 _addBang _addStrictGuard _lhsInested arg_comps_
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule288 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule289 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) comps_ ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then map text comps_ `ppMultiSeqH` (pp "True")
else pp "True"
rule290 = \ comps_ ->
not (null comps_)
rule291 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule292 = \ _addBang _addStrictGuard ((_lhsInested) :: Bool) comps_ ->
_addStrictGuard $ ppUnboxedTuple _lhsInested (map (_addBang . text) comps_)
sem_Lhs_Fun :: (String) -> T_Exprs -> T_Lhs
sem_Lhs_Fun !arg_name_ arg_args_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_argsX29 = Control.Monad.Identity.runIdentity (attach_T_Exprs (arg_args_))
(T_Exprs_vOut28 _argsIpps) = inv_Exprs_s29 _argsX29 (T_Exprs_vIn28 _argsOnested _argsOoptions _argsOoutputfile)
_addStrictGuard = rule293 _hasStrictVars _lhsIoptions _strictGuard
_hasStrictVars = rule294 _argsIpps
_strictGuard = rule295 _argsIpps
_addBang = rule296 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule297 _addBang _addStrictGuard _argsIpps arg_name_
_argsOnested = rule298 _lhsInested
_argsOoptions = rule299 _lhsIoptions
_argsOoutputfile = rule300 _lhsIoutputfile
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule293 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictSems _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule294 = \ ((_argsIpps) :: PP_Docs) ->
not (null _argsIpps)
rule295 = \ ((_argsIpps) :: PP_Docs) ->
_argsIpps `ppMultiSeqH` (pp "True")
rule296 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule297 = \ _addBang _addStrictGuard ((_argsIpps) :: PP_Docs) name_ ->
_addStrictGuard (name_ >#< hv_sp (map _addBang _argsIpps))
rule298 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule299 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule300 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
sem_Lhs_Unwrap :: (String) -> T_Lhs -> T_Lhs
sem_Lhs_Unwrap !arg_name_ arg_sub_ = T_Lhs (return st32) where
!st32 = let
v31 :: T_Lhs_v31
v31 = \ !(T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile) -> ( let
_subX32 = Control.Monad.Identity.runIdentity (attach_T_Lhs (arg_sub_))
(T_Lhs_vOut31 _subIpp) = inv_Lhs_s32 _subX32 (T_Lhs_vIn31 _subOisDeclOfLet _subOnested _subOoptions _subOoutputfile)
_lhsOpp :: PP_Doc
_lhsOpp = rule301 _subIpp arg_name_
_subOisDeclOfLet = rule302 _lhsIisDeclOfLet
_subOnested = rule303 _lhsInested
_subOoptions = rule304 _lhsIoptions
_subOoutputfile = rule305 _lhsIoutputfile
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule301 = \ ((_subIpp) :: PP_Doc) name_ ->
pp_parens (name_ >#< _subIpp)
rule302 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule303 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule304 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule305 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
data Inh_NamedType = Inh_NamedType { nested_Inh_NamedType :: !(Bool) }
data Syn_NamedType = Syn_NamedType { pp_Syn_NamedType :: !(PP_Doc), ppa_Syn_NamedType :: !(PP_Doc) }
wrap_NamedType :: T_NamedType -> Inh_NamedType -> (Syn_NamedType )
wrap_NamedType !(T_NamedType act) !(Inh_NamedType _lhsInested) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg34 = T_NamedType_vIn34 _lhsInested
!(T_NamedType_vOut34 _lhsOpp _lhsOppa) <- return (inv_NamedType_s35 sem arg34)
return (Syn_NamedType _lhsOpp _lhsOppa)
)
sem_NamedType :: NamedType -> T_NamedType
sem_NamedType ( Named !strict_ !name_ tp_ ) = sem_NamedType_Named strict_ name_ ( sem_Type tp_ )
newtype T_NamedType = T_NamedType {
attach_T_NamedType :: Identity (T_NamedType_s35 )
}
newtype T_NamedType_s35 = C_NamedType_s35 {
inv_NamedType_s35 :: (T_NamedType_v34 )
}
data T_NamedType_s36 = C_NamedType_s36
type T_NamedType_v34 = (T_NamedType_vIn34 ) -> (T_NamedType_vOut34 )
data T_NamedType_vIn34 = T_NamedType_vIn34 (Bool)
data T_NamedType_vOut34 = T_NamedType_vOut34 (PP_Doc) (PP_Doc)
sem_NamedType_Named :: (Bool) -> (String) -> T_Type -> T_NamedType
sem_NamedType_Named !arg_strict_ !arg_name_ arg_tp_ = T_NamedType (return st35) where
!st35 = let
v34 :: T_NamedType_v34
v34 = \ !(T_NamedType_vIn34 _lhsInested) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule306 _tpIpp arg_strict_
_lhsOppa :: PP_Doc
_lhsOppa = rule307 arg_name_
_tpOnested = rule308 _lhsInested
!__result_ = T_NamedType_vOut34 _lhsOpp _lhsOppa
in __result_ )
in C_NamedType_s35 v34
rule306 = \ ((_tpIpp) :: PP_Doc) strict_ ->
if strict_
then "!" >|< pp_parens _tpIpp
else _tpIpp
rule307 = \ name_ ->
pp name_
rule308 = \ ((_lhsInested) :: Bool) ->
_lhsInested
data Inh_NamedTypes = Inh_NamedTypes { nested_Inh_NamedTypes :: !(Bool) }
data Syn_NamedTypes = Syn_NamedTypes { ppas_Syn_NamedTypes :: !(PP_Docs), pps_Syn_NamedTypes :: !(PP_Docs) }
wrap_NamedTypes :: T_NamedTypes -> Inh_NamedTypes -> (Syn_NamedTypes )
wrap_NamedTypes !(T_NamedTypes act) !(Inh_NamedTypes _lhsInested) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg37 = T_NamedTypes_vIn37 _lhsInested
!(T_NamedTypes_vOut37 _lhsOppas _lhsOpps) <- return (inv_NamedTypes_s38 sem arg37)
return (Syn_NamedTypes _lhsOppas _lhsOpps)
)
sem_NamedTypes :: NamedTypes -> T_NamedTypes
sem_NamedTypes list = Prelude.foldr sem_NamedTypes_Cons sem_NamedTypes_Nil (Prelude.map sem_NamedType list)
newtype T_NamedTypes = T_NamedTypes {
attach_T_NamedTypes :: Identity (T_NamedTypes_s38 )
}
newtype T_NamedTypes_s38 = C_NamedTypes_s38 {
inv_NamedTypes_s38 :: (T_NamedTypes_v37 )
}
data T_NamedTypes_s39 = C_NamedTypes_s39
type T_NamedTypes_v37 = (T_NamedTypes_vIn37 ) -> (T_NamedTypes_vOut37 )
data T_NamedTypes_vIn37 = T_NamedTypes_vIn37 (Bool)
data T_NamedTypes_vOut37 = T_NamedTypes_vOut37 (PP_Docs) (PP_Docs)
sem_NamedTypes_Cons :: T_NamedType -> T_NamedTypes -> T_NamedTypes
sem_NamedTypes_Cons arg_hd_ arg_tl_ = T_NamedTypes (return st38) where
!st38 = let
v37 :: T_NamedTypes_v37
v37 = \ !(T_NamedTypes_vIn37 _lhsInested) -> ( let
_hdX35 = Control.Monad.Identity.runIdentity (attach_T_NamedType (arg_hd_))
_tlX38 = Control.Monad.Identity.runIdentity (attach_T_NamedTypes (arg_tl_))
(T_NamedType_vOut34 _hdIpp _hdIppa) = inv_NamedType_s35 _hdX35 (T_NamedType_vIn34 _hdOnested)
(T_NamedTypes_vOut37 _tlIppas _tlIpps) = inv_NamedTypes_s38 _tlX38 (T_NamedTypes_vIn37 _tlOnested)
_lhsOpps :: PP_Docs
_lhsOpps = rule309 _hdIpp _tlIpps
_lhsOppas :: PP_Docs
_lhsOppas = rule310 _hdIppa _tlIppas
_hdOnested = rule311 _lhsInested
_tlOnested = rule312 _lhsInested
!__result_ = T_NamedTypes_vOut37 _lhsOppas _lhsOpps
in __result_ )
in C_NamedTypes_s38 v37
rule309 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule310 = \ ((_hdIppa) :: PP_Doc) ((_tlIppas) :: PP_Docs) ->
_hdIppa : _tlIppas
rule311 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule312 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_NamedTypes_Nil :: T_NamedTypes
sem_NamedTypes_Nil = T_NamedTypes (return st38) where
!st38 = let
v37 :: T_NamedTypes_v37
v37 = \ !(T_NamedTypes_vIn37 _lhsInested) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule313 ()
_lhsOppas :: PP_Docs
_lhsOppas = rule314 ()
!__result_ = T_NamedTypes_vOut37 _lhsOppas _lhsOpps
in __result_ )
in C_NamedTypes_s38 v37
rule313 = \ (_ :: ()) ->
[]
rule314 = \ (_ :: ()) ->
[]
data Inh_Pattern = Inh_Pattern { belowIrrefutable_Inh_Pattern :: !(Bool), isDeclOfLet_Inh_Pattern :: !(Bool), options_Inh_Pattern :: !(Options) }
data Syn_Pattern = Syn_Pattern { copy_Syn_Pattern :: !(Pattern), isUnderscore_Syn_Pattern :: !(Bool), pp_Syn_Pattern :: !(PP_Doc), pp'_Syn_Pattern :: !(PP_Doc), strictVars_Syn_Pattern :: !([PP_Doc]) }
wrap_Pattern :: T_Pattern -> Inh_Pattern -> (Syn_Pattern )
wrap_Pattern !(T_Pattern act) !(Inh_Pattern _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg40 = T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
!(T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars) <- return (inv_Pattern_s41 sem arg40)
return (Syn_Pattern _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars)
)
sem_Pattern :: Pattern -> T_Pattern
sem_Pattern ( Constr !name_ pats_ ) = sem_Pattern_Constr name_ ( sem_Patterns pats_ )
sem_Pattern ( Product !pos_ pats_ ) = sem_Pattern_Product pos_ ( sem_Patterns pats_ )
sem_Pattern ( Alias !field_ !attr_ pat_ ) = sem_Pattern_Alias field_ attr_ ( sem_Pattern pat_ )
sem_Pattern ( Irrefutable pat_ ) = sem_Pattern_Irrefutable ( sem_Pattern pat_ )
sem_Pattern ( Underscore !pos_ ) = sem_Pattern_Underscore pos_
newtype T_Pattern = T_Pattern {
attach_T_Pattern :: Identity (T_Pattern_s41 )
}
newtype T_Pattern_s41 = C_Pattern_s41 {
inv_Pattern_s41 :: (T_Pattern_v40 )
}
data T_Pattern_s42 = C_Pattern_s42
type T_Pattern_v40 = (T_Pattern_vIn40 ) -> (T_Pattern_vOut40 )
data T_Pattern_vIn40 = T_Pattern_vIn40 (Bool) (Bool) (Options)
data T_Pattern_vOut40 = T_Pattern_vOut40 (Pattern) (Bool) (PP_Doc) (PP_Doc) ([PP_Doc])
sem_Pattern_Constr :: (ConstructorIdent) -> T_Patterns -> T_Pattern
sem_Pattern_Constr !arg_name_ arg_pats_ = T_Pattern (return st41) where
!st41 = let
v40 :: T_Pattern_v40
v40 = \ !(T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_patsX44 = Control.Monad.Identity.runIdentity (attach_T_Patterns (arg_pats_))
(T_Patterns_vOut43 _patsIcopy _patsIpps _patsIpps' _patsIstrictVars) = inv_Patterns_s44 _patsX44 (T_Patterns_vIn43 _patsObelowIrrefutable _patsOisDeclOfLet _patsOoptions)
_addBang = rule315 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule316 _addBang _patsIpps arg_name_
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule317 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule318 _patsIpps' arg_name_
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule319 _patsIstrictVars
_copy = rule320 _patsIcopy arg_name_
_lhsOcopy :: Pattern
_lhsOcopy = rule321 _copy
_patsObelowIrrefutable = rule322 _lhsIbelowIrrefutable
_patsOisDeclOfLet = rule323 _lhsIisDeclOfLet
_patsOoptions = rule324 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule315 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule316 = \ _addBang ((_patsIpps) :: [PP_Doc]) name_ ->
_addBang $ pp_parens $ name_ >#< hv_sp _patsIpps
rule317 = \ (_ :: ()) ->
False
rule318 = \ ((_patsIpps') :: [PP_Doc]) name_ ->
pp_parens $ name_ >#< hv_sp (map pp_parens _patsIpps')
rule319 = \ ((_patsIstrictVars) :: [PP_Doc]) ->
_patsIstrictVars
rule320 = \ ((_patsIcopy) :: Patterns) name_ ->
Constr name_ _patsIcopy
rule321 = \ _copy ->
_copy
rule322 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule323 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule324 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Pattern_Product :: (Pos) -> T_Patterns -> T_Pattern
sem_Pattern_Product !arg_pos_ arg_pats_ = T_Pattern (return st41) where
!st41 = let
v40 :: T_Pattern_v40
v40 = \ !(T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_patsX44 = Control.Monad.Identity.runIdentity (attach_T_Patterns (arg_pats_))
(T_Patterns_vOut43 _patsIcopy _patsIpps _patsIpps' _patsIstrictVars) = inv_Patterns_s44 _patsX44 (T_Patterns_vIn43 _patsObelowIrrefutable _patsOisDeclOfLet _patsOoptions)
_addBang = rule325 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule326 _addBang _patsIpps
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule327 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule328 _patsIpps'
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule329 _patsIstrictVars
_copy = rule330 _patsIcopy arg_pos_
_lhsOcopy :: Pattern
_lhsOcopy = rule331 _copy
_patsObelowIrrefutable = rule332 _lhsIbelowIrrefutable
_patsOisDeclOfLet = rule333 _lhsIisDeclOfLet
_patsOoptions = rule334 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule325 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule326 = \ _addBang ((_patsIpps) :: [PP_Doc]) ->
_addBang $ pp_block "(" ")" "," _patsIpps
rule327 = \ (_ :: ()) ->
False
rule328 = \ ((_patsIpps') :: [PP_Doc]) ->
pp_block "(" ")" "," _patsIpps'
rule329 = \ ((_patsIstrictVars) :: [PP_Doc]) ->
_patsIstrictVars
rule330 = \ ((_patsIcopy) :: Patterns) pos_ ->
Product pos_ _patsIcopy
rule331 = \ _copy ->
_copy
rule332 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule333 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule334 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Pattern_Alias :: (Identifier) -> (Identifier) -> T_Pattern -> T_Pattern
sem_Pattern_Alias !arg_field_ !arg_attr_ arg_pat_ = T_Pattern (return st41) where
!st41 = let
v40 :: T_Pattern_v40
v40 = \ !(T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_patX41 = Control.Monad.Identity.runIdentity (attach_T_Pattern (arg_pat_))
(T_Pattern_vOut40 _patIcopy _patIisUnderscore _patIpp _patIpp' _patIstrictVars) = inv_Pattern_s41 _patX41 (T_Pattern_vIn40 _patObelowIrrefutable _patOisDeclOfLet _patOoptions)
_strictVar = rule335 _lhsIisDeclOfLet _lhsIoptions _ppVar
_strictPatVars = rule336 _lhsIisDeclOfLet _lhsIoptions _patIstrictVars
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule337 _strictPatVars _strictVar
_addBang = rule338 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_ppVar = rule339 _lhsIoptions arg_attr_ arg_field_
_ppVarBang = rule340 _addBang _ppVar
_lhsOpp :: PP_Doc
_lhsOpp = rule341 _patIisUnderscore _patIpp _ppVarBang
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule342 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule343 _lhsIoptions _patIpp' arg_attr_ arg_field_
_copy = rule344 _patIcopy arg_attr_ arg_field_
_lhsOcopy :: Pattern
_lhsOcopy = rule345 _copy
_patObelowIrrefutable = rule346 _lhsIbelowIrrefutable
_patOisDeclOfLet = rule347 _lhsIisDeclOfLet
_patOoptions = rule348 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule335 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) _ppVar ->
if strictCases _lhsIoptions && not _lhsIisDeclOfLet
then [_ppVar ]
else []
rule336 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ((_patIstrictVars) :: [PP_Doc]) ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then _patIstrictVars
else []
rule337 = \ _strictPatVars _strictVar ->
_strictVar ++ _strictPatVars
rule338 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule339 = \ ((_lhsIoptions) :: Options) attr_ field_ ->
pp (attrname _lhsIoptions False field_ attr_)
rule340 = \ _addBang _ppVar ->
_addBang $ _ppVar
rule341 = \ ((_patIisUnderscore) :: Bool) ((_patIpp) :: PP_Doc) _ppVarBang ->
if _patIisUnderscore
then _ppVarBang
else _ppVarBang >|< "@" >|< _patIpp
rule342 = \ (_ :: ()) ->
False
rule343 = \ ((_lhsIoptions) :: Options) ((_patIpp') :: PP_Doc) attr_ field_ ->
let attribute | field_ == _LOC || field_ == nullIdent = locname' attr_
| otherwise = attrname _lhsIoptions False field_ attr_
in attribute >|< "@" >|< _patIpp'
rule344 = \ ((_patIcopy) :: Pattern) attr_ field_ ->
Alias field_ attr_ _patIcopy
rule345 = \ _copy ->
_copy
rule346 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule347 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule348 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Pattern_Irrefutable :: T_Pattern -> T_Pattern
sem_Pattern_Irrefutable arg_pat_ = T_Pattern (return st41) where
!st41 = let
v40 :: T_Pattern_v40
v40 = \ !(T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_patX41 = Control.Monad.Identity.runIdentity (attach_T_Pattern (arg_pat_))
(T_Pattern_vOut40 _patIcopy _patIisUnderscore _patIpp _patIpp' _patIstrictVars) = inv_Pattern_s41 _patX41 (T_Pattern_vIn40 _patObelowIrrefutable _patOisDeclOfLet _patOoptions)
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule349 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule350 _patIpp
_patObelowIrrefutable = rule351 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule352 _patIpp
_copy = rule353 _patIcopy
_lhsOcopy :: Pattern
_lhsOcopy = rule354 _copy
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule355 _patIisUnderscore
_patOisDeclOfLet = rule356 _lhsIisDeclOfLet
_patOoptions = rule357 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule349 = \ (_ :: ()) ->
[]
rule350 = \ ((_patIpp) :: PP_Doc) ->
text "~" >|< pp_parens _patIpp
rule351 = \ (_ :: ()) ->
True
rule352 = \ ((_patIpp) :: PP_Doc) ->
text "~" >|< pp_parens _patIpp
rule353 = \ ((_patIcopy) :: Pattern) ->
Irrefutable _patIcopy
rule354 = \ _copy ->
_copy
rule355 = \ ((_patIisUnderscore) :: Bool) ->
_patIisUnderscore
rule356 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule357 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Pattern_Underscore :: (Pos) -> T_Pattern
sem_Pattern_Underscore !arg_pos_ = T_Pattern (return st41) where
!st41 = let
v40 :: T_Pattern_v40
v40 = \ !(T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_lhsOpp :: PP_Doc
_lhsOpp = rule358 ()
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule359 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule360 ()
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule361 ()
_copy = rule362 arg_pos_
_lhsOcopy :: Pattern
_lhsOcopy = rule363 _copy
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule358 = \ (_ :: ()) ->
text "_"
rule359 = \ (_ :: ()) ->
True
rule360 = \ (_ :: ()) ->
text "_"
rule361 = \ (_ :: ()) ->
[]
rule362 = \ pos_ ->
Underscore pos_
rule363 = \ _copy ->
_copy
data Inh_Patterns = Inh_Patterns { belowIrrefutable_Inh_Patterns :: !(Bool), isDeclOfLet_Inh_Patterns :: !(Bool), options_Inh_Patterns :: !(Options) }
data Syn_Patterns = Syn_Patterns { copy_Syn_Patterns :: !(Patterns), pps_Syn_Patterns :: !([PP_Doc]), pps'_Syn_Patterns :: !([PP_Doc]), strictVars_Syn_Patterns :: !([PP_Doc]) }
wrap_Patterns :: T_Patterns -> Inh_Patterns -> (Syn_Patterns )
wrap_Patterns !(T_Patterns act) !(Inh_Patterns _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg43 = T_Patterns_vIn43 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
!(T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars) <- return (inv_Patterns_s44 sem arg43)
return (Syn_Patterns _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars)
)
sem_Patterns :: Patterns -> T_Patterns
sem_Patterns list = Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list)
newtype T_Patterns = T_Patterns {
attach_T_Patterns :: Identity (T_Patterns_s44 )
}
newtype T_Patterns_s44 = C_Patterns_s44 {
inv_Patterns_s44 :: (T_Patterns_v43 )
}
data T_Patterns_s45 = C_Patterns_s45
type T_Patterns_v43 = (T_Patterns_vIn43 ) -> (T_Patterns_vOut43 )
data T_Patterns_vIn43 = T_Patterns_vIn43 (Bool) (Bool) (Options)
data T_Patterns_vOut43 = T_Patterns_vOut43 (Patterns) ([PP_Doc]) ([PP_Doc]) ([PP_Doc])
sem_Patterns_Cons :: T_Pattern -> T_Patterns -> T_Patterns
sem_Patterns_Cons arg_hd_ arg_tl_ = T_Patterns (return st44) where
!st44 = let
v43 :: T_Patterns_v43
v43 = \ !(T_Patterns_vIn43 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_hdX41 = Control.Monad.Identity.runIdentity (attach_T_Pattern (arg_hd_))
_tlX44 = Control.Monad.Identity.runIdentity (attach_T_Patterns (arg_tl_))
(T_Pattern_vOut40 _hdIcopy _hdIisUnderscore _hdIpp _hdIpp' _hdIstrictVars) = inv_Pattern_s41 _hdX41 (T_Pattern_vIn40 _hdObelowIrrefutable _hdOisDeclOfLet _hdOoptions)
(T_Patterns_vOut43 _tlIcopy _tlIpps _tlIpps' _tlIstrictVars) = inv_Patterns_s44 _tlX44 (T_Patterns_vIn43 _tlObelowIrrefutable _tlOisDeclOfLet _tlOoptions)
_lhsOpps :: [PP_Doc]
_lhsOpps = rule364 _hdIpp _tlIpps
_lhsOpps' :: [PP_Doc]
_lhsOpps' = rule365 _hdIpp' _tlIpps'
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule366 _hdIstrictVars _tlIstrictVars
_copy = rule367 _hdIcopy _tlIcopy
_lhsOcopy :: Patterns
_lhsOcopy = rule368 _copy
_hdObelowIrrefutable = rule369 _lhsIbelowIrrefutable
_hdOisDeclOfLet = rule370 _lhsIisDeclOfLet
_hdOoptions = rule371 _lhsIoptions
_tlObelowIrrefutable = rule372 _lhsIbelowIrrefutable
_tlOisDeclOfLet = rule373 _lhsIisDeclOfLet
_tlOoptions = rule374 _lhsIoptions
!__result_ = T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars
in __result_ )
in C_Patterns_s44 v43
rule364 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: [PP_Doc]) ->
_hdIpp : _tlIpps
rule365 = \ ((_hdIpp') :: PP_Doc) ((_tlIpps') :: [PP_Doc]) ->
_hdIpp' : _tlIpps'
rule366 = \ ((_hdIstrictVars) :: [PP_Doc]) ((_tlIstrictVars) :: [PP_Doc]) ->
_hdIstrictVars ++ _tlIstrictVars
rule367 = \ ((_hdIcopy) :: Pattern) ((_tlIcopy) :: Patterns) ->
(:) _hdIcopy _tlIcopy
rule368 = \ _copy ->
_copy
rule369 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule370 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule371 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule372 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule373 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule374 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
sem_Patterns_Nil :: T_Patterns
sem_Patterns_Nil = T_Patterns (return st44) where
!st44 = let
v43 :: T_Patterns_v43
v43 = \ !(T_Patterns_vIn43 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions) -> ( let
_lhsOpps :: [PP_Doc]
_lhsOpps = rule375 ()
_lhsOpps' :: [PP_Doc]
_lhsOpps' = rule376 ()
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule377 ()
_copy = rule378 ()
_lhsOcopy :: Patterns
_lhsOcopy = rule379 _copy
!__result_ = T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars
in __result_ )
in C_Patterns_s44 v43
rule375 = \ (_ :: ()) ->
[]
rule376 = \ (_ :: ()) ->
[]
rule377 = \ (_ :: ()) ->
[]
rule378 = \ (_ :: ()) ->
[]
rule379 = \ _copy ->
_copy
data Inh_Program = Inh_Program { importBlocks_Inh_Program :: !(PP_Doc), mainBlocksDoc_Inh_Program :: !(PP_Doc), mainFile_Inh_Program :: !(String), mainName_Inh_Program :: !(String), moduleHeader_Inh_Program :: !(String -> String -> String -> Bool -> String), options_Inh_Program :: !(Options), optionsLine_Inh_Program :: !(String), pragmaBlocks_Inh_Program :: !(String), textBlockMap_Inh_Program :: !(Map BlockInfo PP_Doc), textBlocks_Inh_Program :: !(PP_Doc) }
data Syn_Program = Syn_Program { genIO_Syn_Program :: !(IO ()), output_Syn_Program :: !(PP_Docs) }
wrap_Program :: T_Program -> Inh_Program -> (Syn_Program )
wrap_Program !(T_Program act) !(Inh_Program _lhsIimportBlocks _lhsImainBlocksDoc _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg46 = T_Program_vIn46 _lhsIimportBlocks _lhsImainBlocksDoc _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks
!(T_Program_vOut46 _lhsOgenIO _lhsOoutput) <- return (inv_Program_s47 sem arg46)
return (Syn_Program _lhsOgenIO _lhsOoutput)
)
sem_Program :: Program -> T_Program
sem_Program ( Program chunks_ !ordered_ ) = sem_Program_Program ( sem_Chunks chunks_ ) ordered_
newtype T_Program = T_Program {
attach_T_Program :: Identity (T_Program_s47 )
}
newtype T_Program_s47 = C_Program_s47 {
inv_Program_s47 :: (T_Program_v46 )
}
data T_Program_s48 = C_Program_s48
type T_Program_v46 = (T_Program_vIn46 ) -> (T_Program_vOut46 )
data T_Program_vIn46 = T_Program_vIn46 (PP_Doc) (PP_Doc) (String) (String) (String -> String -> String -> Bool -> String) (Options) (String) (String) (Map BlockInfo PP_Doc) (PP_Doc)
data T_Program_vOut46 = T_Program_vOut46 (IO ()) (PP_Docs)
sem_Program_Program :: T_Chunks -> (Bool) -> T_Program
sem_Program_Program arg_chunks_ !arg_ordered_ = T_Program (return st47) where
!st47 = let
v46 :: T_Program_v46
v46 = \ !(T_Program_vIn46 _lhsIimportBlocks _lhsImainBlocksDoc _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks) -> ( let
_chunksX11 = Control.Monad.Identity.runIdentity (attach_T_Chunks (arg_chunks_))
(T_Chunks_vOut10 _chunksIappendCommon _chunksIappendMain _chunksIgenSems _chunksIimports _chunksIpps) = inv_Chunks_s11 _chunksX11 (T_Chunks_vIn10 _chunksOimportBlocks _chunksOisDeclOfLet _chunksOmainFile _chunksOmainName _chunksOmoduleHeader _chunksOnested _chunksOoptions _chunksOoptionsLine _chunksOpragmaBlocks _chunksOtextBlockMap _chunksOtextBlocks)
_options = rule380 _lhsIoptions arg_ordered_
_chunksOnested = rule381 _lhsIoptions
_lhsOoutput :: PP_Docs
_lhsOoutput = rule382 _chunksIpps
_chunksOisDeclOfLet = rule383 ()
_mainModuleFile = rule384 _lhsImainFile
_genMainModule = rule385 _chunksIappendMain _chunksIimports _lhsImainBlocksDoc _lhsImainName _lhsImoduleHeader _lhsIoptionsLine _lhsIpragmaBlocks _mainModuleFile
_commonFile = rule386 _lhsImainFile
_genCommonModule = rule387 _chunksIappendCommon _commonFile _lhsIimportBlocks _lhsImainName _lhsImoduleHeader _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks
_lhsOgenIO :: IO ()
_lhsOgenIO = rule388 _chunksIgenSems _genCommonModule _genMainModule
_chunksOimportBlocks = rule389 _lhsIimportBlocks
_chunksOmainFile = rule390 _lhsImainFile
_chunksOmainName = rule391 _lhsImainName
_chunksOmoduleHeader = rule392 _lhsImoduleHeader
_chunksOoptions = rule393 _options
_chunksOoptionsLine = rule394 _lhsIoptionsLine
_chunksOpragmaBlocks = rule395 _lhsIpragmaBlocks
_chunksOtextBlockMap = rule396 _lhsItextBlockMap
_chunksOtextBlocks = rule397 _lhsItextBlocks
!__result_ = T_Program_vOut46 _lhsOgenIO _lhsOoutput
in __result_ )
in C_Program_s47 v46
rule380 = \ ((_lhsIoptions) :: Options) ordered_ ->
_lhsIoptions { breadthFirst = breadthFirst _lhsIoptions && visit _lhsIoptions && cases _lhsIoptions && ordered_ }
rule381 = \ ((_lhsIoptions) :: Options) ->
nest _lhsIoptions
rule382 = \ ((_chunksIpps) :: PP_Docs) ->
_chunksIpps
rule383 = \ (_ :: ()) ->
False
rule384 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule385 = \ ((_chunksIappendMain) :: [[PP_Doc]]) ((_chunksIimports) :: [String]) ((_lhsImainBlocksDoc) :: PP_Doc) ((_lhsImainName) :: String) ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ((_lhsIoptionsLine) :: String) ((_lhsIpragmaBlocks) :: String) _mainModuleFile ->
writeModule _mainModuleFile
( [ pp $ _lhsIpragmaBlocks
, pp $ _lhsIoptionsLine
, pp $ _lhsImoduleHeader _lhsImainName "" "" False
, pp $ ("import " ++ _lhsImainName ++ "_common\n")
]
++ map pp _chunksIimports
++ map vlist _chunksIappendMain
++ [_lhsImainBlocksDoc]
)
rule386 = \ ((_lhsImainFile) :: String) ->
replaceBaseName _lhsImainFile (takeBaseName _lhsImainFile ++ "_common")
rule387 = \ ((_chunksIappendCommon) :: [[PP_Doc]]) _commonFile ((_lhsIimportBlocks) :: PP_Doc) ((_lhsImainName) :: String) ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ((_lhsIoptionsLine) :: String) ((_lhsIpragmaBlocks) :: String) ((_lhsItextBlocks) :: PP_Doc) ->
writeModule _commonFile
( [ pp $ _lhsIpragmaBlocks
, pp $ _lhsIoptionsLine
, pp $ _lhsImoduleHeader _lhsImainName "_common" "" True
, _lhsIimportBlocks
, _lhsItextBlocks
]
++ map vlist _chunksIappendCommon
)
rule388 = \ ((_chunksIgenSems) :: IO ()) _genCommonModule _genMainModule ->
do _genMainModule
_genCommonModule
_chunksIgenSems
rule389 = \ ((_lhsIimportBlocks) :: PP_Doc) ->
_lhsIimportBlocks
rule390 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule391 = \ ((_lhsImainName) :: String) ->
_lhsImainName
rule392 = \ ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ->
_lhsImoduleHeader
rule393 = \ _options ->
_options
rule394 = \ ((_lhsIoptionsLine) :: String) ->
_lhsIoptionsLine
rule395 = \ ((_lhsIpragmaBlocks) :: String) ->
_lhsIpragmaBlocks
rule396 = \ ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) ->
_lhsItextBlockMap
rule397 = \ ((_lhsItextBlocks) :: PP_Doc) ->
_lhsItextBlocks
data Inh_Type = Inh_Type { nested_Inh_Type :: !(Bool) }
data Syn_Type = Syn_Type { copy_Syn_Type :: !(Type), pp_Syn_Type :: !(PP_Doc), prec_Syn_Type :: !(Int) }
wrap_Type :: T_Type -> Inh_Type -> (Syn_Type )
wrap_Type !(T_Type act) !(Inh_Type _lhsInested) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg49 = T_Type_vIn49 _lhsInested
!(T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec) <- return (inv_Type_s50 sem arg49)
return (Syn_Type _lhsOcopy _lhsOpp _lhsOprec)
)
sem_Type :: Type -> T_Type
sem_Type ( Arr left_ right_ ) = sem_Type_Arr ( sem_Type left_ ) ( sem_Type right_ )
sem_Type ( CtxApp !left_ right_ ) = sem_Type_CtxApp left_ ( sem_Type right_ )
sem_Type ( QuantApp !left_ right_ ) = sem_Type_QuantApp left_ ( sem_Type right_ )
sem_Type ( TypeApp func_ args_ ) = sem_Type_TypeApp ( sem_Type func_ ) ( sem_Types args_ )
sem_Type ( TupleType tps_ ) = sem_Type_TupleType ( sem_Types tps_ )
sem_Type ( UnboxedTupleType tps_ ) = sem_Type_UnboxedTupleType ( sem_Types tps_ )
sem_Type ( List tp_ ) = sem_Type_List ( sem_Type tp_ )
sem_Type ( SimpleType !txt_ ) = sem_Type_SimpleType txt_
sem_Type ( NontermType !name_ !params_ !deforested_ ) = sem_Type_NontermType name_ params_ deforested_
sem_Type ( TMaybe tp_ ) = sem_Type_TMaybe ( sem_Type tp_ )
sem_Type ( TEither left_ right_ ) = sem_Type_TEither ( sem_Type left_ ) ( sem_Type right_ )
sem_Type ( TMap key_ value_ ) = sem_Type_TMap ( sem_Type key_ ) ( sem_Type value_ )
sem_Type ( TIntMap value_ ) = sem_Type_TIntMap ( sem_Type value_ )
sem_Type ( TSet tp_ ) = sem_Type_TSet ( sem_Type tp_ )
sem_Type ( TIntSet ) = sem_Type_TIntSet
newtype T_Type = T_Type {
attach_T_Type :: Identity (T_Type_s50 )
}
newtype T_Type_s50 = C_Type_s50 {
inv_Type_s50 :: (T_Type_v49 )
}
data T_Type_s51 = C_Type_s51
type T_Type_v49 = (T_Type_vIn49 ) -> (T_Type_vOut49 )
data T_Type_vIn49 = T_Type_vIn49 (Bool)
data T_Type_vOut49 = T_Type_vOut49 (Type) (PP_Doc) (Int)
sem_Type_Arr :: T_Type -> T_Type -> T_Type
sem_Type_Arr arg_left_ arg_right_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_leftX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_left_))
_rightX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_right_))
(T_Type_vOut49 _leftIcopy _leftIpp _leftIprec) = inv_Type_s50 _leftX50 (T_Type_vIn49 _leftOnested)
(T_Type_vOut49 _rightIcopy _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOprec :: Int
_lhsOprec = rule398 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule399 _l _r _rightIcopy
_l = rule400 _leftIpp _leftIprec
_r = rule401 _rightIpp _rightIprec
_copy = rule402 _leftIcopy _rightIcopy
_lhsOcopy :: Type
_lhsOcopy = rule403 _copy
_leftOnested = rule404 _lhsInested
_rightOnested = rule405 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule398 = \ (_ :: ()) ->
2
rule399 = \ _l _r ((_rightIcopy) :: Type) ->
case _rightIcopy of
Arr{} -> _l >-< _r
_ -> _l >#< "->" >-< _r
rule400 = \ ((_leftIpp) :: PP_Doc) ((_leftIprec) :: Int) ->
if _leftIprec <= 2 then pp_parens _leftIpp else _leftIpp
rule401 = \ ((_rightIpp) :: PP_Doc) ((_rightIprec) :: Int) ->
if _rightIprec < 2 then pp_parens _rightIpp else _rightIpp
rule402 = \ ((_leftIcopy) :: Type) ((_rightIcopy) :: Type) ->
Arr _leftIcopy _rightIcopy
rule403 = \ _copy ->
_copy
rule404 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule405 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_CtxApp :: ([(String, [String])]) -> T_Type -> T_Type
sem_Type_CtxApp !arg_left_ arg_right_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_rightX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_right_))
(T_Type_vOut49 _rightIcopy _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule406 _rightIpp arg_left_
_copy = rule407 _rightIcopy arg_left_
_lhsOcopy :: Type
_lhsOcopy = rule408 _copy
_lhsOprec :: Int
_lhsOprec = rule409 _rightIprec
_rightOnested = rule410 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule406 = \ ((_rightIpp) :: PP_Doc) left_ ->
_rightIpp >#< " | " >#< (pp_block "" "" "&" $ map (\(n,ns) -> hv_sp $ map pp (n:ns)) left_)
rule407 = \ ((_rightIcopy) :: Type) left_ ->
CtxApp left_ _rightIcopy
rule408 = \ _copy ->
_copy
rule409 = \ ((_rightIprec) :: Int) ->
_rightIprec
rule410 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_QuantApp :: (String) -> T_Type -> T_Type
sem_Type_QuantApp !arg_left_ arg_right_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_rightX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_right_))
(T_Type_vOut49 _rightIcopy _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule411 _rightIpp arg_left_
_copy = rule412 _rightIcopy arg_left_
_lhsOcopy :: Type
_lhsOcopy = rule413 _copy
_lhsOprec :: Int
_lhsOprec = rule414 _rightIprec
_rightOnested = rule415 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule411 = \ ((_rightIpp) :: PP_Doc) left_ ->
left_ >#< _rightIpp
rule412 = \ ((_rightIcopy) :: Type) left_ ->
QuantApp left_ _rightIcopy
rule413 = \ _copy ->
_copy
rule414 = \ ((_rightIprec) :: Int) ->
_rightIprec
rule415 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TypeApp :: T_Type -> T_Types -> T_Type
sem_Type_TypeApp arg_func_ arg_args_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_funcX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_func_))
_argsX53 = Control.Monad.Identity.runIdentity (attach_T_Types (arg_args_))
(T_Type_vOut49 _funcIcopy _funcIpp _funcIprec) = inv_Type_s50 _funcX50 (T_Type_vIn49 _funcOnested)
(T_Types_vOut52 _argsIcopy _argsIpps) = inv_Types_s53 _argsX53 (T_Types_vIn52 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule416 _argsIpps _funcIpp
_copy = rule417 _argsIcopy _funcIcopy
_lhsOcopy :: Type
_lhsOcopy = rule418 _copy
_lhsOprec :: Int
_lhsOprec = rule419 _funcIprec
_funcOnested = rule420 _lhsInested
_argsOnested = rule421 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule416 = \ ((_argsIpps) :: PP_Docs) ((_funcIpp) :: PP_Doc) ->
pp "(" >#< hv_sp (_funcIpp : _argsIpps) >#< pp ")"
rule417 = \ ((_argsIcopy) :: Types) ((_funcIcopy) :: Type) ->
TypeApp _funcIcopy _argsIcopy
rule418 = \ _copy ->
_copy
rule419 = \ ((_funcIprec) :: Int) ->
_funcIprec
rule420 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule421 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TupleType :: T_Types -> T_Type
sem_Type_TupleType arg_tps_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_tpsX53 = Control.Monad.Identity.runIdentity (attach_T_Types (arg_tps_))
(T_Types_vOut52 _tpsIcopy _tpsIpps) = inv_Types_s53 _tpsX53 (T_Types_vIn52 _tpsOnested)
_lhsOprec :: Int
_lhsOprec = rule422 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule423 _lhsInested _tpsIpps
_copy = rule424 _tpsIcopy
_lhsOcopy :: Type
_lhsOcopy = rule425 _copy
_tpsOnested = rule426 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule422 = \ (_ :: ()) ->
5
rule423 = \ ((_lhsInested) :: Bool) ((_tpsIpps) :: PP_Docs) ->
ppTuple _lhsInested _tpsIpps
rule424 = \ ((_tpsIcopy) :: Types) ->
TupleType _tpsIcopy
rule425 = \ _copy ->
_copy
rule426 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_UnboxedTupleType :: T_Types -> T_Type
sem_Type_UnboxedTupleType arg_tps_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_tpsX53 = Control.Monad.Identity.runIdentity (attach_T_Types (arg_tps_))
(T_Types_vOut52 _tpsIcopy _tpsIpps) = inv_Types_s53 _tpsX53 (T_Types_vIn52 _tpsOnested)
_lhsOprec :: Int
_lhsOprec = rule427 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule428 _lhsInested _tpsIpps
_copy = rule429 _tpsIcopy
_lhsOcopy :: Type
_lhsOcopy = rule430 _copy
_tpsOnested = rule431 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule427 = \ (_ :: ()) ->
5
rule428 = \ ((_lhsInested) :: Bool) ((_tpsIpps) :: PP_Docs) ->
ppUnboxedTuple _lhsInested _tpsIpps
rule429 = \ ((_tpsIcopy) :: Types) ->
UnboxedTupleType _tpsIcopy
rule430 = \ _copy ->
_copy
rule431 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_List :: T_Type -> T_Type
sem_Type_List arg_tp_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOprec :: Int
_lhsOprec = rule432 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule433 _tpIpp
_copy = rule434 _tpIcopy
_lhsOcopy :: Type
_lhsOcopy = rule435 _copy
_tpOnested = rule436 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule432 = \ (_ :: ()) ->
5
rule433 = \ ((_tpIpp) :: PP_Doc) ->
"[" >|< _tpIpp >|< "]"
rule434 = \ ((_tpIcopy) :: Type) ->
List _tpIcopy
rule435 = \ _copy ->
_copy
rule436 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_SimpleType :: (String) -> T_Type
sem_Type_SimpleType !arg_txt_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_lhsOprec :: Int
_lhsOprec = rule437 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule438 arg_txt_
_copy = rule439 arg_txt_
_lhsOcopy :: Type
_lhsOcopy = rule440 _copy
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule437 = \ (_ :: ()) ->
5
rule438 = \ txt_ ->
if reallySimple txt_ then text txt_ else pp_parens (text txt_)
rule439 = \ txt_ ->
SimpleType txt_
rule440 = \ _copy ->
_copy
sem_Type_NontermType :: (String) -> ([String]) -> (Bool) -> T_Type
sem_Type_NontermType !arg_name_ !arg_params_ !arg_deforested_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_lhsOprec :: Int
_lhsOprec = rule441 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule442 _prefix arg_name_ arg_params_
_prefix = rule443 arg_deforested_
_copy = rule444 arg_deforested_ arg_name_ arg_params_
_lhsOcopy :: Type
_lhsOcopy = rule445 _copy
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule441 = \ (_ :: ()) ->
5
rule442 = \ _prefix name_ params_ ->
_prefix >|< text name_ >#< hv_sp params_
rule443 = \ deforested_ ->
if deforested_
then text "T_"
else empty
rule444 = \ deforested_ name_ params_ ->
NontermType name_ params_ deforested_
rule445 = \ _copy ->
_copy
sem_Type_TMaybe :: T_Type -> T_Type
sem_Type_TMaybe arg_tp_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOprec :: Int
_lhsOprec = rule446 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule447 _tpIpp
_copy = rule448 _tpIcopy
_lhsOcopy :: Type
_lhsOcopy = rule449 _copy
_tpOnested = rule450 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule446 = \ (_ :: ()) ->
5
rule447 = \ ((_tpIpp) :: PP_Doc) ->
text "Maybe" >#< pp_parens _tpIpp
rule448 = \ ((_tpIcopy) :: Type) ->
TMaybe _tpIcopy
rule449 = \ _copy ->
_copy
rule450 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TEither :: T_Type -> T_Type -> T_Type
sem_Type_TEither arg_left_ arg_right_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_leftX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_left_))
_rightX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_right_))
(T_Type_vOut49 _leftIcopy _leftIpp _leftIprec) = inv_Type_s50 _leftX50 (T_Type_vIn49 _leftOnested)
(T_Type_vOut49 _rightIcopy _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOprec :: Int
_lhsOprec = rule451 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule452 _leftIpp _rightIpp
_copy = rule453 _leftIcopy _rightIcopy
_lhsOcopy :: Type
_lhsOcopy = rule454 _copy
_leftOnested = rule455 _lhsInested
_rightOnested = rule456 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule451 = \ (_ :: ()) ->
5
rule452 = \ ((_leftIpp) :: PP_Doc) ((_rightIpp) :: PP_Doc) ->
text "Either" >#< pp_parens _leftIpp >#< pp_parens _rightIpp
rule453 = \ ((_leftIcopy) :: Type) ((_rightIcopy) :: Type) ->
TEither _leftIcopy _rightIcopy
rule454 = \ _copy ->
_copy
rule455 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule456 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TMap :: T_Type -> T_Type -> T_Type
sem_Type_TMap arg_key_ arg_value_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_keyX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_key_))
_valueX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_value_))
(T_Type_vOut49 _keyIcopy _keyIpp _keyIprec) = inv_Type_s50 _keyX50 (T_Type_vIn49 _keyOnested)
(T_Type_vOut49 _valueIcopy _valueIpp _valueIprec) = inv_Type_s50 _valueX50 (T_Type_vIn49 _valueOnested)
_lhsOprec :: Int
_lhsOprec = rule457 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule458 _keyIpp _valueIpp
_copy = rule459 _keyIcopy _valueIcopy
_lhsOcopy :: Type
_lhsOcopy = rule460 _copy
_keyOnested = rule461 _lhsInested
_valueOnested = rule462 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule457 = \ (_ :: ()) ->
5
rule458 = \ ((_keyIpp) :: PP_Doc) ((_valueIpp) :: PP_Doc) ->
text "'Data.Map'.Map" >#< pp_parens _keyIpp >#< pp_parens _valueIpp
rule459 = \ ((_keyIcopy) :: Type) ((_valueIcopy) :: Type) ->
TMap _keyIcopy _valueIcopy
rule460 = \ _copy ->
_copy
rule461 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule462 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TIntMap :: T_Type -> T_Type
sem_Type_TIntMap arg_value_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_valueX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_value_))
(T_Type_vOut49 _valueIcopy _valueIpp _valueIprec) = inv_Type_s50 _valueX50 (T_Type_vIn49 _valueOnested)
_lhsOprec :: Int
_lhsOprec = rule463 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule464 _valueIpp
_copy = rule465 _valueIcopy
_lhsOcopy :: Type
_lhsOcopy = rule466 _copy
_valueOnested = rule467 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule463 = \ (_ :: ()) ->
5
rule464 = \ ((_valueIpp) :: PP_Doc) ->
text "'Data.IntMap'.IntMap" >#< pp_parens _valueIpp
rule465 = \ ((_valueIcopy) :: Type) ->
TIntMap _valueIcopy
rule466 = \ _copy ->
_copy
rule467 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TSet :: T_Type -> T_Type
sem_Type_TSet arg_tp_ = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_tpX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_tp_))
(T_Type_vOut49 _tpIcopy _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOprec :: Int
_lhsOprec = rule468 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule469 _tpIpp
_copy = rule470 _tpIcopy
_lhsOcopy :: Type
_lhsOcopy = rule471 _copy
_tpOnested = rule472 _lhsInested
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule468 = \ (_ :: ()) ->
5
rule469 = \ ((_tpIpp) :: PP_Doc) ->
text "'Data.Set'.Set" >#< pp_parens _tpIpp
rule470 = \ ((_tpIcopy) :: Type) ->
TSet _tpIcopy
rule471 = \ _copy ->
_copy
rule472 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Type_TIntSet :: T_Type
sem_Type_TIntSet = T_Type (return st50) where
!st50 = let
v49 :: T_Type_v49
v49 = \ !(T_Type_vIn49 _lhsInested) -> ( let
_lhsOprec :: Int
_lhsOprec = rule473 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule474 ()
_copy = rule475 ()
_lhsOcopy :: Type
_lhsOcopy = rule476 _copy
!__result_ = T_Type_vOut49 _lhsOcopy _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule473 = \ (_ :: ()) ->
5
rule474 = \ (_ :: ()) ->
text "'Data.IntSet'.IntSet"
rule475 = \ (_ :: ()) ->
TIntSet
rule476 = \ _copy ->
_copy
data Inh_Types = Inh_Types { nested_Inh_Types :: !(Bool) }
data Syn_Types = Syn_Types { copy_Syn_Types :: !(Types), pps_Syn_Types :: !(PP_Docs) }
wrap_Types :: T_Types -> Inh_Types -> (Syn_Types )
wrap_Types !(T_Types act) !(Inh_Types _lhsInested) =
Control.Monad.Identity.runIdentity (
do !sem <- act
let arg52 = T_Types_vIn52 _lhsInested
!(T_Types_vOut52 _lhsOcopy _lhsOpps) <- return (inv_Types_s53 sem arg52)
return (Syn_Types _lhsOcopy _lhsOpps)
)
sem_Types :: Types -> T_Types
sem_Types list = Prelude.foldr sem_Types_Cons sem_Types_Nil (Prelude.map sem_Type list)
newtype T_Types = T_Types {
attach_T_Types :: Identity (T_Types_s53 )
}
newtype T_Types_s53 = C_Types_s53 {
inv_Types_s53 :: (T_Types_v52 )
}
data T_Types_s54 = C_Types_s54
type T_Types_v52 = (T_Types_vIn52 ) -> (T_Types_vOut52 )
data T_Types_vIn52 = T_Types_vIn52 (Bool)
data T_Types_vOut52 = T_Types_vOut52 (Types) (PP_Docs)
sem_Types_Cons :: T_Type -> T_Types -> T_Types
sem_Types_Cons arg_hd_ arg_tl_ = T_Types (return st53) where
!st53 = let
v52 :: T_Types_v52
v52 = \ !(T_Types_vIn52 _lhsInested) -> ( let
_hdX50 = Control.Monad.Identity.runIdentity (attach_T_Type (arg_hd_))
_tlX53 = Control.Monad.Identity.runIdentity (attach_T_Types (arg_tl_))
(T_Type_vOut49 _hdIcopy _hdIpp _hdIprec) = inv_Type_s50 _hdX50 (T_Type_vIn49 _hdOnested)
(T_Types_vOut52 _tlIcopy _tlIpps) = inv_Types_s53 _tlX53 (T_Types_vIn52 _tlOnested)
_lhsOpps :: PP_Docs
_lhsOpps = rule477 _hdIpp _tlIpps
_copy = rule478 _hdIcopy _tlIcopy
_lhsOcopy :: Types
_lhsOcopy = rule479 _copy
_hdOnested = rule480 _lhsInested
_tlOnested = rule481 _lhsInested
!__result_ = T_Types_vOut52 _lhsOcopy _lhsOpps
in __result_ )
in C_Types_s53 v52
rule477 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule478 = \ ((_hdIcopy) :: Type) ((_tlIcopy) :: Types) ->
(:) _hdIcopy _tlIcopy
rule479 = \ _copy ->
_copy
rule480 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule481 = \ ((_lhsInested) :: Bool) ->
_lhsInested
sem_Types_Nil :: T_Types
sem_Types_Nil = T_Types (return st53) where
!st53 = let
v52 :: T_Types_v52
v52 = \ !(T_Types_vIn52 _lhsInested) -> ( let
_lhsOpps :: PP_Docs
_lhsOpps = rule482 ()
_copy = rule483 ()
_lhsOcopy :: Types
_lhsOcopy = rule484 _copy
!__result_ = T_Types_vOut52 _lhsOcopy _lhsOpps
in __result_ )
in C_Types_s53 v52
rule482 = \ (_ :: ()) ->
[]
rule483 = \ (_ :: ()) ->
[]
rule484 = \ _copy ->
_copy