packages feed

uhc-light-1.1.7.2: src/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.hs


-- UUAGC 0.9.50.2 (build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/Optim)
module UHC.Light.Compiler.Core.Trf.OptimizeStrictness(cmodTrfOptimizeStrictness) where

import Data.Maybe
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Ty
import UHC.Light.Compiler.AbstractCore
import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.List
import Data.Maybe
import UHC.Util.Utils
import UHC.Light.Compiler.LamInfo
import UHC.Light.Compiler.Base.Debug
import UHC.Light.Compiler.Base.HsName.Builtin















cmodTrfOptimizeStrictness
  :: EHCOpts
     -> LamMp
     -> CModule
     -> ( CModule
        , LamMp
        )
cmodTrfOptimizeStrictness
     opts
     lamMp
     cmod
  =  let  t = wrap_CodeAGItf (sem_CodeAGItf (CodeAGItf_AGItf cmod))
                             (Inh_CodeAGItf
                               { opts_Inh_CodeAGItf = opts
                               , lamMp_Inh_CodeAGItf = lamMp
                               })
     in   ( cTrf_Syn_CodeAGItf t
          , gathLamMp_Syn_CodeAGItf t
          )

-- CAlt --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         anaEvalCtxt          : AnaEval
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CAlt 
   alternatives:
      alternative Alt:
         child pat            : CPat 
         child expr           : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
-}
-- cata
sem_CAlt :: CAlt ->
            T_CAlt
sem_CAlt (CAlt_Alt _pat _expr) =
    (sem_CAlt_Alt (sem_CPat _pat) (sem_CExpr _expr))
-- semantic domain
type T_CAlt = AnaEval ->
              LamMp ->
              EHCOpts ->
              ( CAlt)
sem_CAlt_Alt :: T_CPat ->
                T_CExpr ->
                T_CAlt
sem_CAlt_Alt pat_ expr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CAlt
              _patOlamMp :: LamMp
              _patOopts :: EHCOpts
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _patIcTrf :: CPat
              _patIfldNmL :: ([HsName])
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 121, column 17)
              _lamArgAnaEvalL =
                  []
              -- self rule
              _cTrf =
                  CAlt_Alt _patIcTrf _exprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _patOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _patOopts =
                  _lhsIopts
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _patIcTrf,_patIfldNmL) =
                  pat_ _patOlamMp _patOopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsOcTrf)))
-- CAltL -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         anaEvalCtxt          : AnaEval
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CAltL 
   alternatives:
      alternative Cons:
         child hd             : CAlt 
         child tl             : CAltL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CAltL :: CAltL ->
             T_CAltL
sem_CAltL list =
    (Prelude.foldr sem_CAltL_Cons sem_CAltL_Nil (Prelude.map sem_CAlt list))
-- semantic domain
type T_CAltL = AnaEval ->
               LamMp ->
               EHCOpts ->
               ( CAltL)
sem_CAltL_Cons :: T_CAlt ->
                  T_CAltL ->
                  T_CAltL
sem_CAltL_Cons hd_ tl_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CAltL
              _hdOanaEvalCtxt :: AnaEval
              _hdOlamMp :: LamMp
              _hdOopts :: EHCOpts
              _tlOanaEvalCtxt :: AnaEval
              _tlOlamMp :: LamMp
              _tlOopts :: EHCOpts
              _hdIcTrf :: CAlt
              _tlIcTrf :: CAltL
              -- self rule
              _cTrf =
                  (:) _hdIcTrf _tlIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _hdOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (down)
              _hdOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _hdOopts =
                  _lhsIopts
              -- copy rule (down)
              _tlOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (down)
              _tlOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _tlOopts =
                  _lhsIopts
              ( _hdIcTrf) =
                  hd_ _hdOanaEvalCtxt _hdOlamMp _hdOopts
              ( _tlIcTrf) =
                  tl_ _tlOanaEvalCtxt _tlOlamMp _tlOopts
          in  ( _lhsOcTrf)))
sem_CAltL_Nil :: T_CAltL
sem_CAltL_Nil =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CAltL
              -- self rule
              _cTrf =
                  []
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CBind -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         bindLamMp            : LamMp
         cTrf                 : CBind 
         nm                   : HsName
   alternatives:
      alternative Bind:
         child nm             : {HsName}
         child bindAspects    : CBoundL 
         visit 0:
            local mbStrictArgsRes : _
            local cTrf        : _
-}
-- cata
sem_CBind :: CBind ->
             T_CBind
sem_CBind (CBind_Bind _nm _bindAspects) =
    (sem_CBind_Bind _nm (sem_CBoundL _bindAspects))
-- semantic domain
type T_CBind = LamMp ->
               EHCOpts ->
               ( LamMp,CBind,HsName)
sem_CBind_Bind :: HsName ->
                  T_CBoundL ->
                  T_CBind
sem_CBind_Bind nm_ bindAspects_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _bindAspectsOnm :: HsName
              _lhsOnm :: HsName
              _lhsOcTrf :: CBind
              _lhsObindLamMp :: LamMp
              _bindAspectsOlamMp :: LamMp
              _bindAspectsOmbStrictArgsRes :: (Maybe (RelevTy,[AnaEval],AnaEval))
              _bindAspectsOopts :: EHCOpts
              _bindAspectsIbindLamMp :: LamMp
              _bindAspectsIcTrf :: CBoundL
              _bindAspectsIcTrfBoundL :: ([CBound])
              _bindAspectsIgathStrictTyL :: ([RelevTy])
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 4, column 17)
              _bindAspectsOnm =
                  nm_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 12, column 17)
              _lhsOnm =
                  nm_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 102, column 17)
              _mbStrictArgsRes =
                  case _bindAspectsIgathStrictTyL of
                    [t@(RelevTy_Fun _ _ _ a r)]
                      -> Just (t, map relevtyAnaEval a, relevtyAnaEval r)
                    _ -> Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 153, column 17)
              _lhsOcTrf =
                  CBind_Bind nm_ _bindAspectsIcTrfBoundL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  _bindAspectsIbindLamMp
              -- self rule
              _cTrf =
                  CBind_Bind nm_ _bindAspectsIcTrf
              -- copy rule (down)
              _bindAspectsOlamMp =
                  _lhsIlamMp
              -- copy rule (from local)
              _bindAspectsOmbStrictArgsRes =
                  _mbStrictArgsRes
              -- copy rule (down)
              _bindAspectsOopts =
                  _lhsIopts
              ( _bindAspectsIbindLamMp,_bindAspectsIcTrf,_bindAspectsIcTrfBoundL,_bindAspectsIgathStrictTyL) =
                  bindAspects_ _bindAspectsOlamMp _bindAspectsOmbStrictArgsRes _bindAspectsOnm _bindAspectsOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOnm)))
-- CBindAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBindAnn 
   alternatives:
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindAnn :: CBindAnn ->
                T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
    (sem_CBindAnn_Coe _coe)
-- semantic domain
type T_CBindAnn = LamMp ->
                  EHCOpts ->
                  ( CBindAnn)
sem_CBindAnn_Coe :: RelevCoe ->
                    T_CBindAnn
sem_CBindAnn_Coe coe_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CBindAnn
              -- self rule
              _cTrf =
                  CBindAnn_Coe coe_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CBindAnnL ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBindAnnL 
   alternatives:
      alternative Cons:
         child hd             : CBindAnn 
         child tl             : CBindAnnL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindAnnL :: CBindAnnL ->
                 T_CBindAnnL
sem_CBindAnnL list =
    (Prelude.foldr sem_CBindAnnL_Cons sem_CBindAnnL_Nil (Prelude.map sem_CBindAnn list))
-- semantic domain
type T_CBindAnnL = LamMp ->
                   EHCOpts ->
                   ( CBindAnnL)
sem_CBindAnnL_Cons :: T_CBindAnn ->
                      T_CBindAnnL ->
                      T_CBindAnnL
sem_CBindAnnL_Cons hd_ tl_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CBindAnnL
              _hdOlamMp :: LamMp
              _hdOopts :: EHCOpts
              _tlOlamMp :: LamMp
              _tlOopts :: EHCOpts
              _hdIcTrf :: CBindAnn
              _tlIcTrf :: CBindAnnL
              -- self rule
              _cTrf =
                  (:) _hdIcTrf _tlIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _hdOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _hdOopts =
                  _lhsIopts
              -- copy rule (down)
              _tlOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _tlOopts =
                  _lhsIopts
              ( _hdIcTrf) =
                  hd_ _hdOlamMp _hdOopts
              ( _tlIcTrf) =
                  tl_ _tlOlamMp _tlOopts
          in  ( _lhsOcTrf)))
sem_CBindAnnL_Nil :: T_CBindAnnL
sem_CBindAnnL_Nil =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CBindAnnL
              -- self rule
              _cTrf =
                  []
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CBindL ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         bindLamMp            : LamMp
         cTrf                 : CBindL 
   alternatives:
      alternative Cons:
         child hd             : CBind 
         child tl             : CBindL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindL :: CBindL ->
              T_CBindL
sem_CBindL list =
    (Prelude.foldr sem_CBindL_Cons sem_CBindL_Nil (Prelude.map sem_CBind list))
-- semantic domain
type T_CBindL = LamMp ->
                EHCOpts ->
                ( LamMp,CBindL)
sem_CBindL_Cons :: T_CBind ->
                   T_CBindL ->
                   T_CBindL
sem_CBindL_Cons hd_ tl_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsObindLamMp :: LamMp
              _lhsOcTrf :: CBindL
              _hdOlamMp :: LamMp
              _hdOopts :: EHCOpts
              _tlOlamMp :: LamMp
              _tlOopts :: EHCOpts
              _hdIbindLamMp :: LamMp
              _hdIcTrf :: CBind
              _hdInm :: HsName
              _tlIbindLamMp :: LamMp
              _tlIcTrf :: CBindL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  _hdIbindLamMp `lamMpUnionBindAspMp` _tlIbindLamMp
              -- self rule
              _cTrf =
                  (:) _hdIcTrf _tlIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _hdOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _hdOopts =
                  _lhsIopts
              -- copy rule (down)
              _tlOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _tlOopts =
                  _lhsIopts
              ( _hdIbindLamMp,_hdIcTrf,_hdInm) =
                  hd_ _hdOlamMp _hdOopts
              ( _tlIbindLamMp,_tlIcTrf) =
                  tl_ _tlOlamMp _tlOopts
          in  ( _lhsObindLamMp,_lhsOcTrf)))
