module PrintCode 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 True pps = "(" >|< pp_block " " (replicate (length pps `max` 1) ')') ",(" pps
ppTuple False pps = "(" >|< pp_block " " ")" "," pps
ppUnboxedTuple :: Bool -> [PP_Doc] -> PP_Doc
ppUnboxedTuple True pps = "(# " >|< pp_block " " (concat $ replicate (length pps `max` 1) " #)") ",(# " pps
ppUnboxedTuple False pps = "(# " >|< pp_block " " " #)" "," pps
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 arg = T_CaseAlt_vIn1 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_CaseAlt_vOut1 _lhsOpps) <- return (inv_CaseAlt_s2 sem arg)
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 arg = T_CaseAlts_vIn4 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_CaseAlts_vOut4 _lhsOpps) <- return (inv_CaseAlts_s5 sem arg)
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 arg = 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 arg)
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) = 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 arg = 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 arg)
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) }
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 arg = T_DataAlt_vIn13 _lhsInested _lhsIstrictPre
!(T_DataAlt_vOut13 _lhsOpp) <- return (inv_DataAlt_s14 sem arg)
return (Syn_DataAlt _lhsOpp)
)
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)
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 _argsIpps) = inv_Types_s53 _argsX53 (T_Types_vIn52 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule83 _argsIpps _lhsIstrictPre arg_name_
_argsOnested = rule84 _lhsInested
!__result_ = T_DataAlt_vOut13 _lhsOpp
in __result_ )
in C_DataAlt_s14 v13
rule83 = \ ((_argsIpps) :: PP_Docs) ((_lhsIstrictPre) :: PP_Doc) name_ ->
name_ >#< hv_sp (map ((_lhsIstrictPre >|<) . pp_parens) _argsIpps)
rule84 = \ ((_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 _argsIpps) = inv_NamedTypes_s38 _argsX38 (T_NamedTypes_vIn37 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule85 _argsIpps arg_name_
_argsOnested = rule86 _lhsInested
!__result_ = T_DataAlt_vOut13 _lhsOpp
in __result_ )
in C_DataAlt_s14 v13
rule85 = \ ((_argsIpps) :: PP_Docs) name_ ->
name_ >#< pp_block "{" "}" "," _argsIpps
rule86 = \ ((_lhsInested) :: Bool) ->
_lhsInested
data Inh_DataAlts = Inh_DataAlts { nested_Inh_DataAlts :: !(Bool), strictPre_Inh_DataAlts :: !(PP_Doc) }
data Syn_DataAlts = Syn_DataAlts { 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 arg = T_DataAlts_vIn16 _lhsInested _lhsIstrictPre
!(T_DataAlts_vOut16 _lhsOpps) <- return (inv_DataAlts_s17 sem arg)
return (Syn_DataAlts _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)
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) = inv_DataAlt_s14 _hdX14 (T_DataAlt_vIn13 _hdOnested _hdOstrictPre)
(T_DataAlts_vOut16 _tlIpps) = inv_DataAlts_s17 _tlX17 (T_DataAlts_vIn16 _tlOnested _tlOstrictPre)
_lhsOpps :: PP_Docs
_lhsOpps = rule87 _hdIpp _tlIpps
_hdOnested = rule88 _lhsInested
_hdOstrictPre = rule89 _lhsIstrictPre
_tlOnested = rule90 _lhsInested
_tlOstrictPre = rule91 _lhsIstrictPre
!__result_ = T_DataAlts_vOut16 _lhsOpps
in __result_ )
in C_DataAlts_s17 v16
rule87 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule88 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule89 = \ ((_lhsIstrictPre) :: PP_Doc) ->
_lhsIstrictPre
rule90 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule91 = \ ((_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 = rule92 ()
!__result_ = T_DataAlts_vOut16 _lhsOpps
in __result_ )
in C_DataAlts_s17 v16
rule92 = \ (_ :: ()) ->
[]
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) }
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 arg = T_Decl_vIn19 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Decl_vOut19 _lhsOpp) <- return (inv_Decl_s20 sem arg)
return (Syn_Decl _lhsOpp)
)
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)
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 = rule93 _leftIpp _rhsIpp
_leftOisDeclOfLet = rule94 _lhsIisDeclOfLet
_leftOnested = rule95 _lhsInested
_leftOoptions = rule96 _lhsIoptions
_leftOoutputfile = rule97 _lhsIoutputfile
_rhsOnested = rule98 _lhsInested
_rhsOoptions = rule99 _lhsIoptions
_rhsOoutputfile = rule100 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule93 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
_leftIpp >#< "="
>-< indent 4 _rhsIpp
rule94 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule95 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule96 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule97 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule98 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule99 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule100 = \ ((_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 = rule101 _leftIpp _rhsIpp
_leftOisDeclOfLet = rule102 _lhsIisDeclOfLet
_leftOnested = rule103 _lhsInested
_leftOoptions = rule104 _lhsIoptions
_leftOoutputfile = rule105 _lhsIoutputfile
_rhsOnested = rule106 _lhsInested
_rhsOoptions = rule107 _lhsIoptions
_rhsOoutputfile = rule108 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule101 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
_leftIpp >#< "<-" >#< _rhsIpp
rule102 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule103 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule104 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule105 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule106 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule107 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule108 = \ ((_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 = rule109 _leftIpp _rhsIpp
_leftOisDeclOfLet = rule110 _lhsIisDeclOfLet
_leftOnested = rule111 _lhsInested
_leftOoptions = rule112 _lhsIoptions
_leftOoutputfile = rule113 _lhsIoutputfile
_rhsOnested = rule114 _lhsInested
_rhsOoptions = rule115 _lhsIoptions
_rhsOoutputfile = rule116 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule109 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) ->
"let" >#< _leftIpp >#< "=" >#< _rhsIpp
rule110 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule111 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule112 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule113 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule114 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule115 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule116 = \ ((_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 _altsIpps) = inv_DataAlts_s17 _altsX17 (T_DataAlts_vIn16 _altsOnested _altsOstrictPre)
_lhsOpp :: PP_Doc
_lhsOpp = rule117 _altsIpps arg_derivings_ arg_name_ arg_params_
_altsOstrictPre = rule118 arg_strict_
_altsOnested = rule119 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule117 = \ ((_altsIpps) :: PP_Docs) derivings_ name_ params_ ->
"data" >#< 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_)
)
rule118 = \ strict_ ->
if strict_ then pp "!" else empty
rule119 = \ ((_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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule120 _tpIpp arg_con_ arg_name_ arg_params_
_tpOnested = rule121 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule120 = \ ((_tpIpp) :: PP_Doc) con_ name_ params_ ->
"newtype" >#< hv_sp (name_ : params_) >#< "=" >#< con_ >#< pp_parens _tpIpp
rule121 = \ ((_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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule122 _tpIpp arg_name_ arg_params_
_tpOnested = rule123 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule122 = \ ((_tpIpp) :: PP_Doc) name_ params_ ->
"type" >#< hv_sp (name_ : params_) >#< "=" >#< _tpIpp
rule123 = \ ((_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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule124 _tpIpp arg_name_
_tpOnested = rule125 _lhsInested
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule124 = \ ((_tpIpp) :: PP_Doc) name_ ->
name_ >#< "::" >#< _tpIpp
rule125 = \ ((_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 = rule126 arg_txt_
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule126 = \ txt_ ->
if '\n' `elem` txt_
then "{-" >-< vlist (lines txt_) >-< "-}"
else "--" >#< txt_
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 = rule127 arg_txt_
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule127 = \ txt_ ->
"{-#" >#< text txt_ >#< "#-}"
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 = rule128 _leftIpp _rhsIpp arg_monadic_
_leftOisDeclOfLet = rule129 _lhsIisDeclOfLet
_leftOnested = rule130 _lhsInested
_leftOoptions = rule131 _lhsIoptions
_leftOoutputfile = rule132 _lhsIoutputfile
_rhsOnested = rule133 _lhsInested
_rhsOoptions = rule134 _lhsIoptions
_rhsOoutputfile = rule135 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule128 = \ ((_leftIpp) :: PP_Doc) ((_rhsIpp) :: PP_Doc) monadic_ ->
if monadic_
then _leftIpp >#< "<-" >#< _rhsIpp
else _leftIpp >#< "=" >-< indent 4 _rhsIpp
rule129 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule130 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule131 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule132 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule133 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule134 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule135 = \ ((_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 = rule136 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule137 _leftIpp _lhsIoptions _rhsIpp _strat arg_nt_
_leftOisDeclOfLet = rule138 _lhsIisDeclOfLet
_leftOnested = rule139 _lhsInested
_leftOoptions = rule140 _lhsIoptions
_leftOoutputfile = rule141 _lhsIoutputfile
_rhsOnested = rule142 _lhsInested
_rhsOoptions = rule143 _lhsIoptions
_rhsOoutputfile = rule144 _lhsIoutputfile
!__result_ = T_Decl_vOut19 _lhsOpp
in __result_ )
in C_Decl_s20 v19
rule136 = \ ((_lhsIoptions) :: Options) ->
if breadthFirstStrict _lhsIoptions
then "stepwiseEval"
else "lazyEval"
rule137 = \ ((_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
rule138 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule139 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule140 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule141 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule142 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule143 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule144 = \ ((_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 arg = T_Decls_vIn22 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Decls_vOut22 _lhsOpps) <- return (inv_Decls_s23 sem arg)
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) = 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 = rule145 _hdIpp _tlIpps
_hdOisDeclOfLet = rule146 _lhsIisDeclOfLet
_hdOnested = rule147 _lhsInested
_hdOoptions = rule148 _lhsIoptions
_hdOoutputfile = rule149 _lhsIoutputfile
_tlOisDeclOfLet = rule150 _lhsIisDeclOfLet
_tlOnested = rule151 _lhsInested
_tlOoptions = rule152 _lhsIoptions
_tlOoutputfile = rule153 _lhsIoutputfile
!__result_ = T_Decls_vOut22 _lhsOpps
in __result_ )
in C_Decls_s23 v22
rule145 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule146 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule147 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule148 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule149 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule150 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule151 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule152 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule153 = \ ((_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 = rule154 ()
!__result_ = T_Decls_vOut22 _lhsOpps
in __result_ )
in C_Decls_s23 v22
rule154 = \ (_ :: ()) ->
[]
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 arg = T_Expr_vIn25 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Expr_vOut25 _lhsOpp) <- return (inv_Expr_s26 sem arg)
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 = rule155 _bodyIpp _declsIpps
_declsOisDeclOfLet = rule156 ()
_declsOnested = rule157 _lhsInested
_declsOoptions = rule158 _lhsIoptions
_declsOoutputfile = rule159 _lhsIoutputfile
_bodyOnested = rule160 _lhsInested
_bodyOoptions = rule161 _lhsIoptions
_bodyOoutputfile = rule162 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule155 = \ ((_bodyIpp) :: PP_Doc) ((_declsIpps) :: PP_Docs) ->
pp_parens ( "let" >#< (vlist _declsIpps)
>-< "in " >#< _bodyIpp
)
rule156 = \ (_ :: ()) ->
True
rule157 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule158 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule159 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule160 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule161 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule162 = \ ((_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 = rule163 _altsIpps _exprIpp
_exprOnested = rule164 _lhsInested
_exprOoptions = rule165 _lhsIoptions
_exprOoutputfile = rule166 _lhsIoutputfile
_altsOnested = rule167 _lhsInested
_altsOoptions = rule168 _lhsIoptions
_altsOoutputfile = rule169 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule163 = \ ((_altsIpps) :: PP_Docs) ((_exprIpp) :: PP_Doc) ->
pp_parens ( "case" >#< pp_parens _exprIpp >#< "of"
>-< (vlist _altsIpps)
)
rule164 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule165 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule166 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule167 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule168 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule169 = \ ((_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 = rule170 _bodyIpp _stmtsIpps
_stmtsOisDeclOfLet = rule171 ()
_stmtsOnested = rule172 _lhsInested
_stmtsOoptions = rule173 _lhsIoptions
_stmtsOoutputfile = 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) ((_stmtsIpps) :: PP_Docs) ->
pp_parens ( "do" >#< ( vlist _stmtsIpps
>-< ("return" >#< _bodyIpp))
)
rule171 = \ (_ :: ()) ->
False
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_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 = rule178 _argsIpps _lhsIoptions
_addBang = rule179 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule180 _addBang _argsIpps _bodyIpp _strictParams
_argsOnested = rule181 _lhsInested
_argsOoptions = rule182 _lhsIoptions
_argsOoutputfile = rule183 _lhsIoutputfile
_bodyOnested = rule184 _lhsInested
_bodyOoptions = rule185 _lhsIoptions
_bodyOoutputfile = rule186 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule178 = \ ((_argsIpps) :: PP_Docs) ((_lhsIoptions) :: Options) ->
if strictSems _lhsIoptions
then _argsIpps
else []
rule179 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> pp_parens ("!" >|< p)
else id
rule180 = \ _addBang ((_argsIpps) :: PP_Docs) ((_bodyIpp) :: PP_Doc) _strictParams ->
pp_parens ( "\\" >#< (vlist (map _addBang _argsIpps)) >#< "->"
>-< indent 4 (_strictParams `ppMultiSeqV` _bodyIpp)
)
rule181 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule182 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule183 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule184 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule185 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule186 = \ ((_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 = rule187 _exprsIpps _lhsInested
_exprsOnested = rule188 _lhsInested
_exprsOoptions = rule189 _lhsIoptions
_exprsOoutputfile = rule190 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule187 = \ ((_exprsIpps) :: PP_Docs) ((_lhsInested) :: Bool) ->
ppTuple _lhsInested _exprsIpps
rule188 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule189 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule190 = \ ((_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 = rule191 _exprsIpps _lhsInested
_exprsOnested = rule192 _lhsInested
_exprsOoptions = rule193 _lhsIoptions
_exprsOoutputfile = rule194 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule191 = \ ((_exprsIpps) :: PP_Docs) ((_lhsInested) :: Bool) ->
ppUnboxedTuple _lhsInested _exprsIpps
rule192 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule193 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule194 = \ ((_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 = rule195 _argsIpps arg_name_
_argsOnested = rule196 _lhsInested
_argsOoptions = rule197 _lhsIoptions
_argsOoutputfile = rule198 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule195 = \ ((_argsIpps) :: PP_Docs) name_ ->
pp_parens $ name_ >#< hv_sp _argsIpps
rule196 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule197 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule198 = \ ((_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 = rule199 arg_txt_
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule199 = \ 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 = rule200 arg_lns_
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule200 = \ 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 = rule201 _exprIpp arg_txt_
_exprOnested = rule202 _lhsInested
_exprOoptions = rule203 _lhsIoptions
_exprOoutputfile = rule204 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule201 = \ ((_exprIpp) :: PP_Doc) txt_ ->
"trace" >#< ( pp_parens ("\"" >|< text txt_ >|< "\"")
>-< pp_parens _exprIpp
)
rule202 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule203 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule204 = \ ((_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 = rule205 _exprIpp arg_onLeftSide_ arg_onNewLine_ arg_txt_
_exprOnested = rule206 _lhsInested
_exprOoptions = rule207 _lhsIoptions
_exprOoutputfile = rule208 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule205 = \ ((_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)
rule206 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule207 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule208 = \ ((_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 = rule209 _exprIpp _lhsIoutputfile
_exprOnested = rule210 _lhsInested
_exprOoptions = rule211 _lhsIoptions
_exprOoutputfile = rule212 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule209 = \ ((_exprIpp) :: PP_Doc) ((_lhsIoutputfile) :: String) ->
_exprIpp >-< "{-# LINE" >#< ppWithLineNr (\n -> pp $ show $ n + 1) >#< show _lhsIoutputfile >#< "#-}"
>-< ""
rule210 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule211 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule212 = \ ((_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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule213 _exprIpp _tpIpp
_exprOnested = rule214 _lhsInested
_exprOoptions = rule215 _lhsIoptions
_exprOoutputfile = rule216 _lhsIoutputfile
_tpOnested = rule217 _lhsInested
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule213 = \ ((_exprIpp) :: PP_Doc) ((_tpIpp) :: PP_Doc) ->
pp_parens (_exprIpp >#< "::" >#< _tpIpp)
rule214 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule215 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule216 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule217 = \ ((_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 = rule218 _exprIpp _lhsIoptions arg_nt_
_exprOnested = rule219 _lhsInested
_exprOoptions = rule220 _lhsIoptions
_exprOoutputfile = rule221 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule218 = \ ((_exprIpp) :: PP_Doc) ((_lhsIoptions) :: Options) nt_ ->
if breadthFirst _lhsIoptions
then "final" >#<
pp_parens (nt_ >|< "_Syn" >#< pp_parens _exprIpp)
else _exprIpp
rule219 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule220 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule221 = \ ((_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 = rule222 _argsIpps _exprIpp _lhsIoptions arg_nt_
_exprOnested = rule223 _lhsInested
_exprOoptions = rule224 _lhsIoptions
_exprOoutputfile = rule225 _lhsIoutputfile
_argsOnested = rule226 _lhsInested
_argsOoptions = rule227 _lhsIoptions
_argsOoutputfile = rule228 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule222 = \ ((_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
rule223 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule224 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule225 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule226 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule227 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule228 = \ ((_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 = rule229 _exprIpp _leftIpp _lhsIoptions _rhsIpp arg_nt_
_leftOisDeclOfLet = rule230 ()
_exprOnested = rule231 _lhsInested
_exprOoptions = rule232 _lhsIoptions
_exprOoutputfile = rule233 _lhsIoutputfile
_leftOnested = rule234 _lhsInested
_leftOoptions = rule235 _lhsIoptions
_leftOoutputfile = rule236 _lhsIoutputfile
_rhsOnested = rule237 _lhsInested
_rhsOoptions = rule238 _lhsIoptions
_rhsOoutputfile = rule239 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule229 = \ ((_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 >#< "}")
)
rule230 = \ (_ :: ()) ->
False
rule231 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule232 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule233 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule234 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule235 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule236 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule237 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule238 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule239 = \ ((_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 = rule240 _argsIpps _lhsIoptions
_addBang = rule241 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule242 _addBang _argsIpps _bodyIpp _lhsIoptions _strictParams arg_nt_
_argsOnested = rule243 _lhsInested
_argsOoptions = rule244 _lhsIoptions
_argsOoutputfile = rule245 _lhsIoutputfile
_bodyOnested = rule246 _lhsInested
_bodyOoptions = rule247 _lhsIoptions
_bodyOoutputfile = rule248 _lhsIoutputfile
!__result_ = T_Expr_vOut25 _lhsOpp
in __result_ )
in C_Expr_s26 v25
rule240 = \ ((_argsIpps) :: PP_Docs) ((_lhsIoptions) :: Options) ->
if strictSems _lhsIoptions
then _argsIpps
else []
rule241 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> pp_parens ("!" >|< p)
else id
rule242 = \ _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)
)
rule243 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule244 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule245 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule246 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule247 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule248 = \ ((_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 arg = T_Exprs_vIn28 _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Exprs_vOut28 _lhsOpps) <- return (inv_Exprs_s29 sem arg)
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 = rule249 _hdIpp _tlIpps
_hdOnested = rule250 _lhsInested
_hdOoptions = rule251 _lhsIoptions
_hdOoutputfile = rule252 _lhsIoutputfile
_tlOnested = rule253 _lhsInested
_tlOoptions = rule254 _lhsIoptions
_tlOoutputfile = rule255 _lhsIoutputfile
!__result_ = T_Exprs_vOut28 _lhsOpps
in __result_ )
in C_Exprs_s29 v28
rule249 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule250 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule251 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule252 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
rule253 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule254 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule255 = \ ((_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 = rule256 ()
!__result_ = T_Exprs_vOut28 _lhsOpps
in __result_ )
in C_Exprs_s29 v28
rule256 = \ (_ :: ()) ->
[]
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 arg = T_Lhs_vIn31 _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile
!(T_Lhs_vOut31 _lhsOpp) <- return (inv_Lhs_s32 sem arg)
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 = rule257 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule258 _pat3IstrictVars
_hasStrictVars = rule259 _pat3IstrictVars
_lhsOpp :: PP_Doc
_lhsOpp = rule260 _addStrictGuard _pat3Ipp
_pat3ObelowIrrefutable = rule261 ()
_pat3OisDeclOfLet = rule262 _lhsIisDeclOfLet
_pat3Ooptions = rule263 _lhsIoptions
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule257 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule258 = \ ((_pat3IstrictVars) :: [PP_Doc]) ->
_pat3IstrictVars `ppMultiSeqH` (pp "True")
rule259 = \ ((_pat3IstrictVars) :: [PP_Doc]) ->
not (null _pat3IstrictVars)
rule260 = \ _addStrictGuard ((_pat3Ipp) :: PP_Doc) ->
_addStrictGuard _pat3Ipp
rule261 = \ (_ :: ()) ->
False
rule262 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule263 = \ ((_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 = rule264 _pat3Ipp'
_pat3ObelowIrrefutable = rule265 ()
_pat3OisDeclOfLet = rule266 _lhsIisDeclOfLet
_pat3Ooptions = rule267 _lhsIoptions
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule264 = \ ((_pat3Ipp') :: PP_Doc) ->
_pat3Ipp'
rule265 = \ (_ :: ()) ->
False
rule266 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule267 = \ ((_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 = rule268 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule269 _lhsIisDeclOfLet _lhsIoptions arg_comps_
_hasStrictVars = rule270 arg_comps_
_addBang = rule271 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule272 _addBang _addStrictGuard _lhsInested arg_comps_
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule268 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule269 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) comps_ ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then map text comps_ `ppMultiSeqH` (pp "True")
else pp "True"
rule270 = \ comps_ ->
not (null comps_)
rule271 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule272 = \ _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 = rule273 _hasStrictVars _lhsIoptions _strictGuard
_strictGuard = rule274 _lhsIisDeclOfLet _lhsIoptions arg_comps_
_hasStrictVars = rule275 arg_comps_
_addBang = rule276 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule277 _addBang _addStrictGuard _lhsInested arg_comps_
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule273 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictCases _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule274 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) comps_ ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then map text comps_ `ppMultiSeqH` (pp "True")
else pp "True"
rule275 = \ comps_ ->
not (null comps_)
rule276 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule277 = \ _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 = rule278 _hasStrictVars _lhsIoptions _strictGuard
_hasStrictVars = rule279 _argsIpps
_strictGuard = rule280 _argsIpps
_addBang = rule281 _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule282 _addBang _addStrictGuard _argsIpps arg_name_
_argsOnested = rule283 _lhsInested
_argsOoptions = rule284 _lhsIoptions
_argsOoutputfile = rule285 _lhsIoutputfile
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule278 = \ _hasStrictVars ((_lhsIoptions) :: Options) _strictGuard ->
if strictSems _lhsIoptions && _hasStrictVars then \v -> v >#< "|" >#< _strictGuard else id
rule279 = \ ((_argsIpps) :: PP_Docs) ->
not (null _argsIpps)
rule280 = \ ((_argsIpps) :: PP_Docs) ->
_argsIpps `ppMultiSeqH` (pp "True")
rule281 = \ ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions
then \p -> "!" >|< p
else id
rule282 = \ _addBang _addStrictGuard ((_argsIpps) :: PP_Docs) name_ ->
_addStrictGuard (name_ >#< hv_sp (map _addBang _argsIpps))
rule283 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule284 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule285 = \ ((_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 = rule286 _subIpp arg_name_
_subOisDeclOfLet = rule287 _lhsIisDeclOfLet
_subOnested = rule288 _lhsInested
_subOoptions = rule289 _lhsIoptions
_subOoutputfile = rule290 _lhsIoutputfile
!__result_ = T_Lhs_vOut31 _lhsOpp
in __result_ )
in C_Lhs_s32 v31
rule286 = \ ((_subIpp) :: PP_Doc) name_ ->
pp_parens (name_ >#< _subIpp)
rule287 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule288 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule289 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule290 = \ ((_lhsIoutputfile) :: String) ->
_lhsIoutputfile
data Inh_NamedType = Inh_NamedType { nested_Inh_NamedType :: !(Bool) }
data Syn_NamedType = Syn_NamedType { pp_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 arg = T_NamedType_vIn34 _lhsInested
!(T_NamedType_vOut34 _lhsOpp) <- return (inv_NamedType_s35 sem arg)
return (Syn_NamedType _lhsOpp)
)
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)
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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule291 _tpIpp arg_name_ arg_strict_
_tpOnested = rule292 _lhsInested
!__result_ = T_NamedType_vOut34 _lhsOpp
in __result_ )
in C_NamedType_s35 v34
rule291 = \ ((_tpIpp) :: PP_Doc) name_ strict_ ->
if strict_
then name_ >#< "::" >#< "!" >|< pp_parens _tpIpp
else name_ >#< "::" >#< _tpIpp
rule292 = \ ((_lhsInested) :: Bool) ->
_lhsInested
data Inh_NamedTypes = Inh_NamedTypes { nested_Inh_NamedTypes :: !(Bool) }
data Syn_NamedTypes = Syn_NamedTypes { 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 arg = T_NamedTypes_vIn37 _lhsInested
!(T_NamedTypes_vOut37 _lhsOpps) <- return (inv_NamedTypes_s38 sem arg)
return (Syn_NamedTypes _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)
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) = inv_NamedType_s35 _hdX35 (T_NamedType_vIn34 _hdOnested)
(T_NamedTypes_vOut37 _tlIpps) = inv_NamedTypes_s38 _tlX38 (T_NamedTypes_vIn37 _tlOnested)
_lhsOpps :: PP_Docs
_lhsOpps = rule293 _hdIpp _tlIpps
_hdOnested = rule294 _lhsInested
_tlOnested = rule295 _lhsInested
!__result_ = T_NamedTypes_vOut37 _lhsOpps
in __result_ )
in C_NamedTypes_s38 v37
rule293 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule294 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule295 = \ ((_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 = rule296 ()
!__result_ = T_NamedTypes_vOut37 _lhsOpps
in __result_ )
in C_NamedTypes_s38 v37
rule296 = \ (_ :: ()) ->
[]
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 arg = T_Pattern_vIn40 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
!(T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars) <- return (inv_Pattern_s41 sem arg)
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 = rule297 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule298 _addBang _patsIpps arg_name_
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule299 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule300 _patsIpps' arg_name_
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule301 _patsIstrictVars
_copy = rule302 _patsIcopy arg_name_
_lhsOcopy :: Pattern
_lhsOcopy = rule303 _copy
_patsObelowIrrefutable = rule304 _lhsIbelowIrrefutable
_patsOisDeclOfLet = rule305 _lhsIisDeclOfLet
_patsOoptions = rule306 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule297 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule298 = \ _addBang ((_patsIpps) :: [PP_Doc]) name_ ->
_addBang $ pp_parens $ name_ >#< hv_sp _patsIpps
rule299 = \ (_ :: ()) ->
False
rule300 = \ ((_patsIpps') :: [PP_Doc]) name_ ->
pp_parens $ name_ >#< hv_sp (map pp_parens _patsIpps')
rule301 = \ ((_patsIstrictVars) :: [PP_Doc]) ->
_patsIstrictVars
rule302 = \ ((_patsIcopy) :: Patterns) name_ ->
Constr name_ _patsIcopy
rule303 = \ _copy ->
_copy
rule304 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule305 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule306 = \ ((_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 = rule307 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_lhsOpp :: PP_Doc
_lhsOpp = rule308 _addBang _patsIpps
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule309 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule310 _patsIpps'
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule311 _patsIstrictVars
_copy = rule312 _patsIcopy arg_pos_
_lhsOcopy :: Pattern
_lhsOcopy = rule313 _copy
_patsObelowIrrefutable = rule314 _lhsIbelowIrrefutable
_patsOisDeclOfLet = rule315 _lhsIisDeclOfLet
_patsOoptions = rule316 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule307 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule308 = \ _addBang ((_patsIpps) :: [PP_Doc]) ->
_addBang $ pp_block "(" ")" "," _patsIpps
rule309 = \ (_ :: ()) ->
False
rule310 = \ ((_patsIpps') :: [PP_Doc]) ->
pp_block "(" ")" "," _patsIpps'
rule311 = \ ((_patsIstrictVars) :: [PP_Doc]) ->
_patsIstrictVars
rule312 = \ ((_patsIcopy) :: Patterns) pos_ ->
Product pos_ _patsIcopy
rule313 = \ _copy ->
_copy
rule314 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule315 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule316 = \ ((_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 = rule317 _lhsIisDeclOfLet _lhsIoptions _ppVar
_strictPatVars = rule318 _lhsIisDeclOfLet _lhsIoptions _patIstrictVars
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule319 _strictPatVars _strictVar
_addBang = rule320 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
_ppVar = rule321 _lhsIoptions arg_attr_ arg_field_
_ppVarBang = rule322 _addBang _ppVar
_lhsOpp :: PP_Doc
_lhsOpp = rule323 _patIisUnderscore _patIpp _ppVarBang
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule324 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule325 _lhsIoptions _patIpp' arg_attr_ arg_field_
_copy = rule326 _patIcopy arg_attr_ arg_field_
_lhsOcopy :: Pattern
_lhsOcopy = rule327 _copy
_patObelowIrrefutable = rule328 _lhsIbelowIrrefutable
_patOisDeclOfLet = rule329 _lhsIisDeclOfLet
_patOoptions = rule330 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule317 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) _ppVar ->
if strictCases _lhsIoptions && not _lhsIisDeclOfLet
then [_ppVar ]
else []
rule318 = \ ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ((_patIstrictVars) :: [PP_Doc]) ->
if stricterCases _lhsIoptions && not _lhsIisDeclOfLet
then _patIstrictVars
else []
rule319 = \ _strictPatVars _strictVar ->
_strictVar ++ _strictPatVars
rule320 = \ ((_lhsIbelowIrrefutable) :: Bool) ((_lhsIisDeclOfLet) :: Bool) ((_lhsIoptions) :: Options) ->
if bangpats _lhsIoptions && not _lhsIisDeclOfLet && not _lhsIbelowIrrefutable
then \p -> "!" >|< p
else id
rule321 = \ ((_lhsIoptions) :: Options) attr_ field_ ->
pp (attrname _lhsIoptions False field_ attr_)
rule322 = \ _addBang _ppVar ->
_addBang $ _ppVar
rule323 = \ ((_patIisUnderscore) :: Bool) ((_patIpp) :: PP_Doc) _ppVarBang ->
if _patIisUnderscore
then _ppVarBang
else _ppVarBang >|< "@" >|< _patIpp
rule324 = \ (_ :: ()) ->
False
rule325 = \ ((_lhsIoptions) :: Options) ((_patIpp') :: PP_Doc) attr_ field_ ->
let attribute | field_ == _LOC || field_ == nullIdent = locname' attr_
| otherwise = attrname _lhsIoptions False field_ attr_
in attribute >|< "@" >|< _patIpp'
rule326 = \ ((_patIcopy) :: Pattern) attr_ field_ ->
Alias field_ attr_ _patIcopy
rule327 = \ _copy ->
_copy
rule328 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule329 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule330 = \ ((_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 = rule331 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule332 _patIpp
_patObelowIrrefutable = rule333 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule334 _patIpp
_copy = rule335 _patIcopy
_lhsOcopy :: Pattern
_lhsOcopy = rule336 _copy
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule337 _patIisUnderscore
_patOisDeclOfLet = rule338 _lhsIisDeclOfLet
_patOoptions = rule339 _lhsIoptions
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule331 = \ (_ :: ()) ->
[]
rule332 = \ ((_patIpp) :: PP_Doc) ->
text "~" >|< pp_parens _patIpp
rule333 = \ (_ :: ()) ->
True
rule334 = \ ((_patIpp) :: PP_Doc) ->
text "~" >|< pp_parens _patIpp
rule335 = \ ((_patIcopy) :: Pattern) ->
Irrefutable _patIcopy
rule336 = \ _copy ->
_copy
rule337 = \ ((_patIisUnderscore) :: Bool) ->
_patIisUnderscore
rule338 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule339 = \ ((_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 = rule340 ()
_lhsOisUnderscore :: Bool
_lhsOisUnderscore = rule341 ()
_lhsOpp' :: PP_Doc
_lhsOpp' = rule342 ()
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule343 ()
_copy = rule344 arg_pos_
_lhsOcopy :: Pattern
_lhsOcopy = rule345 _copy
!__result_ = T_Pattern_vOut40 _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars
in __result_ )
in C_Pattern_s41 v40
rule340 = \ (_ :: ()) ->
text "_"
rule341 = \ (_ :: ()) ->
True
rule342 = \ (_ :: ()) ->
text "_"
rule343 = \ (_ :: ()) ->
[]
rule344 = \ pos_ ->
Underscore pos_
rule345 = \ _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 arg = T_Patterns_vIn43 _lhsIbelowIrrefutable _lhsIisDeclOfLet _lhsIoptions
!(T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars) <- return (inv_Patterns_s44 sem arg)
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 = rule346 _hdIpp _tlIpps
_lhsOpps' :: [PP_Doc]
_lhsOpps' = rule347 _hdIpp' _tlIpps'
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule348 _hdIstrictVars _tlIstrictVars
_copy = rule349 _hdIcopy _tlIcopy
_lhsOcopy :: Patterns
_lhsOcopy = rule350 _copy
_hdObelowIrrefutable = rule351 _lhsIbelowIrrefutable
_hdOisDeclOfLet = rule352 _lhsIisDeclOfLet
_hdOoptions = rule353 _lhsIoptions
_tlObelowIrrefutable = rule354 _lhsIbelowIrrefutable
_tlOisDeclOfLet = rule355 _lhsIisDeclOfLet
_tlOoptions = rule356 _lhsIoptions
!__result_ = T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars
in __result_ )
in C_Patterns_s44 v43
rule346 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: [PP_Doc]) ->
_hdIpp : _tlIpps
rule347 = \ ((_hdIpp') :: PP_Doc) ((_tlIpps') :: [PP_Doc]) ->
_hdIpp' : _tlIpps'
rule348 = \ ((_hdIstrictVars) :: [PP_Doc]) ((_tlIstrictVars) :: [PP_Doc]) ->
_hdIstrictVars ++ _tlIstrictVars
rule349 = \ ((_hdIcopy) :: Pattern) ((_tlIcopy) :: Patterns) ->
(:) _hdIcopy _tlIcopy
rule350 = \ _copy ->
_copy
rule351 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule352 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule353 = \ ((_lhsIoptions) :: Options) ->
_lhsIoptions
rule354 = \ ((_lhsIbelowIrrefutable) :: Bool) ->
_lhsIbelowIrrefutable
rule355 = \ ((_lhsIisDeclOfLet) :: Bool) ->
_lhsIisDeclOfLet
rule356 = \ ((_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 = rule357 ()
_lhsOpps' :: [PP_Doc]
_lhsOpps' = rule358 ()
_lhsOstrictVars :: [PP_Doc]
_lhsOstrictVars = rule359 ()
_copy = rule360 ()
_lhsOcopy :: Patterns
_lhsOcopy = rule361 _copy
!__result_ = T_Patterns_vOut43 _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars
in __result_ )
in C_Patterns_s44 v43
rule357 = \ (_ :: ()) ->
[]
rule358 = \ (_ :: ()) ->
[]
rule359 = \ (_ :: ()) ->
[]
rule360 = \ (_ :: ()) ->
[]
rule361 = \ _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 arg = T_Program_vIn46 _lhsIimportBlocks _lhsImainBlocksDoc _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlockMap _lhsItextBlocks
!(T_Program_vOut46 _lhsOgenIO _lhsOoutput) <- return (inv_Program_s47 sem arg)
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 = rule362 _lhsIoptions arg_ordered_
_chunksOnested = rule363 _lhsIoptions
_lhsOoutput :: PP_Docs
_lhsOoutput = rule364 _chunksIpps
_chunksOisDeclOfLet = rule365 ()
_mainModuleFile = rule366 _lhsImainFile
_genMainModule = rule367 _chunksIappendMain _chunksIimports _lhsImainBlocksDoc _lhsImainName _lhsImoduleHeader _lhsIoptionsLine _lhsIpragmaBlocks _mainModuleFile
_commonFile = rule368 _lhsImainFile
_genCommonModule = rule369 _chunksIappendCommon _commonFile _lhsIimportBlocks _lhsImainName _lhsImoduleHeader _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks
_lhsOgenIO :: IO ()
_lhsOgenIO = rule370 _chunksIgenSems _genCommonModule _genMainModule
_chunksOimportBlocks = rule371 _lhsIimportBlocks
_chunksOmainFile = rule372 _lhsImainFile
_chunksOmainName = rule373 _lhsImainName
_chunksOmoduleHeader = rule374 _lhsImoduleHeader
_chunksOoptions = rule375 _options
_chunksOoptionsLine = rule376 _lhsIoptionsLine
_chunksOpragmaBlocks = rule377 _lhsIpragmaBlocks
_chunksOtextBlockMap = rule378 _lhsItextBlockMap
_chunksOtextBlocks = rule379 _lhsItextBlocks
!__result_ = T_Program_vOut46 _lhsOgenIO _lhsOoutput
in __result_ )
in C_Program_s47 v46
rule362 = \ ((_lhsIoptions) :: Options) ordered_ ->
_lhsIoptions { breadthFirst = breadthFirst _lhsIoptions && visit _lhsIoptions && cases _lhsIoptions && ordered_ }
rule363 = \ ((_lhsIoptions) :: Options) ->
nest _lhsIoptions
rule364 = \ ((_chunksIpps) :: PP_Docs) ->
_chunksIpps
rule365 = \ (_ :: ()) ->
False
rule366 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule367 = \ ((_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]
)
rule368 = \ ((_lhsImainFile) :: String) ->
replaceBaseName _lhsImainFile (takeBaseName _lhsImainFile ++ "_common")
rule369 = \ ((_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
)
rule370 = \ ((_chunksIgenSems) :: IO ()) _genCommonModule _genMainModule ->
do _genMainModule
_genCommonModule
_chunksIgenSems
rule371 = \ ((_lhsIimportBlocks) :: PP_Doc) ->
_lhsIimportBlocks
rule372 = \ ((_lhsImainFile) :: String) ->
_lhsImainFile
rule373 = \ ((_lhsImainName) :: String) ->
_lhsImainName
rule374 = \ ((_lhsImoduleHeader) :: String -> String -> String -> Bool -> String) ->
_lhsImoduleHeader
rule375 = \ _options ->
_options
rule376 = \ ((_lhsIoptionsLine) :: String) ->
_lhsIoptionsLine
rule377 = \ ((_lhsIpragmaBlocks) :: String) ->
_lhsIpragmaBlocks
rule378 = \ ((_lhsItextBlockMap) :: Map BlockInfo PP_Doc) ->
_lhsItextBlockMap
rule379 = \ ((_lhsItextBlocks) :: PP_Doc) ->
_lhsItextBlocks
data Inh_Type = Inh_Type { nested_Inh_Type :: !(Bool) }
data Syn_Type = Syn_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 arg = T_Type_vIn49 _lhsInested
!(T_Type_vOut49 _lhsOpp _lhsOprec) <- return (inv_Type_s50 sem arg)
return (Syn_Type _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_ )
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 (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 _leftIpp _leftIprec) = inv_Type_s50 _leftX50 (T_Type_vIn49 _leftOnested)
(T_Type_vOut49 _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOprec :: Int
_lhsOprec = rule380 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule381 _l _r
_l = rule382 _leftIpp _leftIprec
_r = rule383 _rightIpp _rightIprec
_leftOnested = rule384 _lhsInested
_rightOnested = rule385 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule380 = \ (_ :: ()) ->
2
rule381 = \ _l _r ->
_l >#< "->" >-< _r
rule382 = \ ((_leftIpp) :: PP_Doc) ((_leftIprec) :: Int) ->
if _leftIprec <= 2 then pp_parens _leftIpp else _leftIpp
rule383 = \ ((_rightIpp) :: PP_Doc) ((_rightIprec) :: Int) ->
if _rightIprec < 2 then pp_parens _rightIpp else _rightIpp
rule384 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule385 = \ ((_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 _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule386 _rightIpp arg_left_
_lhsOprec :: Int
_lhsOprec = rule387 _rightIprec
_rightOnested = rule388 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule386 = \ ((_rightIpp) :: PP_Doc) left_ ->
(pp_block "(" ")" "," $ map (\(n,ns) -> hv_sp $ map pp (n:ns)) left_) >#< "=>" >#< _rightIpp
rule387 = \ ((_rightIprec) :: Int) ->
_rightIprec
rule388 = \ ((_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 _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule389 _rightIpp arg_left_
_lhsOprec :: Int
_lhsOprec = rule390 _rightIprec
_rightOnested = rule391 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule389 = \ ((_rightIpp) :: PP_Doc) left_ ->
left_ >#< _rightIpp
rule390 = \ ((_rightIprec) :: Int) ->
_rightIprec
rule391 = \ ((_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 _funcIpp _funcIprec) = inv_Type_s50 _funcX50 (T_Type_vIn49 _funcOnested)
(T_Types_vOut52 _argsIpps) = inv_Types_s53 _argsX53 (T_Types_vIn52 _argsOnested)
_lhsOpp :: PP_Doc
_lhsOpp = rule392 _argsIpps _funcIpp
_lhsOprec :: Int
_lhsOprec = rule393 _funcIprec
_funcOnested = rule394 _lhsInested
_argsOnested = rule395 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule392 = \ ((_argsIpps) :: PP_Docs) ((_funcIpp) :: PP_Doc) ->
hv_sp (_funcIpp : _argsIpps)
rule393 = \ ((_funcIprec) :: Int) ->
_funcIprec
rule394 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule395 = \ ((_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 _tpsIpps) = inv_Types_s53 _tpsX53 (T_Types_vIn52 _tpsOnested)
_lhsOprec :: Int
_lhsOprec = rule396 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule397 _lhsInested _tpsIpps
_tpsOnested = rule398 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule396 = \ (_ :: ()) ->
5
rule397 = \ ((_lhsInested) :: Bool) ((_tpsIpps) :: PP_Docs) ->
ppTuple _lhsInested _tpsIpps
rule398 = \ ((_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 _tpsIpps) = inv_Types_s53 _tpsX53 (T_Types_vIn52 _tpsOnested)
_lhsOprec :: Int
_lhsOprec = rule399 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule400 _lhsInested _tpsIpps
_tpsOnested = rule401 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule399 = \ (_ :: ()) ->
5
rule400 = \ ((_lhsInested) :: Bool) ((_tpsIpps) :: PP_Docs) ->
ppUnboxedTuple _lhsInested _tpsIpps
rule401 = \ ((_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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOprec :: Int
_lhsOprec = rule402 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule403 _tpIpp
_tpOnested = rule404 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule402 = \ (_ :: ()) ->
5
rule403 = \ ((_tpIpp) :: PP_Doc) ->
"[" >|< _tpIpp >|< "]"
rule404 = \ ((_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 = rule405 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule406 arg_txt_
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule405 = \ (_ :: ()) ->
5
rule406 = \ txt_ ->
if reallySimple txt_ then text txt_ else pp_parens (text txt_)
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 = rule407 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule408 _prefix arg_name_ arg_params_
_prefix = rule409 arg_deforested_
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule407 = \ (_ :: ()) ->
5
rule408 = \ _prefix name_ params_ ->
_prefix >|< text name_ >#< hv_sp params_
rule409 = \ deforested_ ->
if deforested_
then text "T_"
else empty
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 _tpIpp _tpIprec) = inv_Type_s50 _tpX50 (T_Type_vIn49 _tpOnested)
_lhsOprec :: Int
_lhsOprec = rule410 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule411 _tpIpp
_tpOnested = rule412 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule410 = \ (_ :: ()) ->
5
rule411 = \ ((_tpIpp) :: PP_Doc) ->
text "Maybe" >#< pp_parens _tpIpp
rule412 = \ ((_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 _leftIpp _leftIprec) = inv_Type_s50 _leftX50 (T_Type_vIn49 _leftOnested)
(T_Type_vOut49 _rightIpp _rightIprec) = inv_Type_s50 _rightX50 (T_Type_vIn49 _rightOnested)
_lhsOprec :: Int
_lhsOprec = rule413 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule414 _leftIpp _rightIpp
_leftOnested = rule415 _lhsInested
_rightOnested = rule416 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule413 = \ (_ :: ()) ->
5
rule414 = \ ((_leftIpp) :: PP_Doc) ((_rightIpp) :: PP_Doc) ->
text "Either" >#< pp_parens _leftIpp >#< pp_parens _rightIpp
rule415 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule416 = \ ((_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 _keyIpp _keyIprec) = inv_Type_s50 _keyX50 (T_Type_vIn49 _keyOnested)
(T_Type_vOut49 _valueIpp _valueIprec) = inv_Type_s50 _valueX50 (T_Type_vIn49 _valueOnested)
_lhsOprec :: Int
_lhsOprec = rule417 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule418 _keyIpp _valueIpp
_keyOnested = rule419 _lhsInested
_valueOnested = rule420 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule417 = \ (_ :: ()) ->
5
rule418 = \ ((_keyIpp) :: PP_Doc) ((_valueIpp) :: PP_Doc) ->
text "Data.Map.Map" >#< pp_parens _keyIpp >#< pp_parens _valueIpp
rule419 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule420 = \ ((_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 _valueIpp _valueIprec) = inv_Type_s50 _valueX50 (T_Type_vIn49 _valueOnested)
_lhsOprec :: Int
_lhsOprec = rule421 ()
_lhsOpp :: PP_Doc
_lhsOpp = rule422 _valueIpp
_valueOnested = rule423 _lhsInested
!__result_ = T_Type_vOut49 _lhsOpp _lhsOprec
in __result_ )
in C_Type_s50 v49
rule421 = \ (_ :: ()) ->
5
rule422 = \ ((_valueIpp) :: PP_Doc) ->
text "Data.IntMap.IntMap" >#< pp_parens _valueIpp
rule423 = \ ((_lhsInested) :: Bool) ->
_lhsInested
data Inh_Types = Inh_Types { nested_Inh_Types :: !(Bool) }
data Syn_Types = Syn_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 arg = T_Types_vIn52 _lhsInested
!(T_Types_vOut52 _lhsOpps) <- return (inv_Types_s53 sem arg)
return (Syn_Types _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 (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 _hdIpp _hdIprec) = inv_Type_s50 _hdX50 (T_Type_vIn49 _hdOnested)
(T_Types_vOut52 _tlIpps) = inv_Types_s53 _tlX53 (T_Types_vIn52 _tlOnested)
_lhsOpps :: PP_Docs
_lhsOpps = rule424 _hdIpp _tlIpps
_hdOnested = rule425 _lhsInested
_tlOnested = rule426 _lhsInested
!__result_ = T_Types_vOut52 _lhsOpps
in __result_ )
in C_Types_s53 v52
rule424 = \ ((_hdIpp) :: PP_Doc) ((_tlIpps) :: PP_Docs) ->
_hdIpp : _tlIpps
rule425 = \ ((_lhsInested) :: Bool) ->
_lhsInested
rule426 = \ ((_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 = rule427 ()
!__result_ = T_Types_vOut52 _lhsOpps
in __result_ )
in C_Types_s53 v52
rule427 = \ (_ :: ()) ->
[]