sem_CBindL_Nil :: T_CBindL
sem_CBindL_Nil =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsObindLamMp :: LamMp
              _lhsOcTrf :: CBindL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- self rule
              _cTrf =
                  []
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsObindLamMp,_lhsOcTrf)))
-- CBound ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         anaEvalCtxt          : AnaEval
         lamMp                : LamMp
         mbStrictArgsRes      : Maybe (RelevTy,[AnaEval],AnaEval)
         nm                   : HsName
         opts                 : EHCOpts
      synthesized attributes:
         bindLamMp            : LamMp
         cTrf                 : CBound 
         cTrfBoundL           : [CBound]
         gathStrictTyL        : [RelevTy]
   alternatives:
      alternative Bind:
         child bindMeta       : CMetas 
         child expr           : CExpr 
         visit 0:
            local doWorkerWrapper : _
            local wrapper     : _
            local worker      : _
            local oldbinding  : _
            local cTrf        : _
      alternative Meta:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child cmetas         : CMetas 
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative RelevTy:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child relevTy        : {RelevTy}
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local gathStrictTyL : _
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Val:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child mlev           : {MetaLev}
         child lbl            : {CLbl}
         child expr           : CExpr 
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Ty:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child ty             : {Ty}
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative FFE:
         child callconv       : {FFIWay}
         child expEnt         : {ForeignEnt}
         child expr           : CExpr 
         child ty             : {Ty}
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
-}
-- cata
sem_CBound :: CBound ->
              T_CBound
sem_CBound (CBound_Bind _bindMeta _expr) =
    (sem_CBound_Bind (sem_CMetas _bindMeta) (sem_CExpr _expr))
sem_CBound (CBound_Meta _aspectKeyS _cmetas) =
    (sem_CBound_Meta _aspectKeyS (sem_CMetas _cmetas))
sem_CBound (CBound_RelevTy _aspectKeyS _relevTy) =
    (sem_CBound_RelevTy _aspectKeyS _relevTy)
sem_CBound (CBound_Val _aspectKeyS _mlev _lbl _expr) =
    (sem_CBound_Val _aspectKeyS _mlev _lbl (sem_CExpr _expr))
sem_CBound (CBound_Ty _aspectKeyS _ty) =
    (sem_CBound_Ty _aspectKeyS _ty)
sem_CBound (CBound_FFE _callconv _expEnt _expr _ty) =
    (sem_CBound_FFE _callconv _expEnt (sem_CExpr _expr) _ty)
-- semantic domain
type T_CBound = AnaEval ->
                LamMp ->
                (Maybe (RelevTy,[AnaEval],AnaEval)) ->
                HsName ->
                EHCOpts ->
                ( LamMp,CBound,([CBound]),([RelevTy]))
sem_CBound_Bind :: T_CMetas ->
                   T_CExpr ->
                   T_CBound
sem_CBound_Bind bindMeta_ expr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOanaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              _bindMetaOlamMp :: LamMp
              _bindMetaOopts :: EHCOpts
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _bindMetaIcTrf :: CMetas
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 111, column 17)
              _doWorkerWrapper =
                  isJust _lhsImbStrictArgsRes
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 116, column 17)
              (_exprOlamArgAnaEvalL,_exprOanaEvalCtxt) =
                  maybe ([],top) tup123to23 _lhsImbStrictArgsRes
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 131, column 17)
              _wrapper =
                  case (_exprImbLam,_lhsImbStrictArgsRes) of
                    (Just as, Just (_,evs,_))
                      -> [ CBound_Val acbaspkeyNone 0 CLbl_None
                         $ acoreLam wrapperArgs
                         $ (\b -> foldr ($) b bodyWrappers)
                         $ acoreApp (CExpr_Var (ACoreBindRef _lhsInm (Just acbaspkeyStrict)))
                         $ map acoreVar workerArgs
                         ]
                      where (wrapperArgs,workerArgs,bodyWrappers) = unzip3 $ zipWith mk as evs
                            mk a AnaEval_WHNF = (a, a', acoreLet1Strict a' (acoreVar a))
                               where a' = hsnUniqify HsNameUniqifier_Evaluated a
                            mk a _            = (a, a , id                             )
                    _ -> []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 131, column 17)
              _worker =
                  if _doWorkerWrapper then [CBound_Val acbaspkeyStrict 0 CLbl_None _exprIcTrf] else []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 131, column 17)
              _oldbinding =
                  if _doWorkerWrapper then [] else [_cTrf]
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 146, column 17)
              _lhsOcTrfBoundL =
                  _worker ++ _wrapper ++ _oldbinding
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  CBound_Bind _bindMetaIcTrf _exprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _bindMetaOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bindMetaOopts =
                  _lhsIopts
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _bindMetaIcTrf) =
                  bindMeta_ _bindMetaOlamMp _bindMetaOopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBound_Meta :: ACoreBindAspectKeyS ->
                   T_CMetas ->
                   T_CBound
sem_CBound_Meta aspectKeyS_ cmetas_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              _cmetasOlamMp :: LamMp
              _cmetasOopts :: EHCOpts
              _cmetasIcTrf :: CMetas
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 81, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 118, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 150, column 17)
              _lhsOcTrfBoundL =
                  []
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  CBound_Meta aspectKeyS_ _cmetasIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _cmetasOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _cmetasOopts =
                  _lhsIopts
              ( _cmetasIcTrf) =
                  cmetas_ _cmetasOlamMp _cmetasOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBound_RelevTy :: ACoreBindAspectKeyS ->
                      RelevTy ->
                      T_CBound
sem_CBound_RelevTy aspectKeyS_ relevTy_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 81, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 95, column 17)
              _gathStrictTyL =
                  if aspectKeyS_ == acbaspkeyStrict
                  then [relevTy_]
                  else []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 118, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 150, column 17)
              _lhsOcTrfBoundL =
                  []
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  _gathStrictTyL
              -- self rule
              _cTrf =
                  CBound_RelevTy aspectKeyS_ relevTy_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBound_Val :: ACoreBindAspectKeyS ->
                  MetaLev ->
                  CLbl ->
                  T_CExpr ->
                  T_CBound
sem_CBound_Val aspectKeyS_ mlev_ lbl_ expr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 81, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 118, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 150, column 17)
              _lhsOcTrfBoundL =
                  []
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  CBound_Val aspectKeyS_ mlev_ lbl_ _exprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (from local)
              _exprOanaEvalCtxt =
                  _anaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBound_Ty :: ACoreBindAspectKeyS ->
                 Ty ->
                 T_CBound
sem_CBound_Ty aspectKeyS_ ty_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 81, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 118, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 150, column 17)
              _lhsOcTrfBoundL =
                  []
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  CBound_Ty aspectKeyS_ ty_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBound_FFE :: FFIWay ->
                  ForeignEnt ->
                  T_CExpr ->
                  Ty ->
                  T_CBound
sem_CBound_FFE callconv_ expEnt_ expr_ ty_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrfBoundL :: ([CBound])
              _lhsObindLamMp :: LamMp
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBound
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 81, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 118, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 147, column 17)
              _lhsOcTrfBoundL =
                  [_cTrf]
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  CBound_FFE callconv_ expEnt_ _exprIcTrf ty_
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (from local)
              _exprOanaEvalCtxt =
                  _anaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
-- CBoundL -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         mbStrictArgsRes      : Maybe (RelevTy,[AnaEval],AnaEval)
         nm                   : HsName
         opts                 : EHCOpts
      synthesized attributes:
         bindLamMp            : LamMp
         cTrf                 : CBoundL 
         cTrfBoundL           : [CBound]
         gathStrictTyL        : [RelevTy]
   alternatives:
      alternative Cons:
         child hd             : CBound 
         child tl             : CBoundL 
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBoundL :: CBoundL ->
               T_CBoundL
sem_CBoundL list =
    (Prelude.foldr sem_CBoundL_Cons sem_CBoundL_Nil (Prelude.map sem_CBound list))
-- semantic domain
type T_CBoundL = LamMp ->
                 (Maybe (RelevTy,[AnaEval],AnaEval)) ->
                 HsName ->
                 EHCOpts ->
                 ( LamMp,CBoundL,([CBound]),([RelevTy]))
sem_CBoundL_Cons :: T_CBound ->
                    T_CBoundL ->
                    T_CBoundL
sem_CBoundL_Cons hd_ tl_ =
    (\ _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsObindLamMp :: LamMp
              _lhsOcTrfBoundL :: ([CBound])
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBoundL
              _hdOanaEvalCtxt :: AnaEval
              _hdOlamMp :: LamMp
              _hdOmbStrictArgsRes :: (Maybe (RelevTy,[AnaEval],AnaEval))
              _hdOnm :: HsName
              _hdOopts :: EHCOpts
              _tlOlamMp :: LamMp
              _tlOmbStrictArgsRes :: (Maybe (RelevTy,[AnaEval],AnaEval))
              _tlOnm :: HsName
              _tlOopts :: EHCOpts
              _hdIbindLamMp :: LamMp
              _hdIcTrf :: CBound
              _hdIcTrfBoundL :: ([CBound])
              _hdIgathStrictTyL :: ([RelevTy])
              _tlIbindLamMp :: LamMp
              _tlIcTrf :: CBoundL
              _tlIcTrfBoundL :: ([CBound])
              _tlIgathStrictTyL :: ([RelevTy])
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 78, column 17)
              _anaEvalCtxt =
                  top
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  _hdIbindLamMp `lamMpUnionBindAspMp` _tlIbindLamMp
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 128, column 32)
              _lhsOcTrfBoundL =
                  _hdIcTrfBoundL ++ _tlIcTrfBoundL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  _hdIgathStrictTyL ++ _tlIgathStrictTyL
              -- self rule
              _cTrf =
                  (:) _hdIcTrf _tlIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (from local)
              _hdOanaEvalCtxt =
                  _anaEvalCtxt
              -- copy rule (down)
              _hdOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _hdOmbStrictArgsRes =
                  _lhsImbStrictArgsRes
              -- copy rule (down)
              _hdOnm =
                  _lhsInm
              -- copy rule (down)
              _hdOopts =
                  _lhsIopts
              -- copy rule (down)
              _tlOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _tlOmbStrictArgsRes =
                  _lhsImbStrictArgsRes
              -- copy rule (down)
              _tlOnm =
                  _lhsInm
              -- copy rule (down)
              _tlOopts =
                  _lhsIopts
              ( _hdIbindLamMp,_hdIcTrf,_hdIcTrfBoundL,_hdIgathStrictTyL) =
                  hd_ _hdOanaEvalCtxt _hdOlamMp _hdOmbStrictArgsRes _hdOnm _hdOopts
              ( _tlIbindLamMp,_tlIcTrf,_tlIcTrfBoundL,_tlIgathStrictTyL) =
                  tl_ _tlOlamMp _tlOmbStrictArgsRes _tlOnm _tlOopts
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
    (\ _lhsIlamMp
       _lhsImbStrictArgsRes
       _lhsInm
       _lhsIopts ->
         (let _lhsObindLamMp :: LamMp
              _lhsOcTrfBoundL :: ([CBound])
              _lhsOgathStrictTyL :: ([RelevTy])
              _lhsOcTrf :: CBoundL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 11, column 30)
              _lhsObindLamMp =
                  Map.empty
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 128, column 32)
              _lhsOcTrfBoundL =
                  []
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 92, column 35)
              _lhsOgathStrictTyL =
                  []
              -- self rule
              _cTrf =
                  []
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsObindLamMp,_lhsOcTrf,_lhsOcTrfBoundL,_lhsOgathStrictTyL)))
-- CDataCon ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDataCon 
   alternatives:
      alternative Con:
         child conNm          : {HsName}
         child tagNr          : {Int}
         child arity          : {Int}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDataCon :: CDataCon ->
                T_CDataCon
sem_CDataCon (CDataCon_Con _conNm _tagNr _arity) =
    (sem_CDataCon_Con _conNm _tagNr _arity)
-- semantic domain
type T_CDataCon = ( CDataCon)
sem_CDataCon_Con :: HsName ->
                    Int ->
                    Int ->
                    T_CDataCon
sem_CDataCon_Con conNm_ tagNr_ arity_ =
    (let _lhsOcTrf :: CDataCon
         -- self rule
         _cTrf =
             CDataCon_Con conNm_ tagNr_ arity_
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CDataConL ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDataConL 
   alternatives:
      alternative Cons:
         child hd             : CDataCon 
         child tl             : CDataConL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDataConL :: CDataConL ->
                 T_CDataConL
sem_CDataConL list =
    (Prelude.foldr sem_CDataConL_Cons sem_CDataConL_Nil (Prelude.map sem_CDataCon list))
-- semantic domain
type T_CDataConL = ( CDataConL)
sem_CDataConL_Cons :: T_CDataCon ->
                      T_CDataConL ->
                      T_CDataConL
sem_CDataConL_Cons hd_ tl_ =
    (let _lhsOcTrf :: CDataConL
         _hdIcTrf :: CDataCon
         _tlIcTrf :: CDataConL
         -- self rule
         _cTrf =
             (:) _hdIcTrf _tlIcTrf
         -- self rule
         _lhsOcTrf =
             _cTrf
         ( _hdIcTrf) =
             hd_
         ( _tlIcTrf) =
             tl_
     in  ( _lhsOcTrf))
sem_CDataConL_Nil :: T_CDataConL
sem_CDataConL_Nil =
    (let _lhsOcTrf :: CDataConL
         -- self rule
         _cTrf =
             []
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CDeclMeta ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDeclMeta 
   alternatives:
      alternative Data:
         child tyNm           : {HsName}
         child dataCons       : CDataConL 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDeclMeta :: CDeclMeta ->
                 T_CDeclMeta
sem_CDeclMeta (CDeclMeta_Data _tyNm _dataCons) =
    (sem_CDeclMeta_Data _tyNm (sem_CDataConL _dataCons))
-- semantic domain
type T_CDeclMeta = ( CDeclMeta)
sem_CDeclMeta_Data :: HsName ->
                      T_CDataConL ->
                      T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
    (let _lhsOcTrf :: CDeclMeta
         _dataConsIcTrf :: CDataConL
         -- self rule
         _cTrf =
             CDeclMeta_Data tyNm_ _dataConsIcTrf
         -- self rule
         _lhsOcTrf =
             _cTrf
         ( _dataConsIcTrf) =
             dataCons_
     in  ( _lhsOcTrf))
-- CDeclMetaL --------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDeclMetaL 
   alternatives:
      alternative Cons:
         child hd             : CDeclMeta 
         child tl             : CDeclMetaL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDeclMetaL :: CDeclMetaL ->
                  T_CDeclMetaL
sem_CDeclMetaL list =
    (Prelude.foldr sem_CDeclMetaL_Cons sem_CDeclMetaL_Nil (Prelude.map sem_CDeclMeta list))
-- semantic domain
type T_CDeclMetaL = ( CDeclMetaL)
sem_CDeclMetaL_Cons :: T_CDeclMeta ->
                       T_CDeclMetaL ->
                       T_CDeclMetaL
sem_CDeclMetaL_Cons hd_ tl_ =
    (let _lhsOcTrf :: CDeclMetaL
         _hdIcTrf :: CDeclMeta
         _tlIcTrf :: CDeclMetaL
         -- self rule
         _cTrf =
             (:) _hdIcTrf _tlIcTrf
         -- self rule
         _lhsOcTrf =
             _cTrf
         ( _hdIcTrf) =
             hd_
         ( _tlIcTrf) =
             tl_
     in  ( _lhsOcTrf))
sem_CDeclMetaL_Nil :: T_CDeclMetaL
sem_CDeclMetaL_Nil =
    (let _lhsOcTrf :: CDeclMetaL
         -- self rule
         _cTrf =
             []
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CExport -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CExport 
   alternatives:
      alternative Export:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExport :: CExport ->
               T_CExport
sem_CExport (CExport_Export _nm) =
    (sem_CExport_Export _nm)
-- semantic domain
type T_CExport = ( CExport)
sem_CExport_Export :: HsName ->
                      T_CExport
sem_CExport_Export nm_ =
    (let _lhsOcTrf :: CExport
         -- self rule
         _cTrf =
             CExport_Export nm_
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CExportL ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CExportL 
   alternatives:
      alternative Cons:
         child hd             : CExport 
         child tl             : CExportL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExportL :: CExportL ->
                T_CExportL
sem_CExportL list =
    (Prelude.foldr sem_CExportL_Cons sem_CExportL_Nil (Prelude.map sem_CExport list))
-- semantic domain
type T_CExportL = ( CExportL)
sem_CExportL_Cons :: T_CExport ->
                     T_CExportL ->
                     T_CExportL
sem_CExportL_Cons hd_ tl_ =
    (let _lhsOcTrf :: CExportL
         _hdIcTrf :: CExport
         _tlIcTrf :: CExportL
         -- self rule
         _cTrf =
             (:) _hdIcTrf _tlIcTrf
         -- self rule
         _lhsOcTrf =
             _cTrf
         ( _hdIcTrf) =
             hd_
         ( _tlIcTrf) =
             tl_
     in  ( _lhsOcTrf))
sem_CExportL_Nil :: T_CExportL
sem_CExportL_Nil =
    (let _lhsOcTrf :: CExportL
         -- self rule
         _cTrf =
             []
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CExpr -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         anaEvalCtxt          : AnaEval
         lamArgAnaEvalL       : [AnaEval]
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         appArgAnaEvalL       : [AnaEval]
         appFunKind           : AppFunKind
         appResAnaEval        : AnaEval
         cTrf                 : CExpr 
         gathLamMp            : LamMp
         mbLam                : Maybe [HsName]
         mbVar                : Maybe HsName
   alternatives:
      alternative Var:
         child ref            : {ACoreBindRef}
         visit 0:
            local mbVar       : {Maybe HsName}
            local nm          : {HsName}
            local nmAsp       : {HsName}
            local lamArgAnaEvalL : _
            local strictRef   : _
            local mbStrict    : _
            local cTrf        : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative String:
         child str            : {String}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Integer:
         child integer        : {Integer}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Tup:
         child tag            : {CTag}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Let:
         child categ          : {CBindCateg}
         child binds          : CBindL 
         child body           : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative App:
         child func           : CExpr 
         child arg            : CBound 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Lam:
         child bind           : CBind 
         child body           : CExpr 
         visit 0:
            local argNm       : _
            local argAnaEval  : _
            local cTrf        : _
      alternative Case:
         child expr           : CExpr 
         child alts           : CAltL 
         child dflt           : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative CaseAltFail:
         child failReason     : {CaseAltFailReason}
         child errorExpr      : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative TupDel:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative TupIns:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative TupUpd:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative FFI:
         child callconv       : {FFIWay}
         child safety         : {String}
         child impEnt         : {ForeignEnt}
         child ty             : {Ty}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Dbg:
         child info           : {String}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Hole:
         child uid            : {UID}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative HoleLet:
         child bindsUid       : {UID}
         child body           : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative CoeArg:
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative ImplsApp:
         child func           : CExpr 
         child uid            : {ImplsVarId}
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative ImplsLam:
         child uid            : {ImplsVarId}
         child body           : CExpr 
         visit 0:
            local lamArgAnaEvalL : _
            local cTrf        : _
      alternative Ann:
         child ann            : CExprAnn 
         child expr           : CExpr 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExpr :: CExpr ->
             T_CExpr
sem_CExpr (CExpr_Var _ref) =
    (sem_CExpr_Var _ref)
sem_CExpr (CExpr_Int _int) =
    (sem_CExpr_Int _int)
sem_CExpr (CExpr_Char _char) =
    (sem_CExpr_Char _char)
sem_CExpr (CExpr_String _str) =
    (sem_CExpr_String _str)
sem_CExpr (CExpr_Integer _integer) =
    (sem_CExpr_Integer _integer)
sem_CExpr (CExpr_Tup _tag) =
    (sem_CExpr_Tup _tag)
sem_CExpr (CExpr_Let _categ _binds _body) =
    (sem_CExpr_Let _categ (sem_CBindL _binds) (sem_CExpr _body))
sem_CExpr (CExpr_App _func _arg) =
    (sem_CExpr_App (sem_CExpr _func) (sem_CBound _arg))
sem_CExpr (CExpr_Lam _bind _body) =
    (sem_CExpr_Lam (sem_CBind _bind) (sem_CExpr _body))
sem_CExpr (CExpr_Case _expr _alts _dflt) =
    (sem_CExpr_Case (sem_CExpr _expr) (sem_CAltL _alts) (sem_CExpr _dflt))
sem_CExpr (CExpr_CaseAltFail _failReason _errorExpr) =
    (sem_CExpr_CaseAltFail _failReason (sem_CExpr _errorExpr))
sem_CExpr (CExpr_TupDel _expr _tag _nm _offset) =
    (sem_CExpr_TupDel (sem_CExpr _expr) _tag _nm (sem_CExpr _offset))
sem_CExpr (CExpr_TupIns _expr _tag _nm _offset _fldExpr) =
    (sem_CExpr_TupIns (sem_CExpr _expr) _tag _nm (sem_CExpr _offset) (sem_CExpr _fldExpr))
sem_CExpr (CExpr_TupUpd _expr _tag _nm _offset _fldExpr) =
    (sem_CExpr_TupUpd (sem_CExpr _expr) _tag _nm (sem_CExpr _offset) (sem_CExpr _fldExpr))
sem_CExpr (CExpr_FFI _callconv _safety _impEnt _ty) =
    (sem_CExpr_FFI _callconv _safety _impEnt _ty)
sem_CExpr (CExpr_Dbg _info) =
    (sem_CExpr_Dbg _info)
sem_CExpr (CExpr_Hole _uid) =
    (sem_CExpr_Hole _uid)
sem_CExpr (CExpr_HoleLet _bindsUid _body) =
    (sem_CExpr_HoleLet _bindsUid (sem_CExpr _body))
sem_CExpr (CExpr_CoeArg) =
    (sem_CExpr_CoeArg)
sem_CExpr (CExpr_ImplsApp _func _uid) =
    (sem_CExpr_ImplsApp (sem_CExpr _func) _uid)
sem_CExpr (CExpr_ImplsLam _uid _body) =
    (sem_CExpr_ImplsLam _uid (sem_CExpr _body))
sem_CExpr (CExpr_Ann _ann _expr) =
    (sem_CExpr_Ann (sem_CExprAnn _ann) (sem_CExpr _expr))
-- semantic domain
type T_CExpr = AnaEval ->
               ([AnaEval]) ->
               LamMp ->
               EHCOpts ->
               ( ([AnaEval]),AppFunKind,AnaEval,CExpr,LamMp,(Maybe [HsName]),(Maybe HsName))
sem_CExpr_Var :: ACoreBindRef ->
                 T_CExpr
sem_CExpr_Var ref_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _mbVar :: (Maybe HsName)
              _nm :: HsName
              _nmAsp :: HsName
              _lhsOgathLamMp :: LamMp
              _lhsOcTrf :: CExpr
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOmbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 13, column 17)
              _lhsOappFunKind =
                  AppFunKind_Fun ref_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 21, column 17)
              _mbVar =
                  Just _nm
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 15, column 17)
              _nm =
                  acbrefNm ref_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 15, column 17)
              _nmAsp =
                  mkHNm ref_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 156, column 17)
              _strictRef =
                  acbrefAspAnd acbaspkeyStrict ref_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 156, column 17)
              _mbStrict =
                  case fmap libindaspRelevTy $ lamMpLookupAsp2 _strictRef _lhsIlamMp of
                    Just (t@(RelevTy_Fun _ _ _ a r))
                      -> Just (t, map relevtyAnaEval a, relevtyAnaEval r)
                    _ -> Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 163, column 17)
              _lhsOcTrf =
                  CExpr_Var $ maybe ref_ (const _strictRef) _mbStrict
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 169, column 17)
              (_lhsOappArgAnaEvalL,_lhsOappResAnaEval) =
                  maybe ([],top) tup123to23 _mbStrict
              -- self rule
              _cTrf =
                  CExpr_Var ref_
              -- copy rule (from local)
              _lhsOmbVar =
                  _mbVar
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Int :: Int ->
                 T_CExpr
sem_CExpr_Int int_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Int int_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Char :: Char ->
                  T_CExpr
sem_CExpr_Char char_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Char char_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_String :: String ->
                    T_CExpr
sem_CExpr_String str_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_String str_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Integer :: Integer ->
                     T_CExpr
sem_CExpr_Integer integer_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Integer integer_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Tup :: CTag ->
                 T_CExpr
sem_CExpr_Tup tag_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 11, column 17)
              _lhsOappFunKind =
                  AppFunKind_Tag tag_
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Tup tag_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Let :: CBindCateg ->
                 T_CBindL ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Let categ_ binds_ body_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _bindsOlamMp :: LamMp
              _bindsOopts :: EHCOpts
              _bodyOanaEvalCtxt :: AnaEval
              _bodyOlamArgAnaEvalL :: ([AnaEval])
              _bodyOlamMp :: LamMp
              _bodyOopts :: EHCOpts
              _bindsIbindLamMp :: LamMp
              _bindsIcTrf :: CBindL
              _bodyIappArgAnaEvalL :: ([AnaEval])
              _bodyIappFunKind :: AppFunKind
              _bodyIappResAnaEval :: AnaEval
              _bodyIcTrf :: CExpr
              _bodyIgathLamMp :: LamMp
              _bodyImbLam :: (Maybe [HsName])
              _bodyImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 7, column 17)
              _lhsOgathLamMp =
                  _bindsIbindLamMp `Map.union` _bodyIgathLamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Let categ_ _bindsIcTrf _bodyIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _bindsOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bindsOopts =
                  _lhsIopts
              -- copy rule (down)
              _bodyOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _bodyOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _bodyOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bodyOopts =
                  _lhsIopts
              ( _bindsIbindLamMp,_bindsIcTrf) =
                  binds_ _bindsOlamMp _bindsOopts
              ( _bodyIappArgAnaEvalL,_bodyIappFunKind,_bodyIappResAnaEval,_bodyIcTrf,_bodyIgathLamMp,_bodyImbLam,_bodyImbVar) =
                  body_ _bodyOanaEvalCtxt _bodyOlamArgAnaEvalL _bodyOlamMp _bodyOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_App :: T_CExpr ->
                 T_CBound ->
                 T_CExpr
sem_CExpr_App func_ arg_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _argOnm :: HsName
              _lhsOgathLamMp :: LamMp
              _argOmbStrictArgsRes :: (Maybe (RelevTy,[AnaEval],AnaEval))
              _argOanaEvalCtxt :: AnaEval
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOcTrf :: CExpr
              _lhsOappResAnaEval :: AnaEval
              _funcOanaEvalCtxt :: AnaEval
              _funcOlamArgAnaEvalL :: ([AnaEval])
              _funcOlamMp :: LamMp
              _funcOopts :: EHCOpts
              _argOlamMp :: LamMp
              _argOopts :: EHCOpts
              _funcIappArgAnaEvalL :: ([AnaEval])
              _funcIappFunKind :: AppFunKind
              _funcIappResAnaEval :: AnaEval
              _funcIcTrf :: CExpr
              _funcIgathLamMp :: LamMp
              _funcImbLam :: (Maybe [HsName])
              _funcImbVar :: (Maybe HsName)
              _argIbindLamMp :: LamMp
              _argIcTrf :: CBound
              _argIcTrfBoundL :: ([CBound])
              _argIgathStrictTyL :: ([RelevTy])
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 14, column 17)
              _lhsOappFunKind =
                  _funcIappFunKind
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 7, column 17)
              _argOnm =
                  hsnUnknown
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 108, column 25)
              _argOmbStrictArgsRes =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 171, column 17)
              (_argOanaEvalCtxt,_lhsOappArgAnaEvalL) =
                  hdAndTl' top _funcIappArgAnaEvalL
              -- self rule
              _cTrf =
                  CExpr_App _funcIcTrf _argIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (up)
              _lhsOappResAnaEval =
                  _funcIappResAnaEval
              -- copy rule (down)
              _funcOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _funcOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _funcOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _funcOopts =
                  _lhsIopts
              -- copy rule (down)
              _argOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _argOopts =
                  _lhsIopts
              ( _funcIappArgAnaEvalL,_funcIappFunKind,_funcIappResAnaEval,_funcIcTrf,_funcIgathLamMp,_funcImbLam,_funcImbVar) =
                  func_ _funcOanaEvalCtxt _funcOlamArgAnaEvalL _funcOlamMp _funcOopts
              ( _argIbindLamMp,_argIcTrf,_argIcTrfBoundL,_argIgathStrictTyL) =
                  arg_ _argOanaEvalCtxt _argOlamMp _argOmbStrictArgsRes _argOnm _argOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Lam :: T_CBind ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Lam bind_ body_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _bodyOlamMp :: LamMp
              _bodyOlamArgAnaEvalL :: ([AnaEval])
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _bindOlamMp :: LamMp
              _bindOopts :: EHCOpts
              _bodyOanaEvalCtxt :: AnaEval
              _bodyOopts :: EHCOpts
              _bindIbindLamMp :: LamMp
              _bindIcTrf :: CBind
              _bindInm :: HsName
              _bodyIappArgAnaEvalL :: ([AnaEval])
              _bodyIappFunKind :: AppFunKind
              _bodyIappResAnaEval :: AnaEval
              _bodyIcTrf :: CExpr
              _bodyIgathLamMp :: LamMp
              _bodyImbLam :: (Maybe [HsName])
              _bodyImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 4, column 17)
              _lhsOmbLam =
                  Just $ maybe [_argNm] (_argNm:) _bodyImbLam
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 19, column 17)
              _argNm =
                  _bindInm
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonLamInfo.ag"(line 7, column 17)
              _bodyOlamMp =
                  Map.delete _argNm _lhsIlamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 124, column 17)
              (_argAnaEval,_bodyOlamArgAnaEvalL) =
                  hdAndTl' top _lhsIlamArgAnaEvalL
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Lam _bindIcTrf _bodyIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _bindOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bindOopts =
                  _lhsIopts
              -- copy rule (down)
              _bodyOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (down)
              _bodyOopts =
                  _lhsIopts
              ( _bindIbindLamMp,_bindIcTrf,_bindInm) =
                  bind_ _bindOlamMp _bindOopts
              ( _bodyIappArgAnaEvalL,_bodyIappFunKind,_bodyIappResAnaEval,_bodyIcTrf,_bodyIgathLamMp,_bodyImbLam,_bodyImbVar) =
                  body_ _bodyOanaEvalCtxt _bodyOlamArgAnaEvalL _bodyOlamMp _bodyOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Case :: T_CExpr ->
                  T_CAltL ->
                  T_CExpr ->
                  T_CExpr
sem_CExpr_Case expr_ alts_ dflt_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _altsOanaEvalCtxt :: AnaEval
              _altsOlamMp :: LamMp
              _altsOopts :: EHCOpts
              _dfltOanaEvalCtxt :: AnaEval
              _dfltOlamArgAnaEvalL :: ([AnaEval])
              _dfltOlamMp :: LamMp
              _dfltOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              _altsIcTrf :: CAltL
              _dfltIappArgAnaEvalL :: ([AnaEval])
              _dfltIappFunKind :: AppFunKind
              _dfltIappResAnaEval :: AnaEval
              _dfltIcTrf :: CExpr
              _dfltIgathLamMp :: LamMp
              _dfltImbLam :: (Maybe [HsName])
              _dfltImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Case _exprIcTrf _altsIcTrf _dfltIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              -- copy rule (down)
              _altsOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (down)
              _altsOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _altsOopts =
                  _lhsIopts
              -- copy rule (down)
              _dfltOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _dfltOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _dfltOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _dfltOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
              ( _altsIcTrf) =
                  alts_ _altsOanaEvalCtxt _altsOlamMp _altsOopts
              ( _dfltIappArgAnaEvalL,_dfltIappFunKind,_dfltIappResAnaEval,_dfltIcTrf,_dfltIgathLamMp,_dfltImbLam,_dfltImbVar) =
                  dflt_ _dfltOanaEvalCtxt _dfltOlamArgAnaEvalL _dfltOlamMp _dfltOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_CaseAltFail :: CaseAltFailReason ->
                         T_CExpr ->
                         T_CExpr
sem_CExpr_CaseAltFail failReason_ errorExpr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _lhsOappFunKind :: AppFunKind
              _lhsOgathLamMp :: LamMp
              _lhsOmbLam :: (Maybe [HsName])
              _lhsOmbVar :: (Maybe HsName)
              _errorExprOanaEvalCtxt :: AnaEval
              _errorExprOlamArgAnaEvalL :: ([AnaEval])
              _errorExprOlamMp :: LamMp
              _errorExprOopts :: EHCOpts
              _errorExprIappArgAnaEvalL :: ([AnaEval])
              _errorExprIappFunKind :: AppFunKind
              _errorExprIappResAnaEval :: AnaEval
              _errorExprIcTrf :: CExpr
              _errorExprIgathLamMp :: LamMp
              _errorExprImbLam :: (Maybe [HsName])
              _errorExprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_CaseAltFail failReason_ _errorExprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (up)
              _lhsOappFunKind =
                  _errorExprIappFunKind
              -- copy rule (up)
              _lhsOgathLamMp =
                  _errorExprIgathLamMp
              -- copy rule (up)
              _lhsOmbLam =
                  _errorExprImbLam
              -- copy rule (up)
              _lhsOmbVar =
                  _errorExprImbVar
              -- copy rule (down)
              _errorExprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _errorExprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _errorExprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _errorExprOopts =
                  _lhsIopts
              ( _errorExprIappArgAnaEvalL,_errorExprIappFunKind,_errorExprIappResAnaEval,_errorExprIcTrf,_errorExprIgathLamMp,_errorExprImbLam,_errorExprImbVar) =
                  errorExpr_ _errorExprOanaEvalCtxt _errorExprOlamArgAnaEvalL _errorExprOlamMp _errorExprOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_TupDel :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupDel expr_ tag_ nm_ offset_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _offsetOanaEvalCtxt :: AnaEval
              _offsetOlamArgAnaEvalL :: ([AnaEval])
              _offsetOlamMp :: LamMp
              _offsetOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              _offsetIappArgAnaEvalL :: ([AnaEval])
              _offsetIappFunKind :: AppFunKind
              _offsetIappResAnaEval :: AnaEval
              _offsetIcTrf :: CExpr
              _offsetIgathLamMp :: LamMp
              _offsetImbLam :: (Maybe [HsName])
              _offsetImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_TupDel _exprIcTrf tag_ nm_ _offsetIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              -- copy rule (down)
              _offsetOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _offsetOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _offsetOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _offsetOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
              ( _offsetIappArgAnaEvalL,_offsetIappFunKind,_offsetIappResAnaEval,_offsetIcTrf,_offsetIgathLamMp,_offsetImbLam,_offsetImbVar) =
                  offset_ _offsetOanaEvalCtxt _offsetOlamArgAnaEvalL _offsetOlamMp _offsetOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_TupIns :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupIns expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _offsetOanaEvalCtxt :: AnaEval
              _offsetOlamArgAnaEvalL :: ([AnaEval])
              _offsetOlamMp :: LamMp
              _offsetOopts :: EHCOpts
              _fldExprOanaEvalCtxt :: AnaEval
              _fldExprOlamArgAnaEvalL :: ([AnaEval])
              _fldExprOlamMp :: LamMp
              _fldExprOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              _offsetIappArgAnaEvalL :: ([AnaEval])
              _offsetIappFunKind :: AppFunKind
              _offsetIappResAnaEval :: AnaEval
              _offsetIcTrf :: CExpr
              _offsetIgathLamMp :: LamMp
              _offsetImbLam :: (Maybe [HsName])
              _offsetImbVar :: (Maybe HsName)
              _fldExprIappArgAnaEvalL :: ([AnaEval])
              _fldExprIappFunKind :: AppFunKind
              _fldExprIappResAnaEval :: AnaEval
              _fldExprIcTrf :: CExpr
              _fldExprIgathLamMp :: LamMp
              _fldExprImbLam :: (Maybe [HsName])
              _fldExprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_TupIns _exprIcTrf tag_ nm_ _offsetIcTrf _fldExprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              -- copy rule (down)
              _offsetOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _offsetOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _offsetOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _offsetOopts =
                  _lhsIopts
              -- copy rule (down)
              _fldExprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _fldExprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _fldExprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _fldExprOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
              ( _offsetIappArgAnaEvalL,_offsetIappFunKind,_offsetIappResAnaEval,_offsetIcTrf,_offsetIgathLamMp,_offsetImbLam,_offsetImbVar) =
                  offset_ _offsetOanaEvalCtxt _offsetOlamArgAnaEvalL _offsetOlamMp _offsetOopts
              ( _fldExprIappArgAnaEvalL,_fldExprIappFunKind,_fldExprIappResAnaEval,_fldExprIcTrf,_fldExprIgathLamMp,_fldExprImbLam,_fldExprImbVar) =
                  fldExpr_ _fldExprOanaEvalCtxt _fldExprOlamArgAnaEvalL _fldExprOlamMp _fldExprOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_TupUpd :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupUpd expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _offsetOanaEvalCtxt :: AnaEval
              _offsetOlamArgAnaEvalL :: ([AnaEval])
              _offsetOlamMp :: LamMp
              _offsetOopts :: EHCOpts
              _fldExprOanaEvalCtxt :: AnaEval
              _fldExprOlamArgAnaEvalL :: ([AnaEval])
              _fldExprOlamMp :: LamMp
              _fldExprOopts :: EHCOpts
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              _offsetIappArgAnaEvalL :: ([AnaEval])
              _offsetIappFunKind :: AppFunKind
              _offsetIappResAnaEval :: AnaEval
              _offsetIcTrf :: CExpr
              _offsetIgathLamMp :: LamMp
              _offsetImbLam :: (Maybe [HsName])
              _offsetImbVar :: (Maybe HsName)
              _fldExprIappArgAnaEvalL :: ([AnaEval])
              _fldExprIappFunKind :: AppFunKind
              _fldExprIappResAnaEval :: AnaEval
              _fldExprIcTrf :: CExpr
              _fldExprIgathLamMp :: LamMp
              _fldExprImbLam :: (Maybe [HsName])
              _fldExprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_TupUpd _exprIcTrf tag_ nm_ _offsetIcTrf _fldExprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              -- copy rule (down)
              _offsetOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _offsetOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _offsetOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _offsetOopts =
                  _lhsIopts
              -- copy rule (down)
              _fldExprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _fldExprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _fldExprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _fldExprOopts =
                  _lhsIopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
              ( _offsetIappArgAnaEvalL,_offsetIappFunKind,_offsetIappResAnaEval,_offsetIcTrf,_offsetIgathLamMp,_offsetImbLam,_offsetImbVar) =
                  offset_ _offsetOanaEvalCtxt _offsetOlamArgAnaEvalL _offsetOlamMp _offsetOopts
              ( _fldExprIappArgAnaEvalL,_fldExprIappFunKind,_fldExprIappResAnaEval,_fldExprIcTrf,_fldExprIgathLamMp,_fldExprImbLam,_fldExprImbVar) =
                  fldExpr_ _fldExprOanaEvalCtxt _fldExprOlamArgAnaEvalL _fldExprOlamMp _fldExprOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_FFI :: FFIWay ->
                 String ->
                 ForeignEnt ->
                 Ty ->
                 T_CExpr
sem_CExpr_FFI callconv_ safety_ impEnt_ ty_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 12, column 17)
              _lhsOappFunKind =
                  AppFunKind_FFI
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_FFI callconv_ safety_ impEnt_ ty_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Dbg :: String ->
                 T_CExpr
sem_CExpr_Dbg info_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Dbg info_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Hole :: UID ->
                  T_CExpr
sem_CExpr_Hole uid_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_Hole uid_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_HoleLet :: UID ->
                     T_CExpr ->
                     T_CExpr
sem_CExpr_HoleLet bindsUid_ body_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _bodyOanaEvalCtxt :: AnaEval
              _bodyOlamArgAnaEvalL :: ([AnaEval])
              _bodyOlamMp :: LamMp
              _bodyOopts :: EHCOpts
              _bodyIappArgAnaEvalL :: ([AnaEval])
              _bodyIappFunKind :: AppFunKind
              _bodyIappResAnaEval :: AnaEval
              _bodyIcTrf :: CExpr
              _bodyIgathLamMp :: LamMp
              _bodyImbLam :: (Maybe [HsName])
              _bodyImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_HoleLet bindsUid_ _bodyIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _bodyOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _bodyOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _bodyOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bodyOopts =
                  _lhsIopts
              ( _bodyIappArgAnaEvalL,_bodyIappFunKind,_bodyIappResAnaEval,_bodyIcTrf,_bodyIgathLamMp,_bodyImbLam,_bodyImbVar) =
                  body_ _bodyOanaEvalCtxt _bodyOlamArgAnaEvalL _bodyOlamMp _bodyOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_CoeArg :: T_CExpr
sem_CExpr_CoeArg =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_CoeArg
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_ImplsApp :: T_CExpr ->
                      ImplsVarId ->
                      T_CExpr
sem_CExpr_ImplsApp func_ uid_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _funcOanaEvalCtxt :: AnaEval
              _funcOlamArgAnaEvalL :: ([AnaEval])
              _funcOlamMp :: LamMp
              _funcOopts :: EHCOpts
              _funcIappArgAnaEvalL :: ([AnaEval])
              _funcIappFunKind :: AppFunKind
              _funcIappResAnaEval :: AnaEval
              _funcIcTrf :: CExpr
              _funcIgathLamMp :: LamMp
              _funcImbLam :: (Maybe [HsName])
              _funcImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_ImplsApp _funcIcTrf uid_
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _funcOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _funcOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _funcOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _funcOopts =
                  _lhsIopts
              ( _funcIappArgAnaEvalL,_funcIappFunKind,_funcIappResAnaEval,_funcIcTrf,_funcIgathLamMp,_funcImbLam,_funcImbVar) =
                  func_ _funcOanaEvalCtxt _funcOlamArgAnaEvalL _funcOlamMp _funcOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_ImplsLam :: ImplsVarId ->
                      T_CExpr ->
                      T_CExpr
sem_CExpr_ImplsLam uid_ body_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOmbLam :: (Maybe [HsName])
              _lhsOappFunKind :: AppFunKind
              _lhsOmbVar :: (Maybe HsName)
              _lhsOgathLamMp :: LamMp
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappResAnaEval :: AnaEval
              _lhsOcTrf :: CExpr
              _bodyOanaEvalCtxt :: AnaEval
              _bodyOlamArgAnaEvalL :: ([AnaEval])
              _bodyOlamMp :: LamMp
              _bodyOopts :: EHCOpts
              _bodyIappArgAnaEvalL :: ([AnaEval])
              _bodyIappFunKind :: AppFunKind
              _bodyIappResAnaEval :: AnaEval
              _bodyIcTrf :: CExpr
              _bodyIgathLamMp :: LamMp
              _bodyImbLam :: (Maybe [HsName])
              _bodyImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 6, column 33)
              _lhsOmbLam =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 16, column 17)
              _lhsOappFunKind =
                  AppFunKind_NoApp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonPred.ag"(line 24, column 33)
              _lhsOmbVar =
                  Nothing
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 9, column 33)
              _lhsOgathLamMp =
                  Map.empty
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 126, column 17)
              _lamArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappArgAnaEvalL =
                  []
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 174, column 17)
              _lhsOappResAnaEval =
                  top
              -- self rule
              _cTrf =
                  CExpr_ImplsLam uid_ _bodyIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _bodyOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (from local)
              _bodyOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _bodyOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bodyOopts =
                  _lhsIopts
              ( _bodyIappArgAnaEvalL,_bodyIappFunKind,_bodyIappResAnaEval,_bodyIcTrf,_bodyIgathLamMp,_bodyImbLam,_bodyImbVar) =
                  body_ _bodyOanaEvalCtxt _bodyOlamArgAnaEvalL _bodyOlamMp _bodyOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
sem_CExpr_Ann :: T_CExprAnn ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Ann ann_ expr_ =
    (\ _lhsIanaEvalCtxt
       _lhsIlamArgAnaEvalL
       _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CExpr
              _lhsOappArgAnaEvalL :: ([AnaEval])
              _lhsOappFunKind :: AppFunKind
              _lhsOappResAnaEval :: AnaEval
              _lhsOgathLamMp :: LamMp
              _lhsOmbLam :: (Maybe [HsName])
              _lhsOmbVar :: (Maybe HsName)
              _annOlamMp :: LamMp
              _annOopts :: EHCOpts
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _annIcTrf :: CExprAnn
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- self rule
              _cTrf =
                  CExpr_Ann _annIcTrf _exprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (up)
              _lhsOappArgAnaEvalL =
                  _exprIappArgAnaEvalL
              -- copy rule (up)
              _lhsOappFunKind =
                  _exprIappFunKind
              -- copy rule (up)
              _lhsOappResAnaEval =
                  _exprIappResAnaEval
              -- copy rule (up)
              _lhsOgathLamMp =
                  _exprIgathLamMp
              -- copy rule (up)
              _lhsOmbLam =
                  _exprImbLam
              -- copy rule (up)
              _lhsOmbVar =
                  _exprImbVar
              -- copy rule (down)
              _annOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _annOopts =
                  _lhsIopts
              -- copy rule (down)
              _exprOanaEvalCtxt =
                  _lhsIanaEvalCtxt
              -- copy rule (down)
              _exprOlamArgAnaEvalL =
                  _lhsIlamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _annIcTrf) =
                  ann_ _annOlamMp _annOopts
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsOappArgAnaEvalL,_lhsOappFunKind,_lhsOappResAnaEval,_lhsOcTrf,_lhsOgathLamMp,_lhsOmbLam,_lhsOmbVar)))
-- CExprAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CExprAnn 
   alternatives:
      alternative Ty:
         child ty             : {Ty}
         visit 0:
            local cTrf        : _
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local cTrf        : _
      alternative Debug:
         child info           : {String}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExprAnn :: CExprAnn ->
                T_CExprAnn
sem_CExprAnn (CExprAnn_Ty _ty) =
    (sem_CExprAnn_Ty _ty)
sem_CExprAnn (CExprAnn_Coe _coe) =
    (sem_CExprAnn_Coe _coe)
sem_CExprAnn (CExprAnn_Debug _info) =
    (sem_CExprAnn_Debug _info)
-- semantic domain
type T_CExprAnn = LamMp ->
                  EHCOpts ->
                  ( CExprAnn)
sem_CExprAnn_Ty :: Ty ->
                   T_CExprAnn
sem_CExprAnn_Ty ty_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CExprAnn
              -- self rule
              _cTrf =
                  CExprAnn_Ty ty_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CExprAnn_Coe :: RelevCoe ->
                    T_CExprAnn
sem_CExprAnn_Coe coe_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CExprAnn
              -- self rule
              _cTrf =
                  CExprAnn_Coe coe_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CExprAnn_Debug :: String ->
                      T_CExprAnn
sem_CExprAnn_Debug info_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CExprAnn
              -- self rule
              _cTrf =
                  CExprAnn_Debug info_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CImport -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CImport 
   alternatives:
      alternative Import:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CImport :: CImport ->
               T_CImport
sem_CImport (CImport_Import _nm) =
    (sem_CImport_Import _nm)
-- semantic domain
type T_CImport = ( CImport)
sem_CImport_Import :: HsName ->
                      T_CImport
sem_CImport_Import nm_ =
    (let _lhsOcTrf :: CImport
         -- self rule
         _cTrf =
             CImport_Import nm_
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CImportL ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CImportL 
   alternatives:
      alternative Cons:
         child hd             : CImport 
         child tl             : CImportL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CImportL :: CImportL ->
                T_CImportL
sem_CImportL list =
    (Prelude.foldr sem_CImportL_Cons sem_CImportL_Nil (Prelude.map sem_CImport list))
-- semantic domain
type T_CImportL = ( CImportL)
sem_CImportL_Cons :: T_CImport ->
                     T_CImportL ->
                     T_CImportL
sem_CImportL_Cons hd_ tl_ =
    (let _lhsOcTrf :: CImportL
         _hdIcTrf :: CImport
         _tlIcTrf :: CImportL
         -- self rule
         _cTrf =
             (:) _hdIcTrf _tlIcTrf
         -- self rule
         _lhsOcTrf =
             _cTrf
         ( _hdIcTrf) =
             hd_
         ( _tlIcTrf) =
             tl_
     in  ( _lhsOcTrf))
sem_CImportL_Nil :: T_CImportL
sem_CImportL_Nil =
    (let _lhsOcTrf :: CImportL
         -- self rule
         _cTrf =
             []
         -- self rule
         _lhsOcTrf =
             _cTrf
     in  ( _lhsOcTrf))
-- CMetaBind ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetaBind 
   alternatives:
      alternative Plain:
         visit 0:
            local cTrf        : _
      alternative Function0:
         visit 0:
            local cTrf        : _
      alternative Function1:
         visit 0:
            local cTrf        : _
      alternative Apply0:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetaBind :: CMetaBind ->
                 T_CMetaBind
sem_CMetaBind (CMetaBind_Plain) =
    (sem_CMetaBind_Plain)
sem_CMetaBind (CMetaBind_Function0) =
    (sem_CMetaBind_Function0)
sem_CMetaBind (CMetaBind_Function1) =
    (sem_CMetaBind_Function1)
sem_CMetaBind (CMetaBind_Apply0) =
    (sem_CMetaBind_Apply0)
-- semantic domain
type T_CMetaBind = LamMp ->
                   EHCOpts ->
                   ( CMetaBind)
sem_CMetaBind_Plain :: T_CMetaBind
sem_CMetaBind_Plain =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaBind
              -- self rule
              _cTrf =
                  CMetaBind_Plain
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaBind_Function0 :: T_CMetaBind
sem_CMetaBind_Function0 =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaBind
              -- self rule
              _cTrf =
                  CMetaBind_Function0
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaBind_Function1 :: T_CMetaBind
sem_CMetaBind_Function1 =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaBind
              -- self rule
              _cTrf =
                  CMetaBind_Function1
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaBind_Apply0 :: T_CMetaBind
sem_CMetaBind_Apply0 =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaBind
              -- self rule
              _cTrf =
                  CMetaBind_Apply0
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CMetaVal ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetaVal 
   alternatives:
      alternative Val:
         visit 0:
            local cTrf        : _
      alternative Dict:
         visit 0:
            local cTrf        : _
      alternative DictClass:
         child tracks         : {[Track]}
         visit 0:
            local cTrf        : _
      alternative DictInstance:
         child tracks         : {[Track]}
         visit 0:
            local cTrf        : _
      alternative Track:
         child track          : {Track}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetaVal :: CMetaVal ->
                T_CMetaVal
sem_CMetaVal (CMetaVal_Val) =
    (sem_CMetaVal_Val)
sem_CMetaVal (CMetaVal_Dict) =
    (sem_CMetaVal_Dict)
sem_CMetaVal (CMetaVal_DictClass _tracks) =
    (sem_CMetaVal_DictClass _tracks)
sem_CMetaVal (CMetaVal_DictInstance _tracks) =
    (sem_CMetaVal_DictInstance _tracks)
sem_CMetaVal (CMetaVal_Track _track) =
    (sem_CMetaVal_Track _track)
-- semantic domain
type T_CMetaVal = LamMp ->
                  EHCOpts ->
                  ( CMetaVal)
sem_CMetaVal_Val :: T_CMetaVal
sem_CMetaVal_Val =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  CMetaVal_Val
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaVal_Dict :: T_CMetaVal
sem_CMetaVal_Dict =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  CMetaVal_Dict
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaVal_DictClass :: ([Track]) ->
                          T_CMetaVal
sem_CMetaVal_DictClass tracks_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  CMetaVal_DictClass tracks_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaVal_DictInstance :: ([Track]) ->
                             T_CMetaVal
sem_CMetaVal_DictInstance tracks_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  CMetaVal_DictInstance tracks_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CMetaVal_Track :: Track ->
                      T_CMetaVal
sem_CMetaVal_Track track_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  CMetaVal_Track track_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CMetas ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetas 
   alternatives:
      alternative Tuple:
         child x1             : CMetaBind 
         child x2             : CMetaVal 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetas :: CMetas ->
              T_CMetas
sem_CMetas ( x1,x2) =
    (sem_CMetas_Tuple (sem_CMetaBind x1) (sem_CMetaVal x2))
-- semantic domain
type T_CMetas = LamMp ->
                EHCOpts ->
                ( CMetas)
sem_CMetas_Tuple :: T_CMetaBind ->
                    T_CMetaVal ->
                    T_CMetas
sem_CMetas_Tuple x1_ x2_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CMetas
              _x1OlamMp :: LamMp
              _x1Oopts :: EHCOpts
              _x2OlamMp :: LamMp
              _x2Oopts :: EHCOpts
              _x1IcTrf :: CMetaBind
              _x2IcTrf :: CMetaVal
              -- self rule
              _cTrf =
                  (_x1IcTrf,_x2IcTrf)
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _x1OlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _x1Oopts =
                  _lhsIopts
              -- copy rule (down)
              _x2OlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _x2Oopts =
                  _lhsIopts
              ( _x1IcTrf) =
                  x1_ _x1OlamMp _x1Oopts
              ( _x2IcTrf) =
                  x2_ _x2OlamMp _x2Oopts
          in  ( _lhsOcTrf)))
-- CModule -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CModule 
         gathLamMp            : LamMp
   alternatives:
      alternative Mod:
         child moduleNm       : {HsName}
         child exports        : CExportL 
         child imports        : CImportL 
         child declMetas      : CDeclMetaL 
         child expr           : CExpr 
         visit 0:
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
-}
-- cata
sem_CModule :: CModule ->
               T_CModule
sem_CModule (CModule_Mod _moduleNm _exports _imports _declMetas _expr) =
    (sem_CModule_Mod _moduleNm (sem_CExportL _exports) (sem_CImportL _imports) (sem_CDeclMetaL _declMetas) (sem_CExpr _expr))
-- semantic domain
type T_CModule = LamMp ->
                 EHCOpts ->
                 ( CModule,LamMp)
sem_CModule_Mod :: HsName ->
                   T_CExportL ->
                   T_CImportL ->
                   T_CDeclMetaL ->
                   T_CExpr ->
                   T_CModule
sem_CModule_Mod moduleNm_ exports_ imports_ declMetas_ expr_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _anaEvalCtxt :: AnaEval
              _lhsOcTrf :: CModule
              _lhsOgathLamMp :: LamMp
              _exprOanaEvalCtxt :: AnaEval
              _exprOlamArgAnaEvalL :: ([AnaEval])
              _exprOlamMp :: LamMp
              _exprOopts :: EHCOpts
              _exportsIcTrf :: CExportL
              _importsIcTrf :: CImportL
              _declMetasIcTrf :: CDeclMetaL
              _exprIappArgAnaEvalL :: ([AnaEval])
              _exprIappFunKind :: AppFunKind
              _exprIappResAnaEval :: AnaEval
              _exprIcTrf :: CExpr
              _exprIgathLamMp :: LamMp
              _exprImbLam :: (Maybe [HsName])
              _exprImbVar :: (Maybe HsName)
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 84, column 17)
              _anaEvalCtxt =
                  top
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 121, column 17)
              _lamArgAnaEvalL =
                  []
              -- self rule
              _cTrf =
                  CModule_Mod moduleNm_ _exportsIcTrf _importsIcTrf _declMetasIcTrf _exprIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (up)
              _lhsOgathLamMp =
                  _exprIgathLamMp
              -- copy rule (from local)
              _exprOanaEvalCtxt =
                  _anaEvalCtxt
              -- copy rule (from local)
              _exprOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _exprOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _exprOopts =
                  _lhsIopts
              ( _exportsIcTrf) =
                  exports_
              ( _importsIcTrf) =
                  imports_
              ( _declMetasIcTrf) =
                  declMetas_
              ( _exprIappArgAnaEvalL,_exprIappFunKind,_exprIappResAnaEval,_exprIcTrf,_exprIgathLamMp,_exprImbLam,_exprImbVar) =
                  expr_ _exprOanaEvalCtxt _exprOlamArgAnaEvalL _exprOlamMp _exprOopts
          in  ( _lhsOcTrf,_lhsOgathLamMp)))
-- CPat --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPat 
         fldNmL               : [HsName]
   alternatives:
      alternative Var:
         child pnm            : {HsName}
         visit 0:
            local cTrf        : _
      alternative Con:
         child tag            : {CTag}
         child rest           : CPatRest 
         child binds          : CPatFldL 
         visit 0:
            local cTrf        : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local cTrf        : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local cTrf        : _
      alternative BoolExpr:
         child cexpr          : {CExpr}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPat :: CPat ->
            T_CPat
sem_CPat (CPat_Var _pnm) =
    (sem_CPat_Var _pnm)
sem_CPat (CPat_Con _tag _rest _binds) =
    (sem_CPat_Con _tag (sem_CPatRest _rest) (sem_CPatFldL _binds))
sem_CPat (CPat_Int _int) =
    (sem_CPat_Int _int)
sem_CPat (CPat_Char _char) =
    (sem_CPat_Char _char)
sem_CPat (CPat_BoolExpr _cexpr) =
    (sem_CPat_BoolExpr _cexpr)
-- semantic domain
type T_CPat = LamMp ->
              EHCOpts ->
              ( CPat,([HsName]))
sem_CPat_Var :: HsName ->
                T_CPat
sem_CPat_Var pnm_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPat
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  []
              -- self rule
              _cTrf =
                  CPat_Var pnm_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf,_lhsOfldNmL)))
sem_CPat_Con :: CTag ->
                T_CPatRest ->
                T_CPatFldL ->
                T_CPat
sem_CPat_Con tag_ rest_ binds_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPat
              _restOlamMp :: LamMp
              _restOopts :: EHCOpts
              _bindsOlamMp :: LamMp
              _bindsOopts :: EHCOpts
              _restIcTrf :: CPatRest
              _bindsIcTrf :: CPatFldL
              _bindsIfldNmL :: ([HsName])
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  _bindsIfldNmL
              -- self rule
              _cTrf =
                  CPat_Con tag_ _restIcTrf _bindsIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _restOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _restOopts =
                  _lhsIopts
              -- copy rule (down)
              _bindsOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bindsOopts =
                  _lhsIopts
              ( _restIcTrf) =
                  rest_ _restOlamMp _restOopts
              ( _bindsIcTrf,_bindsIfldNmL) =
                  binds_ _bindsOlamMp _bindsOopts
          in  ( _lhsOcTrf,_lhsOfldNmL)))
sem_CPat_Int :: Int ->
                T_CPat
sem_CPat_Int int_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPat
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  []
              -- self rule
              _cTrf =
                  CPat_Int int_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf,_lhsOfldNmL)))
sem_CPat_Char :: Char ->
                 T_CPat
sem_CPat_Char char_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPat
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  []
              -- self rule
              _cTrf =
                  CPat_Char char_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf,_lhsOfldNmL)))
sem_CPat_BoolExpr :: CExpr ->
                     T_CPat
sem_CPat_BoolExpr cexpr_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPat
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  []
              -- self rule
              _cTrf =
                  CPat_BoolExpr cexpr_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf,_lhsOfldNmL)))
-- CPatFld -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPatFld 
         fldNmL               : [HsName]
   alternatives:
      alternative Fld:
         child lbl            : {HsName}
         child offset         : CExpr 
         child bind           : CBind 
         child fldAnns        : CBindAnnL 
         visit 0:
            local fldNm       : _
            local anaEvalCtxt : {AnaEval}
            local lamArgAnaEvalL : _
            local cTrf        : _
-}
-- cata
sem_CPatFld :: CPatFld ->
               T_CPatFld
sem_CPatFld (CPatFld_Fld _lbl _offset _bind _fldAnns) =
    (sem_CPatFld_Fld _lbl (sem_CExpr _offset) (sem_CBind _bind) (sem_CBindAnnL _fldAnns))
-- semantic domain
type T_CPatFld = LamMp ->
                 EHCOpts ->
                 ( CPatFld,([HsName]))
sem_CPatFld_Fld :: HsName ->
                   T_CExpr ->
                   T_CBind ->
                   T_CBindAnnL ->
                   T_CPatFld
sem_CPatFld_Fld lbl_ offset_ bind_ fldAnns_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _anaEvalCtxt :: AnaEval
              _lhsOcTrf :: CPatFld
              _offsetOanaEvalCtxt :: AnaEval
              _offsetOlamArgAnaEvalL :: ([AnaEval])
              _offsetOlamMp :: LamMp
              _offsetOopts :: EHCOpts
              _bindOlamMp :: LamMp
              _bindOopts :: EHCOpts
              _fldAnnsOlamMp :: LamMp
              _fldAnnsOopts :: EHCOpts
              _offsetIappArgAnaEvalL :: ([AnaEval])
              _offsetIappFunKind :: AppFunKind
              _offsetIappResAnaEval :: AnaEval
              _offsetIcTrf :: CExpr
              _offsetIgathLamMp :: LamMp
              _offsetImbLam :: (Maybe [HsName])
              _offsetImbVar :: (Maybe HsName)
              _bindIbindLamMp :: LamMp
              _bindIcTrf :: CBind
              _bindInm :: HsName
              _fldAnnsIcTrf :: CBindAnnL
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 23, column 17)
              _fldNm =
                  _bindInm
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 28, column 17)
              _lhsOfldNmL =
                  [_fldNm]
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 87, column 17)
              _anaEvalCtxt =
                  bot
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 121, column 17)
              _lamArgAnaEvalL =
                  []
              -- self rule
              _cTrf =
                  CPatFld_Fld lbl_ _offsetIcTrf _bindIcTrf _fldAnnsIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (from local)
              _offsetOanaEvalCtxt =
                  _anaEvalCtxt
              -- copy rule (from local)
              _offsetOlamArgAnaEvalL =
                  _lamArgAnaEvalL
              -- copy rule (down)
              _offsetOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _offsetOopts =
                  _lhsIopts
              -- copy rule (down)
              _bindOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _bindOopts =
                  _lhsIopts
              -- copy rule (down)
              _fldAnnsOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _fldAnnsOopts =
                  _lhsIopts
              ( _offsetIappArgAnaEvalL,_offsetIappFunKind,_offsetIappResAnaEval,_offsetIcTrf,_offsetIgathLamMp,_offsetImbLam,_offsetImbVar) =
                  offset_ _offsetOanaEvalCtxt _offsetOlamArgAnaEvalL _offsetOlamMp _offsetOopts
              ( _bindIbindLamMp,_bindIcTrf,_bindInm) =
                  bind_ _bindOlamMp _bindOopts
              ( _fldAnnsIcTrf) =
                  fldAnns_ _fldAnnsOlamMp _fldAnnsOopts
          in  ( _lhsOcTrf,_lhsOfldNmL)))
-- CPatFldL ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPatFldL 
         fldNmL               : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CPatFld 
         child tl             : CPatFldL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPatFldL :: CPatFldL ->
                T_CPatFldL
sem_CPatFldL list =
    (Prelude.foldr sem_CPatFldL_Cons sem_CPatFldL_Nil (Prelude.map sem_CPatFld list))
-- semantic domain
type T_CPatFldL = LamMp ->
                  EHCOpts ->
                  ( CPatFldL,([HsName]))
sem_CPatFldL_Cons :: T_CPatFld ->
                     T_CPatFldL ->
                     T_CPatFldL
sem_CPatFldL_Cons hd_ tl_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPatFldL
              _hdOlamMp :: LamMp
              _hdOopts :: EHCOpts
              _tlOlamMp :: LamMp
              _tlOopts :: EHCOpts
              _hdIcTrf :: CPatFld
              _hdIfldNmL :: ([HsName])
              _tlIcTrf :: CPatFldL
              _tlIfldNmL :: ([HsName])
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  _hdIfldNmL ++ _tlIfldNmL
              -- self rule
              _cTrf =
                  (:) _hdIcTrf _tlIcTrf
              -- self rule
              _lhsOcTrf =
                  _cTrf
              -- copy rule (down)
              _hdOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _hdOopts =
                  _lhsIopts
              -- copy rule (down)
              _tlOlamMp =
                  _lhsIlamMp
              -- copy rule (down)
              _tlOopts =
                  _lhsIopts
              ( _hdIcTrf,_hdIfldNmL) =
                  hd_ _hdOlamMp _hdOopts
              ( _tlIcTrf,_tlIfldNmL) =
                  tl_ _tlOlamMp _tlOopts
          in  ( _lhsOcTrf,_lhsOfldNmL)))
sem_CPatFldL_Nil :: T_CPatFldL
sem_CPatFldL_Nil =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOfldNmL :: ([HsName])
              _lhsOcTrf :: CPatFldL
              -- use rule "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonBindNm.ag"(line 25, column 41)
              _lhsOfldNmL =
                  []
              -- self rule
              _cTrf =
                  []
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf,_lhsOfldNmL)))
-- CPatRest ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CPatRest 
   alternatives:
      alternative Var:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
      alternative Empty:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPatRest :: CPatRest ->
                T_CPatRest
sem_CPatRest (CPatRest_Var _nm) =
    (sem_CPatRest_Var _nm)
sem_CPatRest (CPatRest_Empty) =
    (sem_CPatRest_Empty)
-- semantic domain
type T_CPatRest = LamMp ->
                  EHCOpts ->
                  ( CPatRest)
sem_CPatRest_Var :: HsName ->
                    T_CPatRest
sem_CPatRest_Var nm_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CPatRest
              -- self rule
              _cTrf =
                  CPatRest_Var nm_
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
sem_CPatRest_Empty :: T_CPatRest
sem_CPatRest_Empty =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _lhsOcTrf :: CPatRest
              -- self rule
              _cTrf =
                  CPatRest_Empty
              -- self rule
              _lhsOcTrf =
                  _cTrf
          in  ( _lhsOcTrf)))
-- CodeAGItf ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CModule 
         gathLamMp            : LamMp
   alternatives:
      alternative AGItf:
         child module         : CModule 
         visit 0:
            local gathLamMp   : _
            local howUnionGathLamInfo : _
            local howMergeLamInfo : _
-}
-- cata
sem_CodeAGItf :: CodeAGItf ->
                 T_CodeAGItf
sem_CodeAGItf (CodeAGItf_AGItf _module) =
    (sem_CodeAGItf_AGItf (sem_CModule _module))
-- semantic domain
type T_CodeAGItf = LamMp ->
                   EHCOpts ->
                   ( CModule,LamMp)
data Inh_CodeAGItf = Inh_CodeAGItf {lamMp_Inh_CodeAGItf :: !(LamMp),opts_Inh_CodeAGItf :: !(EHCOpts)}
data Syn_CodeAGItf = Syn_CodeAGItf {cTrf_Syn_CodeAGItf :: !(CModule),gathLamMp_Syn_CodeAGItf :: !(LamMp)}
wrap_CodeAGItf :: T_CodeAGItf ->
                  Inh_CodeAGItf ->
                  Syn_CodeAGItf
wrap_CodeAGItf sem (Inh_CodeAGItf _lhsIlamMp _lhsIopts) =
    (let ( _lhsOcTrf,_lhsOgathLamMp) = sem _lhsIlamMp _lhsIopts
     in  (Syn_CodeAGItf _lhsOcTrf _lhsOgathLamMp))
sem_CodeAGItf_AGItf :: T_CModule ->
                       T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
    (\ _lhsIlamMp
       _lhsIopts ->
         (let _moduleOlamMp :: LamMp
              _lhsOcTrf :: CModule
              _lhsOgathLamMp :: LamMp
              _moduleOopts :: EHCOpts
              _moduleIcTrf :: CModule
              _moduleIgathLamMp :: LamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 15, column 17)
              _gathLamMp =
                  lamMpMergeInto _howMergeLamInfo const _moduleIgathLamMp _lhsIlamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/CommonGathLamInfo.ag"(line 16, column 17)
              _moduleOlamMp =
                  _howUnionGathLamInfo _lhsIlamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 68, column 17)
              _howUnionGathLamInfo =
                  Map.union _gathLamMp
              -- "build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/OptimizeStrictness.ag"(line 72, column 17)
              _howMergeLamInfo =
                  (\(LamInfo {laminfoBindAspMp=m}) i -> i {laminfoBindAspMp = m `Map.union` laminfoBindAspMp i})
              -- copy rule (up)
              _lhsOcTrf =
                  _moduleIcTrf
              -- copy rule (from local)
              _lhsOgathLamMp =
                  _gathLamMp
              -- copy rule (down)
              _moduleOopts =
                  _lhsIopts
              ( _moduleIcTrf,_moduleIgathLamMp) =
                  module_ _moduleOlamMp _moduleOopts
          in  ( _lhsOcTrf,_lhsOgathLamMp)))