packages feed

uhc-light-1.1.9.2: src/UHC/Light/Compiler/Core/ToGrin.hs


-- UUAGC 0.9.52.1 (build/103/lib-ehc/UHC/Light/Compiler/Core/ToGrin.ag)
module UHC.Light.Compiler.Core.ToGrin(Inh_CodeAGItf (..), Syn_CodeAGItf (..), wrap_CodeAGItf, sem_CodeAGItf) where

import Data.Char
import Data.Maybe
import Data.List
import qualified Data.Set as Set
import qualified Data.Map as Map
import UHC.Util.Utils
import UHC.Util.Pretty
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Base.TermLike
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.Base.HsName.Builtin
import UHC.Light.Compiler.CodeGen.BuiltinSizeInfo
import UHC.Light.Compiler.LamInfo
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Ty
import UHC.Light.Compiler.Gam.Full
import UHC.Light.Compiler.Core.FFI
import Debug.Trace
import Control.Monad
import Control.Monad.State
import UHC.Light.Compiler.Foreign.Extract
import UHC.Light.Compiler.CodeGen.ImportUsedModules
import UHC.Light.Compiler.CodeGen.BuiltinPrims
























deriving instance Typeable Syn_CodeAGItf

-- CAlt --------------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Alt:
         child pat            : CPat 
         child expr           : CExpr 
         visit 1:
            local whatAbove   : {WhatExpr}
            local lev         : _
            local fvS         : _
-}
-- 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 = UID ->
              ( UID,T_CAlt_1)
type T_CAlt_1 = DataGam ->
                EvalCtx ->
                LamMp ->
                Int ->
                HsName ->
                EHCOpts ->
                ( FvS)
sem_CAlt_Alt :: T_CPat ->
                T_CExpr ->
                T_CAlt
sem_CAlt_Alt pat_ expr_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _patOgUniq ->
          (case (pat_ _patOgUniq) of
           { ( _patIgUniq,pat_1) ->
               (case (_patIgUniq) of
                { _exprOgUniq ->
                (case (expr_) of
                 { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                     (case (expr_1 _exprOgUniq) of
                      { ( _exprIgUniq,expr_2) ->
                          (case (_exprIgUniq) of
                           { _lhsOgUniq ->
                           (case ((let sem_CAlt_Alt_1 :: T_CAlt_1
                                       sem_CAlt_Alt_1 =
                                           (\ _lhsIdataGam
                                              _lhsIevalCtx
                                              _lhsIlamMp
                                              _lhsIlev
                                              _lhsImodNm
                                              _lhsIopts ->
                                                (case (ExprIsOther) of
                                                 { _whatAbove ->
                                                 (case (_whatAbove) of
                                                  { _exprOwhatAbove ->
                                                  (case (_lhsIopts) of
                                                   { _exprOopts ->
                                                   (case (_lhsImodNm) of
                                                    { _exprOmodNm ->
                                                    (case (_lhsIlev + 1) of
                                                     { _lev ->
                                                     (case (_lev) of
                                                      { _exprOlev ->
                                                      (case (_lhsIlamMp) of
                                                       { _exprOlamMp ->
                                                       (case (_lhsIevalCtx) of
                                                        { _exprOevalCtx ->
                                                        (case (_lhsIdataGam) of
                                                         { _exprOdataGam ->
                                                         (case (True) of
                                                          { _exprOisTopTup ->
                                                          (case (True) of
                                                           { _exprOisTopApp ->
                                                           (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                            { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                (case (_lhsIopts) of
                                                                 { _patOopts ->
                                                                 (case (_lhsImodNm) of
                                                                  { _patOmodNm ->
                                                                  (case (_lev) of
                                                                   { _patOlev ->
                                                                   (case (_lhsIlamMp) of
                                                                    { _patOlamMp ->
                                                                    (case (_lhsIdataGam) of
                                                                     { _patOdataGam ->
                                                                     (case (pat_1 _patOdataGam _patOlamMp _patOlev _patOmodNm _patOopts) of
                                                                      { ( _patIfldNmL,_patIfvS,_patInmL) ->
                                                                          (case (_exprIfvS `Set.difference` Set.fromList _patInmL) of
                                                                           { _fvS ->
                                                                           (case (_fvS) of
                                                                            { _lhsOfvS ->
                                                                            ( _lhsOfvS) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                   in  sem_CAlt_Alt_1)) of
                            { ( sem_CAlt_1) ->
                            ( _lhsOgUniq,sem_CAlt_1) }) }) }) }) }) }) }))
-- CAltL -------------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Cons:
         child hd             : CAlt 
         child tl             : CAltL 
      alternative Nil:
-}
-- 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 = UID ->
               ( UID,T_CAltL_1)
type T_CAltL_1 = DataGam ->
                 EvalCtx ->
                 LamMp ->
                 Int ->
                 HsName ->
                 EHCOpts ->
                 ( FvS)
sem_CAltL_Cons :: T_CAlt ->
                  T_CAltL ->
                  T_CAltL
sem_CAltL_Cons hd_ tl_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _hdOgUniq ->
          (case (hd_ _hdOgUniq) of
           { ( _hdIgUniq,hd_1) ->
               (case (_hdIgUniq) of
                { _tlOgUniq ->
                (case (tl_ _tlOgUniq) of
                 { ( _tlIgUniq,tl_1) ->
                     (case (_tlIgUniq) of
                      { _lhsOgUniq ->
                      (case ((let sem_CAltL_Cons_1 :: T_CAltL_1
                                  sem_CAltL_Cons_1 =
                                      (\ _lhsIdataGam
                                         _lhsIevalCtx
                                         _lhsIlamMp
                                         _lhsIlev
                                         _lhsImodNm
                                         _lhsIopts ->
                                           (case (_lhsIopts) of
                                            { _tlOopts ->
                                            (case (_lhsImodNm) of
                                             { _tlOmodNm ->
                                             (case (_lhsIlev) of
                                              { _tlOlev ->
                                              (case (_lhsIlamMp) of
                                               { _tlOlamMp ->
                                               (case (_lhsIevalCtx) of
                                                { _tlOevalCtx ->
                                                (case (_lhsIdataGam) of
                                                 { _tlOdataGam ->
                                                 (case (tl_1 _tlOdataGam _tlOevalCtx _tlOlamMp _tlOlev _tlOmodNm _tlOopts) of
                                                  { ( _tlIfvS) ->
                                                      (case (_lhsIopts) of
                                                       { _hdOopts ->
                                                       (case (_lhsImodNm) of
                                                        { _hdOmodNm ->
                                                        (case (_lhsIlev) of
                                                         { _hdOlev ->
                                                         (case (_lhsIlamMp) of
                                                          { _hdOlamMp ->
                                                          (case (_lhsIevalCtx) of
                                                           { _hdOevalCtx ->
                                                           (case (_lhsIdataGam) of
                                                            { _hdOdataGam ->
                                                            (case (hd_1 _hdOdataGam _hdOevalCtx _hdOlamMp _hdOlev _hdOmodNm _hdOopts) of
                                                             { ( _hdIfvS) ->
                                                                 (case (_hdIfvS `Set.union` _tlIfvS) of
                                                                  { _lhsOfvS ->
                                                                  ( _lhsOfvS) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                              in  sem_CAltL_Cons_1)) of
                       { ( sem_CAltL_1) ->
                       ( _lhsOgUniq,sem_CAltL_1) }) }) }) }) }) }))
sem_CAltL_Nil :: T_CAltL
sem_CAltL_Nil =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CAltL_Nil_1 :: T_CAltL_1
                      sem_CAltL_Nil_1 =
                          (\ _lhsIdataGam
                             _lhsIevalCtx
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                ( _lhsOfvS) }))
                  in  sem_CAltL_Nil_1)) of
           { ( sem_CAltL_1) ->
           ( _lhsOgUniq,sem_CAltL_1) }) }))
-- CBind -------------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         bindLamMp            : LamMp
         nm                   : HsName
   visit 1:
      chained attribute:
         gUniq                : UID
   visit 2:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         lamMp                : LamMp
         letBindingsCateg     : CBindCateg
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         fvSMp                : FvSMp
         nmL                  : [HsName]
   alternatives:
      alternative Bind:
         child nm             : {HsName}
         child bindAspects    : CBoundL 
-}
-- 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,HsName,T_CBind_1)
type T_CBind_1 = UID ->
                 ( UID,T_CBind_2)
type T_CBind_2 = DataGam ->
                 EvalCtx ->
                 Bool ->
                 LamMp ->
                 CBindCateg ->
                 Int ->
                 HsName ->
                 EHCOpts ->
                 ( FvS,FvSMp,([HsName]))
sem_CBind_Bind :: HsName ->
                  T_CBoundL ->
                  T_CBind
sem_CBind_Bind nm_ bindAspects_ =
    (case (nm_) of
     { _bindAspectsOnm ->
     (case (bindAspects_ _bindAspectsOnm) of
      { ( _bindAspectsIbindLamMp,bindAspects_1) ->
          (case (_bindAspectsIbindLamMp) of
           { _lhsObindLamMp ->
           (case (nm_) of
            { _lhsOnm ->
            (case ((let sem_CBind_Bind_1 :: T_CBind_1
                        sem_CBind_Bind_1 =
                            (\ _lhsIgUniq ->
                                 (case (_lhsIgUniq) of
                                  { _bindAspectsOgUniq ->
                                  (case (bindAspects_1 _bindAspectsOgUniq) of
                                   { ( _bindAspectsIgUniq,bindAspects_2) ->
                                       (case (_bindAspectsIgUniq) of
                                        { _lhsOgUniq ->
                                        (case ((let sem_CBind_Bind_2 :: T_CBind_2
                                                    sem_CBind_Bind_2 =
                                                        (\ _lhsIdataGam
                                                           _lhsIevalCtx
                                                           _lhsIisGlobal
                                                           _lhsIlamMp
                                                           _lhsIletBindingsCateg
                                                           _lhsIlev
                                                           _lhsImodNm
                                                           _lhsIopts ->
                                                             (case (_lhsIopts) of
                                                              { _bindAspectsOopts ->
                                                              (case (_lhsImodNm) of
                                                               { _bindAspectsOmodNm ->
                                                               (case (_lhsIlev) of
                                                                { _bindAspectsOlev ->
                                                                (case (_lhsIletBindingsCateg) of
                                                                 { _bindAspectsOletBindingsCateg ->
                                                                 (case (_lhsIlamMp) of
                                                                  { _bindAspectsOlamMp ->
                                                                  (case (_lhsIisGlobal) of
                                                                   { _bindAspectsOisGlobal ->
                                                                   (case (_lhsIevalCtx) of
                                                                    { _bindAspectsOevalCtx ->
                                                                    (case (_lhsIdataGam) of
                                                                     { _bindAspectsOdataGam ->
                                                                     (case (bindAspects_2 _bindAspectsOdataGam _bindAspectsOevalCtx _bindAspectsOisGlobal _bindAspectsOlamMp _bindAspectsOletBindingsCateg _bindAspectsOlev _bindAspectsOmodNm _bindAspectsOopts) of
                                                                      { ( _bindAspectsIfvS,_bindAspectsIfvSMp,_bindAspectsInmL) ->
                                                                          (case (_bindAspectsIfvS) of
                                                                           { _lhsOfvS ->
                                                                           (case (Map.singleton nm_ _bindAspectsIfvS) of
                                                                            { _lhsOfvSMp ->
                                                                            (case ([nm_]) of
                                                                             { _lhsOnmL ->
                                                                             ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }))
                                                in  sem_CBind_Bind_2)) of
                                         { ( sem_CBind_2) ->
                                         ( _lhsOgUniq,sem_CBind_2) }) }) }) }))
                    in  sem_CBind_Bind_1)) of
             { ( sem_CBind_1) ->
             ( _lhsObindLamMp,_lhsOnm,sem_CBind_1) }) }) }) }) })
-- CBindAnn ----------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Coe:
         child coe            : {()}
-}
-- cata
sem_CBindAnn :: CBindAnn ->
                T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
    (sem_CBindAnn_Coe _coe)
-- semantic domain
type T_CBindAnn = UID ->
                  ( UID,T_CBindAnn_1)
type T_CBindAnn_1 = DataGam ->
                    LamMp ->
                    Int ->
                    HsName ->
                    EHCOpts ->
                    ( FvS,([HsName]))
sem_CBindAnn_Coe :: (()) ->
                    T_CBindAnn
sem_CBindAnn_Coe coe_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CBindAnn_Coe_1 :: T_CBindAnn_1
                      sem_CBindAnn_Coe_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                (case ([]) of
                                 { _lhsOnmL ->
                                 ( _lhsOfvS,_lhsOnmL) }) }))
                  in  sem_CBindAnn_Coe_1)) of
           { ( sem_CBindAnn_1) ->
           ( _lhsOgUniq,sem_CBindAnn_1) }) }))
-- CBindAnnL ---------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CBindAnn 
         child tl             : CBindAnnL 
      alternative Nil:
-}
-- 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 = UID ->
                   ( UID,T_CBindAnnL_1)
type T_CBindAnnL_1 = DataGam ->
                     LamMp ->
                     Int ->
                     HsName ->
                     EHCOpts ->
                     ( FvS,([HsName]))
sem_CBindAnnL_Cons :: T_CBindAnn ->
                      T_CBindAnnL ->
                      T_CBindAnnL
sem_CBindAnnL_Cons hd_ tl_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _hdOgUniq ->
          (case (hd_ _hdOgUniq) of
           { ( _hdIgUniq,hd_1) ->
               (case (_hdIgUniq) of
                { _tlOgUniq ->
                (case (tl_ _tlOgUniq) of
                 { ( _tlIgUniq,tl_1) ->
                     (case (_tlIgUniq) of
                      { _lhsOgUniq ->
                      (case ((let sem_CBindAnnL_Cons_1 :: T_CBindAnnL_1
                                  sem_CBindAnnL_Cons_1 =
                                      (\ _lhsIdataGam
                                         _lhsIlamMp
                                         _lhsIlev
                                         _lhsImodNm
                                         _lhsIopts ->
                                           (case (_lhsIopts) of
                                            { _tlOopts ->
                                            (case (_lhsImodNm) of
                                             { _tlOmodNm ->
                                             (case (_lhsIlev) of
                                              { _tlOlev ->
                                              (case (_lhsIlamMp) of
                                               { _tlOlamMp ->
                                               (case (_lhsIdataGam) of
                                                { _tlOdataGam ->
                                                (case (tl_1 _tlOdataGam _tlOlamMp _tlOlev _tlOmodNm _tlOopts) of
                                                 { ( _tlIfvS,_tlInmL) ->
                                                     (case (_lhsIopts) of
                                                      { _hdOopts ->
                                                      (case (_lhsImodNm) of
                                                       { _hdOmodNm ->
                                                       (case (_lhsIlev) of
                                                        { _hdOlev ->
                                                        (case (_lhsIlamMp) of
                                                         { _hdOlamMp ->
                                                         (case (_lhsIdataGam) of
                                                          { _hdOdataGam ->
                                                          (case (hd_1 _hdOdataGam _hdOlamMp _hdOlev _hdOmodNm _hdOopts) of
                                                           { ( _hdIfvS,_hdInmL) ->
                                                               (case (_hdIfvS `Set.union` _tlIfvS) of
                                                                { _lhsOfvS ->
                                                                (case (_hdInmL ++ _tlInmL) of
                                                                 { _lhsOnmL ->
                                                                 ( _lhsOfvS,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                              in  sem_CBindAnnL_Cons_1)) of
                       { ( sem_CBindAnnL_1) ->
                       ( _lhsOgUniq,sem_CBindAnnL_1) }) }) }) }) }) }))
sem_CBindAnnL_Nil :: T_CBindAnnL
sem_CBindAnnL_Nil =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CBindAnnL_Nil_1 :: T_CBindAnnL_1
                      sem_CBindAnnL_Nil_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                (case ([]) of
                                 { _lhsOnmL ->
                                 ( _lhsOfvS,_lhsOnmL) }) }))
                  in  sem_CBindAnnL_Nil_1)) of
           { ( sem_CBindAnnL_1) ->
           ( _lhsOgUniq,sem_CBindAnnL_1) }) }))
-- CBindL ------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         bindLamMp            : LamMp
   visit 1:
      chained attribute:
         gUniq                : UID
   visit 2:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         lamMp                : LamMp
         letBindingsCateg     : CBindCateg
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         fvSMp                : FvSMp
         nmL                  : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CBind 
         child tl             : CBindL 
      alternative Nil:
-}
-- 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,T_CBindL_1)
type T_CBindL_1 = UID ->
                  ( UID,T_CBindL_2)
type T_CBindL_2 = DataGam ->
                  EvalCtx ->
                  Bool ->
                  LamMp ->
                  CBindCateg ->
                  Int ->
                  HsName ->
                  EHCOpts ->
                  ( FvS,FvSMp,([HsName]))
sem_CBindL_Cons :: T_CBind ->
                   T_CBindL ->
                   T_CBindL
sem_CBindL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIbindLamMp,tl_1) ->
         (case (hd_) of
          { ( _hdIbindLamMp,_hdInm,hd_1) ->
              (case (_hdIbindLamMp `lamMpUnionBindAspMp` _tlIbindLamMp) of
               { _lhsObindLamMp ->
               (case ((let sem_CBindL_Cons_1 :: T_CBindL_1
                           sem_CBindL_Cons_1 =
                               (\ _lhsIgUniq ->
                                    (case (_lhsIgUniq) of
                                     { _hdOgUniq ->
                                     (case (hd_1 _hdOgUniq) of
                                      { ( _hdIgUniq,hd_2) ->
                                          (case (_hdIgUniq) of
                                           { _tlOgUniq ->
                                           (case (tl_1 _tlOgUniq) of
                                            { ( _tlIgUniq,tl_2) ->
                                                (case (_tlIgUniq) of
                                                 { _lhsOgUniq ->
                                                 (case ((let sem_CBindL_Cons_2 :: T_CBindL_2
                                                             sem_CBindL_Cons_2 =
                                                                 (\ _lhsIdataGam
                                                                    _lhsIevalCtx
                                                                    _lhsIisGlobal
                                                                    _lhsIlamMp
                                                                    _lhsIletBindingsCateg
                                                                    _lhsIlev
                                                                    _lhsImodNm
                                                                    _lhsIopts ->
                                                                      (case (_lhsIopts) of
                                                                       { _tlOopts ->
                                                                       (case (_lhsImodNm) of
                                                                        { _tlOmodNm ->
                                                                        (case (_lhsIlev) of
                                                                         { _tlOlev ->
                                                                         (case (_lhsIletBindingsCateg) of
                                                                          { _tlOletBindingsCateg ->
                                                                          (case (_lhsIlamMp) of
                                                                           { _tlOlamMp ->
                                                                           (case (_lhsIisGlobal) of
                                                                            { _tlOisGlobal ->
                                                                            (case (_lhsIevalCtx) of
                                                                             { _tlOevalCtx ->
                                                                             (case (_lhsIdataGam) of
                                                                              { _tlOdataGam ->
                                                                              (case (tl_2 _tlOdataGam _tlOevalCtx _tlOisGlobal _tlOlamMp _tlOletBindingsCateg _tlOlev _tlOmodNm _tlOopts) of
                                                                               { ( _tlIfvS,_tlIfvSMp,_tlInmL) ->
                                                                                   (case (_lhsIopts) of
                                                                                    { _hdOopts ->
                                                                                    (case (_lhsImodNm) of
                                                                                     { _hdOmodNm ->
                                                                                     (case (_lhsIlev) of
                                                                                      { _hdOlev ->
                                                                                      (case (_lhsIletBindingsCateg) of
                                                                                       { _hdOletBindingsCateg ->
                                                                                       (case (_lhsIlamMp) of
                                                                                        { _hdOlamMp ->
                                                                                        (case (_lhsIisGlobal) of
                                                                                         { _hdOisGlobal ->
                                                                                         (case (_lhsIevalCtx) of
                                                                                          { _hdOevalCtx ->
                                                                                          (case (_lhsIdataGam) of
                                                                                           { _hdOdataGam ->
                                                                                           (case (hd_2 _hdOdataGam _hdOevalCtx _hdOisGlobal _hdOlamMp _hdOletBindingsCateg _hdOlev _hdOmodNm _hdOopts) of
                                                                                            { ( _hdIfvS,_hdIfvSMp,_hdInmL) ->
                                                                                                (case (_hdIfvS `Set.union` _tlIfvS) of
                                                                                                 { _lhsOfvS ->
                                                                                                 (case (_hdIfvSMp `Map.union` _tlIfvSMp) of
                                                                                                  { _lhsOfvSMp ->
                                                                                                  (case (_hdInmL ++ _tlInmL) of
                                                                                                   { _lhsOnmL ->
                                                                                                   ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                         in  sem_CBindL_Cons_2)) of
                                                  { ( sem_CBindL_2) ->
                                                  ( _lhsOgUniq,sem_CBindL_2) }) }) }) }) }) }))
                       in  sem_CBindL_Cons_1)) of
                { ( sem_CBindL_1) ->
                ( _lhsObindLamMp,sem_CBindL_1) }) }) }) })
sem_CBindL_Nil :: T_CBindL
sem_CBindL_Nil =
    (case (Map.empty) of
     { _lhsObindLamMp ->
     (case ((let sem_CBindL_Nil_1 :: T_CBindL_1
                 sem_CBindL_Nil_1 =
                     (\ _lhsIgUniq ->
                          (case (_lhsIgUniq) of
                           { _lhsOgUniq ->
                           (case ((let sem_CBindL_Nil_2 :: T_CBindL_2
                                       sem_CBindL_Nil_2 =
                                           (\ _lhsIdataGam
                                              _lhsIevalCtx
                                              _lhsIisGlobal
                                              _lhsIlamMp
                                              _lhsIletBindingsCateg
                                              _lhsIlev
                                              _lhsImodNm
                                              _lhsIopts ->
                                                (case (Set.empty) of
                                                 { _lhsOfvS ->
                                                 (case (Map.empty) of
                                                  { _lhsOfvSMp ->
                                                  (case ([]) of
                                                   { _lhsOnmL ->
                                                   ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }))
                                   in  sem_CBindL_Nil_2)) of
                            { ( sem_CBindL_2) ->
                            ( _lhsOgUniq,sem_CBindL_2) }) }))
             in  sem_CBindL_Nil_1)) of
      { ( sem_CBindL_1) ->
      ( _lhsObindLamMp,sem_CBindL_1) }) })
-- CBound ------------------------------------------------------
{-
   visit 0:
      inherited attribute:
         nm                   : HsName
      synthesized attribute:
         bindLamMp            : LamMp
   visit 1:
      chained attribute:
         gUniq                : UID
   visit 2:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         isTopApp             : Bool
         isTopTup             : Bool
         lamMp                : LamMp
         letBindingsCateg     : CBindCateg
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         fvSMp                : FvSMp
         nmL                  : [HsName]
   alternatives:
      alternative Bind:
         child bindMeta       : CMetas 
         child expr           : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
      alternative Meta:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child cmetas         : CMetas 
      alternative Val:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child mlev           : {MetaLev}
         child lbl            : {CLbl}
         child expr           : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
      alternative Ty:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child ty             : {Ty}
      alternative FFE:
         child callconv       : {FFIWay}
         child expEnt         : {ForeignEnt}
         child expr           : CExpr 
         child ty             : {Ty}
         visit 2:
            local whatAbove   : {WhatExpr}
-}
-- 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_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 = HsName ->
                ( LamMp,T_CBound_1)
type T_CBound_1 = UID ->
                  ( UID,T_CBound_2)
type T_CBound_2 = DataGam ->
                  EvalCtx ->
                  Bool ->
                  Bool ->
                  Bool ->
                  LamMp ->
                  CBindCateg ->
                  Int ->
                  HsName ->
                  EHCOpts ->
                  ( FvS,FvSMp,([HsName]))
sem_CBound_Bind :: T_CMetas ->
                   T_CExpr ->
                   T_CBound
sem_CBound_Bind bindMeta_ expr_ =
    (\ _lhsInm ->
         (case (expr_) of
          { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
              (case (Map.singleton _lhsInm
                                   (emptyLamInfo {laminfoArity = length _exprIgrLamArgL})) of
               { _lhsObindLamMp ->
               (case ((let sem_CBound_Bind_1 :: T_CBound_1
                           sem_CBound_Bind_1 =
                               (\ _lhsIgUniq ->
                                    (case (_lhsIgUniq) of
                                     { _exprOgUniq ->
                                     (case (expr_1 _exprOgUniq) of
                                      { ( _exprIgUniq,expr_2) ->
                                          (case (_exprIgUniq) of
                                           { _lhsOgUniq ->
                                           (case ((let sem_CBound_Bind_2 :: T_CBound_2
                                                       sem_CBound_Bind_2 =
                                                           (\ _lhsIdataGam
                                                              _lhsIevalCtx
                                                              _lhsIisGlobal
                                                              _lhsIisTopApp
                                                              _lhsIisTopTup
                                                              _lhsIlamMp
                                                              _lhsIletBindingsCateg
                                                              _lhsIlev
                                                              _lhsImodNm
                                                              _lhsIopts ->
                                                                (case (ExprIsBind _lhsInm) of
                                                                 { _whatAbove ->
                                                                 (case (_whatAbove) of
                                                                  { _exprOwhatAbove ->
                                                                  (case (_lhsIopts) of
                                                                   { _exprOopts ->
                                                                   (case (_lhsImodNm) of
                                                                    { _exprOmodNm ->
                                                                    (case (_lhsIlev) of
                                                                     { _exprOlev ->
                                                                     (case (_lhsIlamMp) of
                                                                      { _exprOlamMp ->
                                                                      (case (_lhsIevalCtx) of
                                                                       { _exprOevalCtx ->
                                                                       (case (_lhsIdataGam) of
                                                                        { _exprOdataGam ->
                                                                        (case (True) of
                                                                         { _exprOisTopTup ->
                                                                         (case (True) of
                                                                          { _exprOisTopApp ->
                                                                          (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                           { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                               (case (_lhsIopts) of
                                                                                { _bindMetaOopts ->
                                                                                (case (_lhsImodNm) of
                                                                                 { _bindMetaOmodNm ->
                                                                                 (case (_lhsIlev) of
                                                                                  { _bindMetaOlev ->
                                                                                  (case (_lhsIlamMp) of
                                                                                   { _bindMetaOlamMp ->
                                                                                   (case (_lhsIdataGam) of
                                                                                    { _bindMetaOdataGam ->
                                                                                    (case (bindMeta_ _bindMetaOdataGam _bindMetaOlamMp _bindMetaOlev _bindMetaOmodNm _bindMetaOopts) of
                                                                                     { ( _bindMetaIfvS) ->
                                                                                         (case (_bindMetaIfvS `Set.union` _exprIfvS) of
                                                                                          { _lhsOfvS ->
                                                                                          (case (Map.empty) of
                                                                                           { _lhsOfvSMp ->
                                                                                           (case ([]) of
                                                                                            { _lhsOnmL ->
                                                                                            ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                   in  sem_CBound_Bind_2)) of
                                            { ( sem_CBound_2) ->
                                            ( _lhsOgUniq,sem_CBound_2) }) }) }) }))
                       in  sem_CBound_Bind_1)) of
                { ( sem_CBound_1) ->
                ( _lhsObindLamMp,sem_CBound_1) }) }) }))
sem_CBound_Meta :: ACoreBindAspectKeyS ->
                   T_CMetas ->
                   T_CBound
sem_CBound_Meta aspectKeyS_ cmetas_ =
    (\ _lhsInm ->
         (case (Map.empty) of
          { _lhsObindLamMp ->
          (case ((let sem_CBound_Meta_1 :: T_CBound_1
                      sem_CBound_Meta_1 =
                          (\ _lhsIgUniq ->
                               (case (_lhsIgUniq) of
                                { _lhsOgUniq ->
                                (case ((let sem_CBound_Meta_2 :: T_CBound_2
                                            sem_CBound_Meta_2 =
                                                (\ _lhsIdataGam
                                                   _lhsIevalCtx
                                                   _lhsIisGlobal
                                                   _lhsIisTopApp
                                                   _lhsIisTopTup
                                                   _lhsIlamMp
                                                   _lhsIletBindingsCateg
                                                   _lhsIlev
                                                   _lhsImodNm
                                                   _lhsIopts ->
                                                     (case (_lhsIopts) of
                                                      { _cmetasOopts ->
                                                      (case (_lhsImodNm) of
                                                       { _cmetasOmodNm ->
                                                       (case (_lhsIlev) of
                                                        { _cmetasOlev ->
                                                        (case (_lhsIlamMp) of
                                                         { _cmetasOlamMp ->
                                                         (case (_lhsIdataGam) of
                                                          { _cmetasOdataGam ->
                                                          (case (cmetas_ _cmetasOdataGam _cmetasOlamMp _cmetasOlev _cmetasOmodNm _cmetasOopts) of
                                                           { ( _cmetasIfvS) ->
                                                               (case (_cmetasIfvS) of
                                                                { _lhsOfvS ->
                                                                (case (Map.empty) of
                                                                 { _lhsOfvSMp ->
                                                                 (case ([]) of
                                                                  { _lhsOnmL ->
                                                                  ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }))
                                        in  sem_CBound_Meta_2)) of
                                 { ( sem_CBound_2) ->
                                 ( _lhsOgUniq,sem_CBound_2) }) }))
                  in  sem_CBound_Meta_1)) of
           { ( sem_CBound_1) ->
           ( _lhsObindLamMp,sem_CBound_1) }) }))
sem_CBound_Val :: ACoreBindAspectKeyS ->
                  MetaLev ->
                  CLbl ->
                  T_CExpr ->
                  T_CBound
sem_CBound_Val aspectKeyS_ mlev_ lbl_ expr_ =
    (\ _lhsInm ->
         (case (Map.empty) of
          { _lhsObindLamMp ->
          (case ((let sem_CBound_Val_1 :: T_CBound_1
                      sem_CBound_Val_1 =
                          (\ _lhsIgUniq ->
                               (case (_lhsIgUniq) of
                                { _exprOgUniq ->
                                (case (expr_) of
                                 { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                     (case (expr_1 _exprOgUniq) of
                                      { ( _exprIgUniq,expr_2) ->
                                          (case (_exprIgUniq) of
                                           { _lhsOgUniq ->
                                           (case ((let sem_CBound_Val_2 :: T_CBound_2
                                                       sem_CBound_Val_2 =
                                                           (\ _lhsIdataGam
                                                              _lhsIevalCtx
                                                              _lhsIisGlobal
                                                              _lhsIisTopApp
                                                              _lhsIisTopTup
                                                              _lhsIlamMp
                                                              _lhsIletBindingsCateg
                                                              _lhsIlev
                                                              _lhsImodNm
                                                              _lhsIopts ->
                                                                (case (ExprIsBind _lhsInm) of
                                                                 { _whatAbove ->
                                                                 (case (_whatAbove) of
                                                                  { _exprOwhatAbove ->
                                                                  (case (_lhsIopts) of
                                                                   { _exprOopts ->
                                                                   (case (_lhsImodNm) of
                                                                    { _exprOmodNm ->
                                                                    (case (_lhsIlev) of
                                                                     { _exprOlev ->
                                                                     (case (_lhsIlamMp) of
                                                                      { _exprOlamMp ->
                                                                      (case (_lhsIisTopTup) of
                                                                       { _exprOisTopTup ->
                                                                       (case (_lhsIisTopApp) of
                                                                        { _exprOisTopApp ->
                                                                        (case (_lhsIevalCtx) of
                                                                         { _exprOevalCtx ->
                                                                         (case (_lhsIdataGam) of
                                                                          { _exprOdataGam ->
                                                                          (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                           { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                               (case (_exprIfvS) of
                                                                                { _lhsOfvS ->
                                                                                (case (Map.empty) of
                                                                                 { _lhsOfvSMp ->
                                                                                 (case ([]) of
                                                                                  { _lhsOnmL ->
                                                                                  ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                   in  sem_CBound_Val_2)) of
                                            { ( sem_CBound_2) ->
                                            ( _lhsOgUniq,sem_CBound_2) }) }) }) }) }))
                  in  sem_CBound_Val_1)) of
           { ( sem_CBound_1) ->
           ( _lhsObindLamMp,sem_CBound_1) }) }))
sem_CBound_Ty :: ACoreBindAspectKeyS ->
                 Ty ->
                 T_CBound
sem_CBound_Ty aspectKeyS_ ty_ =
    (\ _lhsInm ->
         (case (Map.empty) of
          { _lhsObindLamMp ->
          (case ((let sem_CBound_Ty_1 :: T_CBound_1
                      sem_CBound_Ty_1 =
                          (\ _lhsIgUniq ->
                               (case (_lhsIgUniq) of
                                { _lhsOgUniq ->
                                (case ((let sem_CBound_Ty_2 :: T_CBound_2
                                            sem_CBound_Ty_2 =
                                                (\ _lhsIdataGam
                                                   _lhsIevalCtx
                                                   _lhsIisGlobal
                                                   _lhsIisTopApp
                                                   _lhsIisTopTup
                                                   _lhsIlamMp
                                                   _lhsIletBindingsCateg
                                                   _lhsIlev
                                                   _lhsImodNm
                                                   _lhsIopts ->
                                                     (case (Set.empty) of
                                                      { _lhsOfvS ->
                                                      (case (Map.empty) of
                                                       { _lhsOfvSMp ->
                                                       (case ([]) of
                                                        { _lhsOnmL ->
                                                        ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }))
                                        in  sem_CBound_Ty_2)) of
                                 { ( sem_CBound_2) ->
                                 ( _lhsOgUniq,sem_CBound_2) }) }))
                  in  sem_CBound_Ty_1)) of
           { ( sem_CBound_1) ->
           ( _lhsObindLamMp,sem_CBound_1) }) }))
sem_CBound_FFE :: FFIWay ->
                  ForeignEnt ->
                  T_CExpr ->
                  Ty ->
                  T_CBound
sem_CBound_FFE callconv_ expEnt_ expr_ ty_ =
    (\ _lhsInm ->
         (case (Map.empty) of
          { _lhsObindLamMp ->
          (case ((let sem_CBound_FFE_1 :: T_CBound_1
                      sem_CBound_FFE_1 =
                          (\ _lhsIgUniq ->
                               (case (_lhsIgUniq) of
                                { _exprOgUniq ->
                                (case (expr_) of
                                 { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                     (case (expr_1 _exprOgUniq) of
                                      { ( _exprIgUniq,expr_2) ->
                                          (case (_exprIgUniq) of
                                           { _lhsOgUniq ->
                                           (case ((let sem_CBound_FFE_2 :: T_CBound_2
                                                       sem_CBound_FFE_2 =
                                                           (\ _lhsIdataGam
                                                              _lhsIevalCtx
                                                              _lhsIisGlobal
                                                              _lhsIisTopApp
                                                              _lhsIisTopTup
                                                              _lhsIlamMp
                                                              _lhsIletBindingsCateg
                                                              _lhsIlev
                                                              _lhsImodNm
                                                              _lhsIopts ->
                                                                (case (ExprIsLam 0 Nothing) of
                                                                 { _whatAbove ->
                                                                 (case (_whatAbove) of
                                                                  { _exprOwhatAbove ->
                                                                  (case (_lhsIopts) of
                                                                   { _exprOopts ->
                                                                   (case (_lhsImodNm) of
                                                                    { _exprOmodNm ->
                                                                    (case (_lhsIlev) of
                                                                     { _exprOlev ->
                                                                     (case (_lhsIlamMp) of
                                                                      { _exprOlamMp ->
                                                                      (case (_lhsIevalCtx) of
                                                                       { _exprOevalCtx ->
                                                                       (case (_lhsIdataGam) of
                                                                        { _exprOdataGam ->
                                                                        (case (True) of
                                                                         { _exprOisTopTup ->
                                                                         (case (True) of
                                                                          { _exprOisTopApp ->
                                                                          (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                           { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                               (case (_exprIfvS) of
                                                                                { _lhsOfvS ->
                                                                                (case (Map.empty) of
                                                                                 { _lhsOfvSMp ->
                                                                                 (case ([]) of
                                                                                  { _lhsOnmL ->
                                                                                  ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                   in  sem_CBound_FFE_2)) of
                                            { ( sem_CBound_2) ->
                                            ( _lhsOgUniq,sem_CBound_2) }) }) }) }) }))
                  in  sem_CBound_FFE_1)) of
           { ( sem_CBound_1) ->
           ( _lhsObindLamMp,sem_CBound_1) }) }))
-- CBoundL -----------------------------------------------------
{-
   visit 0:
      inherited attribute:
         nm                   : HsName
      synthesized attribute:
         bindLamMp            : LamMp
   visit 1:
      chained attribute:
         gUniq                : UID
   visit 2:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         lamMp                : LamMp
         letBindingsCateg     : CBindCateg
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         fvSMp                : FvSMp
         nmL                  : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CBound 
         child tl             : CBoundL 
      alternative Nil:
-}
-- 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 = HsName ->
                 ( LamMp,T_CBoundL_1)
type T_CBoundL_1 = UID ->
                   ( UID,T_CBoundL_2)
type T_CBoundL_2 = DataGam ->
                   EvalCtx ->
                   Bool ->
                   LamMp ->
                   CBindCateg ->
                   Int ->
                   HsName ->
                   EHCOpts ->
                   ( FvS,FvSMp,([HsName]))
sem_CBoundL_Cons :: T_CBound ->
                    T_CBoundL ->
                    T_CBoundL
sem_CBoundL_Cons hd_ tl_ =
    (\ _lhsInm ->
         (case (_lhsInm) of
          { _tlOnm ->
          (case (_lhsInm) of
           { _hdOnm ->
           (case (tl_ _tlOnm) of
            { ( _tlIbindLamMp,tl_1) ->
                (case (hd_ _hdOnm) of
                 { ( _hdIbindLamMp,hd_1) ->
                     (case (_hdIbindLamMp `lamMpUnionBindAspMp` _tlIbindLamMp) of
                      { _lhsObindLamMp ->
                      (case ((let sem_CBoundL_Cons_1 :: T_CBoundL_1
                                  sem_CBoundL_Cons_1 =
                                      (\ _lhsIgUniq ->
                                           (case (_lhsIgUniq) of
                                            { _hdOgUniq ->
                                            (case (hd_1 _hdOgUniq) of
                                             { ( _hdIgUniq,hd_2) ->
                                                 (case (_hdIgUniq) of
                                                  { _tlOgUniq ->
                                                  (case (tl_1 _tlOgUniq) of
                                                   { ( _tlIgUniq,tl_2) ->
                                                       (case (_tlIgUniq) of
                                                        { _lhsOgUniq ->
                                                        (case ((let sem_CBoundL_Cons_2 :: T_CBoundL_2
                                                                    sem_CBoundL_Cons_2 =
                                                                        (\ _lhsIdataGam
                                                                           _lhsIevalCtx
                                                                           _lhsIisGlobal
                                                                           _lhsIlamMp
                                                                           _lhsIletBindingsCateg
                                                                           _lhsIlev
                                                                           _lhsImodNm
                                                                           _lhsIopts ->
                                                                             (case (_lhsIopts) of
                                                                              { _tlOopts ->
                                                                              (case (_lhsImodNm) of
                                                                               { _tlOmodNm ->
                                                                               (case (_lhsIlev) of
                                                                                { _tlOlev ->
                                                                                (case (_lhsIletBindingsCateg) of
                                                                                 { _tlOletBindingsCateg ->
                                                                                 (case (_lhsIlamMp) of
                                                                                  { _tlOlamMp ->
                                                                                  (case (_lhsIisGlobal) of
                                                                                   { _tlOisGlobal ->
                                                                                   (case (_lhsIevalCtx) of
                                                                                    { _tlOevalCtx ->
                                                                                    (case (_lhsIdataGam) of
                                                                                     { _tlOdataGam ->
                                                                                     (case (tl_2 _tlOdataGam _tlOevalCtx _tlOisGlobal _tlOlamMp _tlOletBindingsCateg _tlOlev _tlOmodNm _tlOopts) of
                                                                                      { ( _tlIfvS,_tlIfvSMp,_tlInmL) ->
                                                                                          (case (_lhsIopts) of
                                                                                           { _hdOopts ->
                                                                                           (case (_lhsImodNm) of
                                                                                            { _hdOmodNm ->
                                                                                            (case (_lhsIlev) of
                                                                                             { _hdOlev ->
                                                                                             (case (_lhsIletBindingsCateg) of
                                                                                              { _hdOletBindingsCateg ->
                                                                                              (case (_lhsIlamMp) of
                                                                                               { _hdOlamMp ->
                                                                                               (case (_lhsIisGlobal) of
                                                                                                { _hdOisGlobal ->
                                                                                                (case (_lhsIevalCtx) of
                                                                                                 { _hdOevalCtx ->
                                                                                                 (case (_lhsIdataGam) of
                                                                                                  { _hdOdataGam ->
                                                                                                  (case (True) of
                                                                                                   { _hdOisTopTup ->
                                                                                                   (case (True) of
                                                                                                    { _hdOisTopApp ->
                                                                                                    (case (hd_2 _hdOdataGam _hdOevalCtx _hdOisGlobal _hdOisTopApp _hdOisTopTup _hdOlamMp _hdOletBindingsCateg _hdOlev _hdOmodNm _hdOopts) of
                                                                                                     { ( _hdIfvS,_hdIfvSMp,_hdInmL) ->
                                                                                                         (case (_hdIfvS `Set.union` _tlIfvS) of
                                                                                                          { _lhsOfvS ->
                                                                                                          (case (_hdIfvSMp `Map.union` _tlIfvSMp) of
                                                                                                           { _lhsOfvSMp ->
                                                                                                           (case (_hdInmL ++ _tlInmL) of
                                                                                                            { _lhsOnmL ->
                                                                                                            ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                                in  sem_CBoundL_Cons_2)) of
                                                         { ( sem_CBoundL_2) ->
                                                         ( _lhsOgUniq,sem_CBoundL_2) }) }) }) }) }) }))
                              in  sem_CBoundL_Cons_1)) of
                       { ( sem_CBoundL_1) ->
                       ( _lhsObindLamMp,sem_CBoundL_1) }) }) }) }) }) }))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
    (\ _lhsInm ->
         (case (Map.empty) of
          { _lhsObindLamMp ->
          (case ((let sem_CBoundL_Nil_1 :: T_CBoundL_1
                      sem_CBoundL_Nil_1 =
                          (\ _lhsIgUniq ->
                               (case (_lhsIgUniq) of
                                { _lhsOgUniq ->
                                (case ((let sem_CBoundL_Nil_2 :: T_CBoundL_2
                                            sem_CBoundL_Nil_2 =
                                                (\ _lhsIdataGam
                                                   _lhsIevalCtx
                                                   _lhsIisGlobal
                                                   _lhsIlamMp
                                                   _lhsIletBindingsCateg
                                                   _lhsIlev
                                                   _lhsImodNm
                                                   _lhsIopts ->
                                                     (case (Set.empty) of
                                                      { _lhsOfvS ->
                                                      (case (Map.empty) of
                                                       { _lhsOfvSMp ->
                                                       (case ([]) of
                                                        { _lhsOnmL ->
                                                        ( _lhsOfvS,_lhsOfvSMp,_lhsOnmL) }) }) }))
                                        in  sem_CBoundL_Nil_2)) of
                                 { ( sem_CBoundL_2) ->
                                 ( _lhsOgUniq,sem_CBoundL_2) }) }))
                  in  sem_CBoundL_Nil_1)) of
           { ( sem_CBoundL_1) ->
           ( _lhsObindLamMp,sem_CBoundL_1) }) }))
-- CDataCon ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         dataConstrTagMp      : DataConstrTagMp
   alternatives:
      alternative Con:
         child conNm          : {HsName}
         child tagNr          : {Int}
         child arity          : {Int}
         visit 0:
            local dti         : _
-}
-- cata
sem_CDataCon :: CDataCon ->
                T_CDataCon
sem_CDataCon (CDataCon_Con _conNm _tagNr _arity) =
    (sem_CDataCon_Con _conNm _tagNr _arity)
-- semantic domain
type T_CDataCon = ( DataConstrTagMp)
sem_CDataCon_Con :: HsName ->
                    Int ->
                    Int ->
                    T_CDataCon
sem_CDataCon_Con conNm_ tagNr_ arity_ =
    (case (emptyDataTagInfo
               { dtiConNm          = conNm_
               , dtiCTag           = mkOnlyConInfoCTag conNm_ tagNr_ arity_
               }) of
     { _dti ->
     (case (Map.singleton conNm_ _dti) of
      { _lhsOdataConstrTagMp ->
      ( _lhsOdataConstrTagMp) }) })
-- CDataConL ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         dataConstrTagMp      : DataConstrTagMp
   alternatives:
      alternative Cons:
         child hd             : CDataCon 
         child tl             : CDataConL 
      alternative Nil:
-}
-- 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 = ( DataConstrTagMp)
sem_CDataConL_Cons :: T_CDataCon ->
                      T_CDataConL ->
                      T_CDataConL
sem_CDataConL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIdataConstrTagMp) ->
         (case (hd_) of
          { ( _hdIdataConstrTagMp) ->
              (case (_hdIdataConstrTagMp `Map.union` _tlIdataConstrTagMp) of
               { _lhsOdataConstrTagMp ->
               ( _lhsOdataConstrTagMp) }) }) })
sem_CDataConL_Nil :: T_CDataConL
sem_CDataConL_Nil =
    (case (Map.empty) of
     { _lhsOdataConstrTagMp ->
     ( _lhsOdataConstrTagMp) })
-- CDeclMeta ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         gathDataGam          : DataGam
   alternatives:
      alternative Data:
         child tyNm           : {HsName}
         child dataCons       : CDataConL 
-}
-- cata
sem_CDeclMeta :: CDeclMeta ->
                 T_CDeclMeta
sem_CDeclMeta (CDeclMeta_Data _tyNm _dataCons) =
    (sem_CDeclMeta_Data _tyNm (sem_CDataConL _dataCons))
-- semantic domain
type T_CDeclMeta = ( DataGam)
sem_CDeclMeta_Data :: HsName ->
                      T_CDataConL ->
                      T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
    (case (dataCons_) of
     { ( _dataConsIdataConstrTagMp) ->
         (case (gamSingleton tyNm_ $ mkDGIForCodegenOnly tyNm_ _dataConsIdataConstrTagMp) of
          { _lhsOgathDataGam ->
          ( _lhsOgathDataGam) }) })
-- CDeclMetaL --------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         gathDataGam          : DataGam
   alternatives:
      alternative Cons:
         child hd             : CDeclMeta 
         child tl             : CDeclMetaL 
      alternative Nil:
-}
-- 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 = ( DataGam)
sem_CDeclMetaL_Cons :: T_CDeclMeta ->
                       T_CDeclMetaL ->
                       T_CDeclMetaL
sem_CDeclMetaL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIgathDataGam) ->
         (case (hd_) of
          { ( _hdIgathDataGam) ->
              (case (_hdIgathDataGam `gamUnion` _tlIgathDataGam) of
               { _lhsOgathDataGam ->
               ( _lhsOgathDataGam) }) }) })
sem_CDeclMetaL_Nil :: T_CDeclMetaL
sem_CDeclMetaL_Nil =
    (case (emptyGam) of
     { _lhsOgathDataGam ->
     ( _lhsOgathDataGam) })
-- CExport -----------------------------------------------------
{-
   alternatives:
      alternative Export:
         child nm             : {HsName}
      alternative ExportData:
         child nm             : {HsName}
         child mbConNmL       : {Maybe [HsName]}
-}
-- cata
sem_CExport :: CExport ->
               T_CExport
sem_CExport (CExport_Export _nm) =
    (sem_CExport_Export _nm)
sem_CExport (CExport_ExportData _nm _mbConNmL) =
    (sem_CExport_ExportData _nm _mbConNmL)
-- semantic domain
type T_CExport = ( )
sem_CExport_Export :: HsName ->
                      T_CExport
sem_CExport_Export nm_ =
    ( )
sem_CExport_ExportData :: HsName ->
                          (Maybe [HsName]) ->
                          T_CExport
sem_CExport_ExportData nm_ mbConNmL_ =
    ( )
-- CExportL ----------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CExport 
         child tl             : CExportL 
      alternative Nil:
-}
-- 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 = ( )
sem_CExportL_Cons :: T_CExport ->
                     T_CExportL ->
                     T_CExportL
sem_CExportL_Cons hd_ tl_ =
    ( )
sem_CExportL_Nil :: T_CExportL
sem_CExportL_Nil =
    ( )
-- CExpr -------------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         gathLamMp            : LamMp
         grLamArgL            : [HsName]
   visit 1:
      chained attribute:
         gUniq                : UID
   visit 2:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isTopApp             : Bool
         isTopTup             : Bool
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
         whatAbove            : WhatExpr
      synthesized attributes:
         appFunKind           : AppFunKind
         fvS                  : FvS
         mbFFIApp             : Maybe ( Ty
                                  , Bool
                                  , FFIWay
                                  , ForeignEnt
                                  , [Ty]
                                  )
         mbLam                : Maybe [HsName]
         mbVar                : Maybe HsName
         whatBelow            : WhatExpr
   alternatives:
      alternative Var:
         child ref            : {ACoreBindRef}
         visit 1:
            local _tup1       : _
         visit 2:
            local nm          : {HsName}
            local mbVar       : {Maybe HsName}
            local whatBelow   : _
      alternative Int:
         child int            : {Int}
         visit 1:
            local _tup2       : _
         visit 2:
            local whatBelow   : _
      alternative Char:
         child char           : {Char}
         visit 1:
            local _tup3       : _
         visit 2:
            local whatBelow   : _
      alternative String:
         child str            : {String}
         visit 1:
            local _tup4       : _
         visit 2:
            local whatBelow   : _
      alternative Integer:
         child integer        : {Integer}
         visit 1:
            local _tup5       : _
         visit 2:
            local whatBelow   : _
      alternative Tup:
         child tag            : {CTag}
         visit 2:
            local whatBelow   : _
      alternative Let:
         child categ          : {CBindCateg}
         child binds          : CBindL 
         child body           : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local evalCtx     : _
            local letBindingsCateg : _
            local isGlobal    : _
            local fvS         : _
            local whatBelow   : _
      alternative App:
         child func           : CExpr 
         child arg            : CBound 
         visit 1:
            local _tup6       : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local letBindingsCateg : _
            local isGlobal    : _
            local fvS         : _
            local whatBelow   : _
      alternative Lam:
         child bind           : CBind 
         child body           : CExpr 
         visit 0:
            local argNm       : _
         visit 1:
            intra argNm       : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local lev         : _
            local isTopTup    : _
            local isTopApp    : {Bool}
            local fvS         : _
            local whatBelow   : _
            intra argNm       : _
      alternative Case:
         child expr           : CExpr 
         child alts           : CAltL 
         child dflt           : CExpr 
         visit 1:
            local _tup7       : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative CaseAltFail:
         child failReason     : {CaseAltFailReason}
         child errorExpr      : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
      alternative TupDel:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         visit 1:
            local _tup8       : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative TupIns:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 1:
            local _tup9       : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative TupUpd:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 1:
            local _tup10      : _
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative FFI:
         child callconv       : {FFIWay}
         child safety         : {String}
         child impEnt         : {ForeignEnt}
         child ty             : {Ty}
         visit 1:
            local _tup11      : _
         visit 2:
            local foreignEntInfo : _
            local mbPrimNeedEval : {Maybe PrimitiveNeedsEval}
            local primResNeedsEval : {Bool}
            local argTyLresTy : {( TyL, Ty )}
            local resTy       : _
            local argTyL      : {TyL}
            local whatBelow   : _
      alternative Dbg:
         child info           : {String}
         visit 2:
            local whatBelow   : _
      alternative Hole:
         child uid            : {UID}
         visit 2:
            local whatBelow   : _
      alternative HoleLet:
         child bindsUid       : {UID}
         child body           : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative CoeArg:
         visit 2:
            local whatBelow   : _
      alternative ImplsApp:
         child func           : CExpr 
         child uid            : {ImplsVarId}
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative ImplsLam:
         child uid            : {ImplsVarId}
         child body           : CExpr 
         visit 2:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative Ann:
         child ann            : CExprAnn 
         child expr           : CExpr 
-}
-- 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 = ( LamMp,([HsName]),T_CExpr_1)
type T_CExpr_1 = UID ->
                 ( UID,T_CExpr_2)
type T_CExpr_2 = DataGam ->
                 EvalCtx ->
                 Bool ->
                 Bool ->
                 LamMp ->
                 Int ->
                 HsName ->
                 EHCOpts ->
                 WhatExpr ->
                 ( AppFunKind,FvS,(Maybe ( Ty
                                                                     , Bool
                                                                     , FFIWay
                                                                     , ForeignEnt
                                                                     , [Ty]
                                                                     )),(Maybe [HsName]),(Maybe HsName),WhatExpr)
sem_CExpr_Var :: ACoreBindRef ->
                 T_CExpr
sem_CExpr_Var ref_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Var_1 :: T_CExpr_1
                  sem_CExpr_Var_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup1 ->
                            (case (__tup1) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_Var_2 :: T_CExpr_2
                                         sem_CExpr_Var_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_Fun ref_) of
                                                   { _lhsOappFunKind ->
                                                   (case (acbrefNm ref_) of
                                                    { _nm ->
                                                    (case (Set.singleton _nm) of
                                                     { _lhsOfvS ->
                                                     (case (Nothing) of
                                                      { _lhsOmbFFIApp ->
                                                      (case (Nothing) of
                                                       { _lhsOmbLam ->
                                                       (case (Just _nm) of
                                                        { _mbVar ->
                                                        (case (_mbVar) of
                                                         { _lhsOmbVar ->
                                                         (case (ExprIsVar _nm) of
                                                          { _whatBelow ->
                                                          (case (_whatBelow) of
                                                           { _lhsOwhatBelow ->
                                                           ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }))
                                     in  sem_CExpr_Var_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_Var_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Int :: Int ->
                 T_CExpr
sem_CExpr_Int int_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Int_1 :: T_CExpr_1
                  sem_CExpr_Int_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup2 ->
                            (case (__tup2) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_Int_2 :: T_CExpr_2
                                         sem_CExpr_Int_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_NoApp) of
                                                   { _lhsOappFunKind ->
                                                   (case (Set.empty) of
                                                    { _lhsOfvS ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFFIApp ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar ->
                                                       (case (ExprIsInt int_) of
                                                        { _whatBelow ->
                                                        (case (_whatBelow) of
                                                         { _lhsOwhatBelow ->
                                                         ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                     in  sem_CExpr_Int_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_Int_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Char :: Char ->
                  T_CExpr
sem_CExpr_Char char_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Char_1 :: T_CExpr_1
                  sem_CExpr_Char_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup3 ->
                            (case (__tup3) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_Char_2 :: T_CExpr_2
                                         sem_CExpr_Char_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_NoApp) of
                                                   { _lhsOappFunKind ->
                                                   (case (Set.empty) of
                                                    { _lhsOfvS ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFFIApp ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar ->
                                                       (case (ExprIsOtherWHNF) of
                                                        { _whatBelow ->
                                                        (case (_whatBelow) of
                                                         { _lhsOwhatBelow ->
                                                         ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                     in  sem_CExpr_Char_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_Char_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_String :: String ->
                    T_CExpr
sem_CExpr_String str_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_String_1 :: T_CExpr_1
                  sem_CExpr_String_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup4 ->
                            (case (__tup4) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_String_2 :: T_CExpr_2
                                         sem_CExpr_String_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_NoApp) of
                                                   { _lhsOappFunKind ->
                                                   (case (Set.empty) of
                                                    { _lhsOfvS ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFFIApp ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar ->
                                                       (case (ExprIsOtherWHNF) of
                                                        { _whatBelow ->
                                                        (case (_whatBelow) of
                                                         { _lhsOwhatBelow ->
                                                         ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                     in  sem_CExpr_String_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_String_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Integer :: Integer ->
                     T_CExpr
sem_CExpr_Integer integer_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Integer_1 :: T_CExpr_1
                  sem_CExpr_Integer_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup5 ->
                            (case (__tup5) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_Integer_2 :: T_CExpr_2
                                         sem_CExpr_Integer_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_NoApp) of
                                                   { _lhsOappFunKind ->
                                                   (case (Set.empty) of
                                                    { _lhsOfvS ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFFIApp ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar ->
                                                       (case (ExprIsOtherWHNF) of
                                                        { _whatBelow ->
                                                        (case (_whatBelow) of
                                                         { _lhsOwhatBelow ->
                                                         ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                     in  sem_CExpr_Integer_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_Integer_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Tup :: CTag ->
                 T_CExpr
sem_CExpr_Tup tag_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Tup_1 :: T_CExpr_1
                  sem_CExpr_Tup_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _lhsOgUniq ->
                            (case ((let sem_CExpr_Tup_2 :: T_CExpr_2
                                        sem_CExpr_Tup_2 =
                                            (\ _lhsIdataGam
                                               _lhsIevalCtx
                                               _lhsIisTopApp
                                               _lhsIisTopTup
                                               _lhsIlamMp
                                               _lhsIlev
                                               _lhsImodNm
                                               _lhsIopts
                                               _lhsIwhatAbove ->
                                                 (case (AppFunKind_Tag tag_) of
                                                  { _lhsOappFunKind ->
                                                  (case (Set.empty) of
                                                   { _lhsOfvS ->
                                                   (case (Nothing) of
                                                    { _lhsOmbFFIApp ->
                                                    (case (Nothing) of
                                                     { _lhsOmbLam ->
                                                     (case (Nothing) of
                                                      { _lhsOmbVar ->
                                                      (case (ExprIsTup tag_) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                    in  sem_CExpr_Tup_2)) of
                             { ( sem_CExpr_2) ->
                             ( _lhsOgUniq,sem_CExpr_2) }) }))
              in  sem_CExpr_Tup_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Let :: CBindCateg ->
                 T_CBindL ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Let categ_ binds_ body_ =
    (case (body_) of
     { ( _bodyIgathLamMp,_bodyIgrLamArgL,body_1) ->
         (case (binds_) of
          { ( _bindsIbindLamMp,binds_1) ->
              (case (_bindsIbindLamMp `Map.union` _bodyIgathLamMp) of
               { _lhsOgathLamMp ->
               (case ([]) of
                { _lhsOgrLamArgL ->
                (case ((let sem_CExpr_Let_1 :: T_CExpr_1
                            sem_CExpr_Let_1 =
                                (\ _lhsIgUniq ->
                                     (case (_lhsIgUniq) of
                                      { _bindsOgUniq ->
                                      (case (binds_1 _bindsOgUniq) of
                                       { ( _bindsIgUniq,binds_2) ->
                                           (case (_bindsIgUniq) of
                                            { _bodyOgUniq ->
                                            (case (body_1 _bodyOgUniq) of
                                             { ( _bodyIgUniq,body_2) ->
                                                 (case (_bodyIgUniq) of
                                                  { _lhsOgUniq ->
                                                  (case ((let sem_CExpr_Let_2 :: T_CExpr_2
                                                              sem_CExpr_Let_2 =
                                                                  (\ _lhsIdataGam
                                                                     _lhsIevalCtx
                                                                     _lhsIisTopApp
                                                                     _lhsIisTopTup
                                                                     _lhsIlamMp
                                                                     _lhsIlev
                                                                     _lhsImodNm
                                                                     _lhsIopts
                                                                     _lhsIwhatAbove ->
                                                                       (case (AppFunKind_NoApp) of
                                                                        { _lhsOappFunKind ->
                                                                        (case (ExprIsOther) of
                                                                         { _whatAbove ->
                                                                         (case (_whatAbove) of
                                                                          { _bodyOwhatAbove ->
                                                                          (case (_lhsIopts) of
                                                                           { _bodyOopts ->
                                                                           (case (_lhsImodNm) of
                                                                            { _bodyOmodNm ->
                                                                            (case (_lhsIlev) of
                                                                             { _bodyOlev ->
                                                                             (case (_lhsIlamMp) of
                                                                              { _bodyOlamMp ->
                                                                              (case (True) of
                                                                               { _isTopTup ->
                                                                               (case (_isTopTup) of
                                                                                { _bodyOisTopTup ->
                                                                                (case (True) of
                                                                                 { _isTopApp ->
                                                                                 (case (_isTopApp) of
                                                                                  { _bodyOisTopApp ->
                                                                                  (case (if categ_ == CBindCateg_Strict
                                                                                         then EvalCtx_Eval
                                                                                         else EvalCtx_Thunk) of
                                                                                   { _evalCtx ->
                                                                                   (case (_evalCtx) of
                                                                                    { _bodyOevalCtx ->
                                                                                    (case (_lhsIdataGam) of
                                                                                     { _bodyOdataGam ->
                                                                                     (case (body_2 _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlamMp _bodyOlev _bodyOmodNm _bodyOopts _bodyOwhatAbove) of
                                                                                      { ( _bodyIappFunKind,_bodyIfvS,_bodyImbFFIApp,_bodyImbLam,_bodyImbVar,_bodyIwhatBelow) ->
                                                                                          (case (_lhsIopts) of
                                                                                           { _bindsOopts ->
                                                                                           (case (_lhsImodNm) of
                                                                                            { _bindsOmodNm ->
                                                                                            (case (categ_) of
                                                                                             { _letBindingsCateg ->
                                                                                             (case (_letBindingsCateg) of
                                                                                              { _bindsOletBindingsCateg ->
                                                                                              (case (_lhsIlamMp) of
                                                                                               { _bindsOlamMp ->
                                                                                               (case (_lhsIlev == cLevModule) of
                                                                                                { _isGlobal ->
                                                                                                (case (_isGlobal) of
                                                                                                 { _bindsOisGlobal ->
                                                                                                 (case (_evalCtx) of
                                                                                                  { _bindsOevalCtx ->
                                                                                                  (case (_lhsIdataGam) of
                                                                                                   { _bindsOdataGam ->
                                                                                                   (case (_lhsIlev + 1) of
                                                                                                    { _bindsOlev ->
                                                                                                    (case (binds_2 _bindsOdataGam _bindsOevalCtx _bindsOisGlobal _bindsOlamMp _bindsOletBindingsCateg _bindsOlev _bindsOmodNm _bindsOopts) of
                                                                                                     { ( _bindsIfvS,_bindsIfvSMp,_bindsInmL) ->
                                                                                                         (case ((_bodyIfvS `Set.union` _bindsIfvS) `Set.difference` Set.fromList _bindsInmL) of
                                                                                                          { _fvS ->
                                                                                                          (case (_fvS) of
                                                                                                           { _lhsOfvS ->
                                                                                                           (case (Nothing) of
                                                                                                            { _lhsOmbFFIApp ->
                                                                                                            (case (Nothing) of
                                                                                                             { _lhsOmbLam ->
                                                                                                             (case (Nothing) of
                                                                                                              { _lhsOmbVar ->
                                                                                                              (case (ExprIsOther) of
                                                                                                               { _whatBelow ->
                                                                                                               (case (_whatBelow) of
                                                                                                                { _lhsOwhatBelow ->
                                                                                                                ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                          in  sem_CExpr_Let_2)) of
                                                   { ( sem_CExpr_2) ->
                                                   ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }))
                        in  sem_CExpr_Let_1)) of
                 { ( sem_CExpr_1) ->
                 ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) }) }) })
sem_CExpr_App :: T_CExpr ->
                 T_CBound ->
                 T_CExpr
sem_CExpr_App func_ arg_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_App_1 :: T_CExpr_1
                  sem_CExpr_App_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> case nextUnique __cont of { (__cont, lUniq2) -> (__cont,lUniq,lUniq2)}} )) of
                            { __tup6 ->
                            (case (__tup6) of
                             { (_funcOgUniq,_,_) ->
                             (case (func_) of
                              { ( _funcIgathLamMp,_funcIgrLamArgL,func_1) ->
                                  (case (func_1 _funcOgUniq) of
                                   { ( _funcIgUniq,func_2) ->
                                       (case (_funcIgUniq) of
                                        { _argOgUniq ->
                                        (case (hsnUnknown) of
                                         { _argOnm ->
                                         (case (arg_ _argOnm) of
                                          { ( _argIbindLamMp,arg_1) ->
                                              (case (arg_1 _argOgUniq) of
                                               { ( _argIgUniq,arg_2) ->
                                                   (case (_argIgUniq) of
                                                    { _lhsOgUniq ->
                                                    (case ((let sem_CExpr_App_2 :: T_CExpr_2
                                                                sem_CExpr_App_2 =
                                                                    (\ _lhsIdataGam
                                                                       _lhsIevalCtx
                                                                       _lhsIisTopApp
                                                                       _lhsIisTopTup
                                                                       _lhsIlamMp
                                                                       _lhsIlev
                                                                       _lhsImodNm
                                                                       _lhsIopts
                                                                       _lhsIwhatAbove ->
                                                                         (case (maybe (ExprIsApp 1 ExprIsOther) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _lhsIwhatAbove) of
                                                                          { _whatAbove ->
                                                                          (case (_whatAbove) of
                                                                           { _funcOwhatAbove ->
                                                                           (case (_lhsIopts) of
                                                                            { _funcOopts ->
                                                                            (case (_lhsImodNm) of
                                                                             { _funcOmodNm ->
                                                                             (case (_lhsIlev) of
                                                                              { _funcOlev ->
                                                                              (case (_lhsIlamMp) of
                                                                               { _funcOlamMp ->
                                                                               (case (True) of
                                                                                { _isTopTup ->
                                                                                (case (_isTopTup) of
                                                                                 { _funcOisTopTup ->
                                                                                 (case (_lhsIevalCtx) of
                                                                                  { _funcOevalCtx ->
                                                                                  (case (_lhsIdataGam) of
                                                                                   { _funcOdataGam ->
                                                                                   (case (False) of
                                                                                    { _funcOisTopApp ->
                                                                                    (case (func_2 _funcOdataGam _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlamMp _funcOlev _funcOmodNm _funcOopts _funcOwhatAbove) of
                                                                                     { ( _funcIappFunKind,_funcIfvS,_funcImbFFIApp,_funcImbLam,_funcImbVar,_funcIwhatBelow) ->
                                                                                         (case (_funcIappFunKind) of
                                                                                          { _lhsOappFunKind ->
                                                                                          (case (_lhsIopts) of
                                                                                           { _argOopts ->
                                                                                           (case (_lhsImodNm) of
                                                                                            { _argOmodNm ->
                                                                                            (case (_lhsIlev) of
                                                                                             { _argOlev ->
                                                                                             (case (acoreBindcategPlain) of
                                                                                              { _letBindingsCateg ->
                                                                                              (case (_letBindingsCateg) of
                                                                                               { _argOletBindingsCateg ->
                                                                                               (case (_lhsIlamMp) of
                                                                                                { _argOlamMp ->
                                                                                                (case (_isTopTup) of
                                                                                                 { _argOisTopTup ->
                                                                                                 (case (False) of
                                                                                                  { _isGlobal ->
                                                                                                  (case (_isGlobal) of
                                                                                                   { _argOisGlobal ->
                                                                                                   (case (_lhsIdataGam) of
                                                                                                    { _argOdataGam ->
                                                                                                    (case (EvalCtx_Thunk) of
                                                                                                     { _argOevalCtx ->
                                                                                                     (case (True) of
                                                                                                      { _argOisTopApp ->
                                                                                                      (case (arg_2 _argOdataGam _argOevalCtx _argOisGlobal _argOisTopApp _argOisTopTup _argOlamMp _argOletBindingsCateg _argOlev _argOmodNm _argOopts) of
                                                                                                       { ( _argIfvS,_argIfvSMp,_argInmL) ->
                                                                                                           (case (_funcIfvS `Set.union` _argIfvS) of
                                                                                                            { _fvS ->
                                                                                                            (case (_fvS) of
                                                                                                             { _lhsOfvS ->
                                                                                                             (case (_funcImbFFIApp) of
                                                                                                              { _lhsOmbFFIApp ->
                                                                                                              (case (Nothing) of
                                                                                                               { _lhsOmbLam ->
                                                                                                               (case (Nothing) of
                                                                                                                { _lhsOmbVar ->
                                                                                                                (case (maybe (ExprIsApp 1 _funcIwhatBelow) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _funcIwhatBelow) of
                                                                                                                 { _whatBelow ->
                                                                                                                 (case (_whatBelow) of
                                                                                                                  { _lhsOwhatBelow ->
                                                                                                                  ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                            in  sem_CExpr_App_2)) of
                                                     { ( sem_CExpr_2) ->
                                                     ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }) }) }) }) }))
              in  sem_CExpr_App_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Lam :: T_CBind ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Lam bind_ body_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case (bind_) of
      { ( _bindIbindLamMp,_bindInm,bind_1) ->
          (case (_bindInm) of
           { _argNm ->
           (case (body_) of
            { ( _bodyIgathLamMp,_bodyIgrLamArgL,body_1) ->
                (case (_argNm : _bodyIgrLamArgL) of
                 { _lhsOgrLamArgL ->
                 (case ((let sem_CExpr_Lam_1 :: T_CExpr_1
                             sem_CExpr_Lam_1 =
                                 (\ _lhsIgUniq ->
                                      (case (_lhsIgUniq) of
                                       { _bindOgUniq ->
                                       (case (bind_1 _bindOgUniq) of
                                        { ( _bindIgUniq,bind_2) ->
                                            (case (_bindIgUniq) of
                                             { _bodyOgUniq ->
                                             (case (body_1 _bodyOgUniq) of
                                              { ( _bodyIgUniq,body_2) ->
                                                  (case (_bodyIgUniq) of
                                                   { _lhsOgUniq ->
                                                   (case ((let sem_CExpr_Lam_2 :: T_CExpr_2
                                                               sem_CExpr_Lam_2 =
                                                                   (\ _lhsIdataGam
                                                                      _lhsIevalCtx
                                                                      _lhsIisTopApp
                                                                      _lhsIisTopTup
                                                                      _lhsIlamMp
                                                                      _lhsIlev
                                                                      _lhsImodNm
                                                                      _lhsIopts
                                                                      _lhsIwhatAbove ->
                                                                        (case (AppFunKind_NoApp) of
                                                                         { _lhsOappFunKind ->
                                                                         (case (case _lhsIwhatAbove of
                                                                                    ExprIsLam a mbnm    -> ExprIsLam (a + 1) mbnm
                                                                                    ExprIsBind nm       -> ExprIsLam 1       (Just nm)
                                                                                    _                   -> ExprIsLam 1       Nothing) of
                                                                          { _whatAbove ->
                                                                          (case (_whatAbove) of
                                                                           { _bodyOwhatAbove ->
                                                                           (case (_lhsIopts) of
                                                                            { _bodyOopts ->
                                                                            (case (_lhsImodNm) of
                                                                             { _bodyOmodNm ->
                                                                             (case (_lhsIlev + 1) of
                                                                              { _lev ->
                                                                              (case (_lev) of
                                                                               { _bodyOlev ->
                                                                               (case (True) of
                                                                                { _isTopTup ->
                                                                                (case (_isTopTup) of
                                                                                 { _bodyOisTopTup ->
                                                                                 (case (True) of
                                                                                  { _isTopApp ->
                                                                                  (case (_isTopApp) of
                                                                                   { _bodyOisTopApp ->
                                                                                   (case (_lhsIevalCtx) of
                                                                                    { _bodyOevalCtx ->
                                                                                    (case (_lhsIdataGam) of
                                                                                     { _bodyOdataGam ->
                                                                                     (case (Map.delete _argNm _lhsIlamMp) of
                                                                                      { _bodyOlamMp ->
                                                                                      (case (body_2 _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlamMp _bodyOlev _bodyOmodNm _bodyOopts _bodyOwhatAbove) of
                                                                                       { ( _bodyIappFunKind,_bodyIfvS,_bodyImbFFIApp,_bodyImbLam,_bodyImbVar,_bodyIwhatBelow) ->
                                                                                           (case (_argNm `Set.delete` _bodyIfvS) of
                                                                                            { _fvS ->
                                                                                            (case (_fvS) of
                                                                                             { _lhsOfvS ->
                                                                                             (case (Nothing) of
                                                                                              { _lhsOmbFFIApp ->
                                                                                              (case (Just $ maybe [_argNm] (_argNm:) _bodyImbLam) of
                                                                                               { _lhsOmbLam ->
                                                                                               (case (Nothing) of
                                                                                                { _lhsOmbVar ->
                                                                                                (case (maybe (ExprIsLam 1 Nothing) (\a -> ExprIsLam (a + 1) Nothing) $ whatExprMbLam _bodyIwhatBelow) of
                                                                                                 { _whatBelow ->
                                                                                                 (case (_whatBelow) of
                                                                                                  { _lhsOwhatBelow ->
                                                                                                  ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                           in  sem_CExpr_Lam_2)) of
                                                    { ( sem_CExpr_2) ->
                                                    ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }))
                         in  sem_CExpr_Lam_1)) of
                  { ( sem_CExpr_1) ->
                  ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) }) }) }) })
sem_CExpr_Case :: T_CExpr ->
                  T_CAltL ->
                  T_CExpr ->
                  T_CExpr
sem_CExpr_Case expr_ alts_ dflt_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Case_1 :: T_CExpr_1
                  sem_CExpr_Case_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup7 ->
                            (case (__tup7) of
                             { (_exprOgUniq,_) ->
                             (case (expr_) of
                              { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                  (case (expr_1 _exprOgUniq) of
                                   { ( _exprIgUniq,expr_2) ->
                                       (case (_exprIgUniq) of
                                        { _altsOgUniq ->
                                        (case (alts_ _altsOgUniq) of
                                         { ( _altsIgUniq,alts_1) ->
                                             (case (_altsIgUniq) of
                                              { _dfltOgUniq ->
                                              (case (dflt_) of
                                               { ( _dfltIgathLamMp,_dfltIgrLamArgL,dflt_1) ->
                                                   (case (dflt_1 _dfltOgUniq) of
                                                    { ( _dfltIgUniq,dflt_2) ->
                                                        (case (_dfltIgUniq) of
                                                         { _lhsOgUniq ->
                                                         (case ((let sem_CExpr_Case_2 :: T_CExpr_2
                                                                     sem_CExpr_Case_2 =
                                                                         (\ _lhsIdataGam
                                                                            _lhsIevalCtx
                                                                            _lhsIisTopApp
                                                                            _lhsIisTopTup
                                                                            _lhsIlamMp
                                                                            _lhsIlev
                                                                            _lhsImodNm
                                                                            _lhsIopts
                                                                            _lhsIwhatAbove ->
                                                                              (case (AppFunKind_NoApp) of
                                                                               { _lhsOappFunKind ->
                                                                               (case (ExprIsOther) of
                                                                                { _whatAbove ->
                                                                                (case (_whatAbove) of
                                                                                 { _dfltOwhatAbove ->
                                                                                 (case (_lhsIopts) of
                                                                                  { _dfltOopts ->
                                                                                  (case (_lhsImodNm) of
                                                                                   { _dfltOmodNm ->
                                                                                   (case (_lhsIlev) of
                                                                                    { _dfltOlev ->
                                                                                    (case (_lhsIlamMp) of
                                                                                     { _dfltOlamMp ->
                                                                                     (case (True) of
                                                                                      { _isTopTup ->
                                                                                      (case (_isTopTup) of
                                                                                       { _dfltOisTopTup ->
                                                                                       (case (True) of
                                                                                        { _isTopApp ->
                                                                                        (case (_isTopApp) of
                                                                                         { _dfltOisTopApp ->
                                                                                         (case (_lhsIevalCtx) of
                                                                                          { _dfltOevalCtx ->
                                                                                          (case (_lhsIdataGam) of
                                                                                           { _dfltOdataGam ->
                                                                                           (case (dflt_2 _dfltOdataGam _dfltOevalCtx _dfltOisTopApp _dfltOisTopTup _dfltOlamMp _dfltOlev _dfltOmodNm _dfltOopts _dfltOwhatAbove) of
                                                                                            { ( _dfltIappFunKind,_dfltIfvS,_dfltImbFFIApp,_dfltImbLam,_dfltImbVar,_dfltIwhatBelow) ->
                                                                                                (case (_lhsIopts) of
                                                                                                 { _altsOopts ->
                                                                                                 (case (_lhsImodNm) of
                                                                                                  { _altsOmodNm ->
                                                                                                  (case (_lhsIlev) of
                                                                                                   { _altsOlev ->
                                                                                                   (case (_lhsIlamMp) of
                                                                                                    { _altsOlamMp ->
                                                                                                    (case (_lhsIevalCtx) of
                                                                                                     { _altsOevalCtx ->
                                                                                                     (case (_lhsIdataGam) of
                                                                                                      { _altsOdataGam ->
                                                                                                      (case (alts_1 _altsOdataGam _altsOevalCtx _altsOlamMp _altsOlev _altsOmodNm _altsOopts) of
                                                                                                       { ( _altsIfvS) ->
                                                                                                           (case (_whatAbove) of
                                                                                                            { _exprOwhatAbove ->
                                                                                                            (case (_lhsIopts) of
                                                                                                             { _exprOopts ->
                                                                                                             (case (_lhsImodNm) of
                                                                                                              { _exprOmodNm ->
                                                                                                              (case (_lhsIlev) of
                                                                                                               { _exprOlev ->
                                                                                                               (case (_lhsIlamMp) of
                                                                                                                { _exprOlamMp ->
                                                                                                                (case (_isTopTup) of
                                                                                                                 { _exprOisTopTup ->
                                                                                                                 (case (_isTopApp) of
                                                                                                                  { _exprOisTopApp ->
                                                                                                                  (case (_lhsIevalCtx) of
                                                                                                                   { _exprOevalCtx ->
                                                                                                                   (case (_lhsIdataGam) of
                                                                                                                    { _exprOdataGam ->
                                                                                                                    (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                                                                     { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                                                                         (case (_exprIfvS `Set.union` _altsIfvS `Set.union` _dfltIfvS) of
                                                                                                                          { _lhsOfvS ->
                                                                                                                          (case (Nothing) of
                                                                                                                           { _lhsOmbFFIApp ->
                                                                                                                           (case (Nothing) of
                                                                                                                            { _lhsOmbLam ->
                                                                                                                            (case (Nothing) of
                                                                                                                             { _lhsOmbVar ->
                                                                                                                             (case (ExprIsOther) of
                                                                                                                              { _whatBelow ->
                                                                                                                              (case (_whatBelow) of
                                                                                                                               { _lhsOwhatBelow ->
                                                                                                                               ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                                 in  sem_CExpr_Case_2)) of
                                                          { ( sem_CExpr_2) ->
                                                          ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }) }) }) }) }) }))
              in  sem_CExpr_Case_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_CaseAltFail :: CaseAltFailReason ->
                         T_CExpr ->
                         T_CExpr
sem_CExpr_CaseAltFail failReason_ errorExpr_ =
    (case (errorExpr_) of
     { ( _errorExprIgathLamMp,_errorExprIgrLamArgL,errorExpr_1) ->
         (case (_errorExprIgathLamMp) of
          { _lhsOgathLamMp ->
          (case (_errorExprIgrLamArgL) of
           { _lhsOgrLamArgL ->
           (case ((let sem_CExpr_CaseAltFail_1 :: T_CExpr_1
                       sem_CExpr_CaseAltFail_1 =
                           (\ _lhsIgUniq ->
                                (case (_lhsIgUniq) of
                                 { _errorExprOgUniq ->
                                 (case (errorExpr_1 _errorExprOgUniq) of
                                  { ( _errorExprIgUniq,errorExpr_2) ->
                                      (case (_errorExprIgUniq) of
                                       { _lhsOgUniq ->
                                       (case ((let sem_CExpr_CaseAltFail_2 :: T_CExpr_2
                                                   sem_CExpr_CaseAltFail_2 =
                                                       (\ _lhsIdataGam
                                                          _lhsIevalCtx
                                                          _lhsIisTopApp
                                                          _lhsIisTopTup
                                                          _lhsIlamMp
                                                          _lhsIlev
                                                          _lhsImodNm
                                                          _lhsIopts
                                                          _lhsIwhatAbove ->
                                                            (case (ExprIsOther) of
                                                             { _whatAbove ->
                                                             (case (_whatAbove) of
                                                              { _errorExprOwhatAbove ->
                                                              (case (_lhsIopts) of
                                                               { _errorExprOopts ->
                                                               (case (_lhsImodNm) of
                                                                { _errorExprOmodNm ->
                                                                (case (_lhsIlev) of
                                                                 { _errorExprOlev ->
                                                                 (case (_lhsIlamMp) of
                                                                  { _errorExprOlamMp ->
                                                                  (case (True) of
                                                                   { _isTopTup ->
                                                                   (case (_isTopTup) of
                                                                    { _errorExprOisTopTup ->
                                                                    (case (True) of
                                                                     { _isTopApp ->
                                                                     (case (_isTopApp) of
                                                                      { _errorExprOisTopApp ->
                                                                      (case (_lhsIevalCtx) of
                                                                       { _errorExprOevalCtx ->
                                                                       (case (_lhsIdataGam) of
                                                                        { _errorExprOdataGam ->
                                                                        (case (errorExpr_2 _errorExprOdataGam _errorExprOevalCtx _errorExprOisTopApp _errorExprOisTopTup _errorExprOlamMp _errorExprOlev _errorExprOmodNm _errorExprOopts _errorExprOwhatAbove) of
                                                                         { ( _errorExprIappFunKind,_errorExprIfvS,_errorExprImbFFIApp,_errorExprImbLam,_errorExprImbVar,_errorExprIwhatBelow) ->
                                                                             (case (_errorExprIappFunKind) of
                                                                              { _lhsOappFunKind ->
                                                                              (case (_errorExprIfvS) of
                                                                               { _lhsOfvS ->
                                                                               (case (Nothing) of
                                                                                { _lhsOmbFFIApp ->
                                                                                (case (_errorExprImbLam) of
                                                                                 { _lhsOmbLam ->
                                                                                 (case (_errorExprImbVar) of
                                                                                  { _lhsOmbVar ->
                                                                                  (case (_errorExprIwhatBelow) of
                                                                                   { _lhsOwhatBelow ->
                                                                                   ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                               in  sem_CExpr_CaseAltFail_2)) of
                                        { ( sem_CExpr_2) ->
                                        ( _lhsOgUniq,sem_CExpr_2) }) }) }) }))
                   in  sem_CExpr_CaseAltFail_1)) of
            { ( sem_CExpr_1) ->
            ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) }) })
sem_CExpr_TupDel :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupDel expr_ tag_ nm_ offset_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_TupDel_1 :: T_CExpr_1
                  sem_CExpr_TupDel_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup8 ->
                            (case (__tup8) of
                             { (_exprOgUniq,_) ->
                             (case (expr_) of
                              { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                  (case (expr_1 _exprOgUniq) of
                                   { ( _exprIgUniq,expr_2) ->
                                       (case (_exprIgUniq) of
                                        { _offsetOgUniq ->
                                        (case (offset_) of
                                         { ( _offsetIgathLamMp,_offsetIgrLamArgL,offset_1) ->
                                             (case (offset_1 _offsetOgUniq) of
                                              { ( _offsetIgUniq,offset_2) ->
                                                  (case (_offsetIgUniq) of
                                                   { _lhsOgUniq ->
                                                   (case ((let sem_CExpr_TupDel_2 :: T_CExpr_2
                                                               sem_CExpr_TupDel_2 =
                                                                   (\ _lhsIdataGam
                                                                      _lhsIevalCtx
                                                                      _lhsIisTopApp
                                                                      _lhsIisTopTup
                                                                      _lhsIlamMp
                                                                      _lhsIlev
                                                                      _lhsImodNm
                                                                      _lhsIopts
                                                                      _lhsIwhatAbove ->
                                                                        (case (AppFunKind_NoApp) of
                                                                         { _lhsOappFunKind ->
                                                                         (case (ExprIsOther) of
                                                                          { _whatAbove ->
                                                                          (case (_whatAbove) of
                                                                           { _offsetOwhatAbove ->
                                                                           (case (_lhsIopts) of
                                                                            { _offsetOopts ->
                                                                            (case (_lhsImodNm) of
                                                                             { _offsetOmodNm ->
                                                                             (case (_lhsIlev) of
                                                                              { _offsetOlev ->
                                                                              (case (_lhsIlamMp) of
                                                                               { _offsetOlamMp ->
                                                                               (case (True) of
                                                                                { _isTopTup ->
                                                                                (case (_isTopTup) of
                                                                                 { _offsetOisTopTup ->
                                                                                 (case (True) of
                                                                                  { _isTopApp ->
                                                                                  (case (_isTopApp) of
                                                                                   { _offsetOisTopApp ->
                                                                                   (case (_lhsIevalCtx) of
                                                                                    { _offsetOevalCtx ->
                                                                                    (case (_lhsIdataGam) of
                                                                                     { _offsetOdataGam ->
                                                                                     (case (offset_2 _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlamMp _offsetOlev _offsetOmodNm _offsetOopts _offsetOwhatAbove) of
                                                                                      { ( _offsetIappFunKind,_offsetIfvS,_offsetImbFFIApp,_offsetImbLam,_offsetImbVar,_offsetIwhatBelow) ->
                                                                                          (case (_whatAbove) of
                                                                                           { _exprOwhatAbove ->
                                                                                           (case (_lhsIopts) of
                                                                                            { _exprOopts ->
                                                                                            (case (_lhsImodNm) of
                                                                                             { _exprOmodNm ->
                                                                                             (case (_lhsIlev) of
                                                                                              { _exprOlev ->
                                                                                              (case (_lhsIlamMp) of
                                                                                               { _exprOlamMp ->
                                                                                               (case (_isTopApp) of
                                                                                                { _exprOisTopApp ->
                                                                                                (case (_lhsIevalCtx) of
                                                                                                 { _exprOevalCtx ->
                                                                                                 (case (_lhsIdataGam) of
                                                                                                  { _exprOdataGam ->
                                                                                                  (case (False) of
                                                                                                   { _exprOisTopTup ->
                                                                                                   (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                                                    { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                                                        (case (_exprIfvS `Set.union` _offsetIfvS) of
                                                                                                         { _lhsOfvS ->
                                                                                                         (case (Nothing) of
                                                                                                          { _lhsOmbFFIApp ->
                                                                                                          (case (Nothing) of
                                                                                                           { _lhsOmbLam ->
                                                                                                           (case (Nothing) of
                                                                                                            { _lhsOmbVar ->
                                                                                                            (case (ExprIsOther) of
                                                                                                             { _whatBelow ->
                                                                                                             (case (_whatBelow) of
                                                                                                              { _lhsOwhatBelow ->
                                                                                                              ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                           in  sem_CExpr_TupDel_2)) of
                                                    { ( sem_CExpr_2) ->
                                                    ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }) }) }) }))
              in  sem_CExpr_TupDel_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_TupIns :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupIns expr_ tag_ nm_ offset_ fldExpr_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_TupIns_1 :: T_CExpr_1
                  sem_CExpr_TupIns_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup9 ->
                            (case (__tup9) of
                             { (_exprOgUniq,_) ->
                             (case (expr_) of
                              { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                  (case (expr_1 _exprOgUniq) of
                                   { ( _exprIgUniq,expr_2) ->
                                       (case (_exprIgUniq) of
                                        { _offsetOgUniq ->
                                        (case (offset_) of
                                         { ( _offsetIgathLamMp,_offsetIgrLamArgL,offset_1) ->
                                             (case (offset_1 _offsetOgUniq) of
                                              { ( _offsetIgUniq,offset_2) ->
                                                  (case (_offsetIgUniq) of
                                                   { _fldExprOgUniq ->
                                                   (case (fldExpr_) of
                                                    { ( _fldExprIgathLamMp,_fldExprIgrLamArgL,fldExpr_1) ->
                                                        (case (fldExpr_1 _fldExprOgUniq) of
                                                         { ( _fldExprIgUniq,fldExpr_2) ->
                                                             (case (_fldExprIgUniq) of
                                                              { _lhsOgUniq ->
                                                              (case ((let sem_CExpr_TupIns_2 :: T_CExpr_2
                                                                          sem_CExpr_TupIns_2 =
                                                                              (\ _lhsIdataGam
                                                                                 _lhsIevalCtx
                                                                                 _lhsIisTopApp
                                                                                 _lhsIisTopTup
                                                                                 _lhsIlamMp
                                                                                 _lhsIlev
                                                                                 _lhsImodNm
                                                                                 _lhsIopts
                                                                                 _lhsIwhatAbove ->
                                                                                   (case (AppFunKind_NoApp) of
                                                                                    { _lhsOappFunKind ->
                                                                                    (case (ExprIsOther) of
                                                                                     { _whatAbove ->
                                                                                     (case (_whatAbove) of
                                                                                      { _fldExprOwhatAbove ->
                                                                                      (case (_lhsIopts) of
                                                                                       { _fldExprOopts ->
                                                                                       (case (_lhsImodNm) of
                                                                                        { _fldExprOmodNm ->
                                                                                        (case (_lhsIlev) of
                                                                                         { _fldExprOlev ->
                                                                                         (case (_lhsIlamMp) of
                                                                                          { _fldExprOlamMp ->
                                                                                          (case (True) of
                                                                                           { _isTopTup ->
                                                                                           (case (_isTopTup) of
                                                                                            { _fldExprOisTopTup ->
                                                                                            (case (True) of
                                                                                             { _isTopApp ->
                                                                                             (case (_isTopApp) of
                                                                                              { _fldExprOisTopApp ->
                                                                                              (case (_lhsIevalCtx) of
                                                                                               { _fldExprOevalCtx ->
                                                                                               (case (_lhsIdataGam) of
                                                                                                { _fldExprOdataGam ->
                                                                                                (case (fldExpr_2 _fldExprOdataGam _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlamMp _fldExprOlev _fldExprOmodNm _fldExprOopts _fldExprOwhatAbove) of
                                                                                                 { ( _fldExprIappFunKind,_fldExprIfvS,_fldExprImbFFIApp,_fldExprImbLam,_fldExprImbVar,_fldExprIwhatBelow) ->
                                                                                                     (case (_whatAbove) of
                                                                                                      { _offsetOwhatAbove ->
                                                                                                      (case (_lhsIopts) of
                                                                                                       { _offsetOopts ->
                                                                                                       (case (_lhsImodNm) of
                                                                                                        { _offsetOmodNm ->
                                                                                                        (case (_lhsIlev) of
                                                                                                         { _offsetOlev ->
                                                                                                         (case (_lhsIlamMp) of
                                                                                                          { _offsetOlamMp ->
                                                                                                          (case (_isTopTup) of
                                                                                                           { _offsetOisTopTup ->
                                                                                                           (case (_isTopApp) of
                                                                                                            { _offsetOisTopApp ->
                                                                                                            (case (_lhsIevalCtx) of
                                                                                                             { _offsetOevalCtx ->
                                                                                                             (case (_lhsIdataGam) of
                                                                                                              { _offsetOdataGam ->
                                                                                                              (case (offset_2 _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlamMp _offsetOlev _offsetOmodNm _offsetOopts _offsetOwhatAbove) of
                                                                                                               { ( _offsetIappFunKind,_offsetIfvS,_offsetImbFFIApp,_offsetImbLam,_offsetImbVar,_offsetIwhatBelow) ->
                                                                                                                   (case (_whatAbove) of
                                                                                                                    { _exprOwhatAbove ->
                                                                                                                    (case (_lhsIopts) of
                                                                                                                     { _exprOopts ->
                                                                                                                     (case (_lhsImodNm) of
                                                                                                                      { _exprOmodNm ->
                                                                                                                      (case (_lhsIlev) of
                                                                                                                       { _exprOlev ->
                                                                                                                       (case (_lhsIlamMp) of
                                                                                                                        { _exprOlamMp ->
                                                                                                                        (case (_isTopApp) of
                                                                                                                         { _exprOisTopApp ->
                                                                                                                         (case (_lhsIevalCtx) of
                                                                                                                          { _exprOevalCtx ->
                                                                                                                          (case (_lhsIdataGam) of
                                                                                                                           { _exprOdataGam ->
                                                                                                                           (case (False) of
                                                                                                                            { _exprOisTopTup ->
                                                                                                                            (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                                                                             { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                                                                                 (case (_exprIfvS `Set.union` _offsetIfvS `Set.union` _fldExprIfvS) of
                                                                                                                                  { _lhsOfvS ->
                                                                                                                                  (case (Nothing) of
                                                                                                                                   { _lhsOmbFFIApp ->
                                                                                                                                   (case (Nothing) of
                                                                                                                                    { _lhsOmbLam ->
                                                                                                                                    (case (Nothing) of
                                                                                                                                     { _lhsOmbVar ->
                                                                                                                                     (case (ExprIsOther) of
                                                                                                                                      { _whatBelow ->
                                                                                                                                      (case (_whatBelow) of
                                                                                                                                       { _lhsOwhatBelow ->
                                                                                                                                       ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                                      in  sem_CExpr_TupIns_2)) of
                                                               { ( sem_CExpr_2) ->
                                                               ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }) }) }) }) }) }) }))
              in  sem_CExpr_TupIns_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_TupUpd :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupUpd expr_ tag_ nm_ offset_ fldExpr_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_TupUpd_1 :: T_CExpr_1
                  sem_CExpr_TupUpd_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup10 ->
                            (case (__tup10) of
                             { (_exprOgUniq,_) ->
                             (case (expr_) of
                              { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
                                  (case (expr_1 _exprOgUniq) of
                                   { ( _exprIgUniq,expr_2) ->
                                       (case (_exprIgUniq) of
                                        { _offsetOgUniq ->
                                        (case (offset_) of
                                         { ( _offsetIgathLamMp,_offsetIgrLamArgL,offset_1) ->
                                             (case (offset_1 _offsetOgUniq) of
                                              { ( _offsetIgUniq,offset_2) ->
                                                  (case (_offsetIgUniq) of
                                                   { _fldExprOgUniq ->
                                                   (case (fldExpr_) of
                                                    { ( _fldExprIgathLamMp,_fldExprIgrLamArgL,fldExpr_1) ->
                                                        (case (fldExpr_1 _fldExprOgUniq) of
                                                         { ( _fldExprIgUniq,fldExpr_2) ->
                                                             (case (_fldExprIgUniq) of
                                                              { _lhsOgUniq ->
                                                              (case ((let sem_CExpr_TupUpd_2 :: T_CExpr_2
                                                                          sem_CExpr_TupUpd_2 =
                                                                              (\ _lhsIdataGam
                                                                                 _lhsIevalCtx
                                                                                 _lhsIisTopApp
                                                                                 _lhsIisTopTup
                                                                                 _lhsIlamMp
                                                                                 _lhsIlev
                                                                                 _lhsImodNm
                                                                                 _lhsIopts
                                                                                 _lhsIwhatAbove ->
                                                                                   (case (AppFunKind_NoApp) of
                                                                                    { _lhsOappFunKind ->
                                                                                    (case (ExprIsOther) of
                                                                                     { _whatAbove ->
                                                                                     (case (_whatAbove) of
                                                                                      { _fldExprOwhatAbove ->
                                                                                      (case (_lhsIopts) of
                                                                                       { _fldExprOopts ->
                                                                                       (case (_lhsImodNm) of
                                                                                        { _fldExprOmodNm ->
                                                                                        (case (_lhsIlev) of
                                                                                         { _fldExprOlev ->
                                                                                         (case (_lhsIlamMp) of
                                                                                          { _fldExprOlamMp ->
                                                                                          (case (True) of
                                                                                           { _isTopTup ->
                                                                                           (case (_isTopTup) of
                                                                                            { _fldExprOisTopTup ->
                                                                                            (case (True) of
                                                                                             { _isTopApp ->
                                                                                             (case (_isTopApp) of
                                                                                              { _fldExprOisTopApp ->
                                                                                              (case (_lhsIevalCtx) of
                                                                                               { _fldExprOevalCtx ->
                                                                                               (case (_lhsIdataGam) of
                                                                                                { _fldExprOdataGam ->
                                                                                                (case (fldExpr_2 _fldExprOdataGam _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlamMp _fldExprOlev _fldExprOmodNm _fldExprOopts _fldExprOwhatAbove) of
                                                                                                 { ( _fldExprIappFunKind,_fldExprIfvS,_fldExprImbFFIApp,_fldExprImbLam,_fldExprImbVar,_fldExprIwhatBelow) ->
                                                                                                     (case (_whatAbove) of
                                                                                                      { _offsetOwhatAbove ->
                                                                                                      (case (_lhsIopts) of
                                                                                                       { _offsetOopts ->
                                                                                                       (case (_lhsImodNm) of
                                                                                                        { _offsetOmodNm ->
                                                                                                        (case (_lhsIlev) of
                                                                                                         { _offsetOlev ->
                                                                                                         (case (_lhsIlamMp) of
                                                                                                          { _offsetOlamMp ->
                                                                                                          (case (_isTopTup) of
                                                                                                           { _offsetOisTopTup ->
                                                                                                           (case (_isTopApp) of
                                                                                                            { _offsetOisTopApp ->
                                                                                                            (case (_lhsIevalCtx) of
                                                                                                             { _offsetOevalCtx ->
                                                                                                             (case (_lhsIdataGam) of
                                                                                                              { _offsetOdataGam ->
                                                                                                              (case (offset_2 _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlamMp _offsetOlev _offsetOmodNm _offsetOopts _offsetOwhatAbove) of
                                                                                                               { ( _offsetIappFunKind,_offsetIfvS,_offsetImbFFIApp,_offsetImbLam,_offsetImbVar,_offsetIwhatBelow) ->
                                                                                                                   (case (_whatAbove) of
                                                                                                                    { _exprOwhatAbove ->
                                                                                                                    (case (_lhsIopts) of
                                                                                                                     { _exprOopts ->
                                                                                                                     (case (_lhsImodNm) of
                                                                                                                      { _exprOmodNm ->
                                                                                                                      (case (_lhsIlev) of
                                                                                                                       { _exprOlev ->
                                                                                                                       (case (_lhsIlamMp) of
                                                                                                                        { _exprOlamMp ->
                                                                                                                        (case (_isTopApp) of
                                                                                                                         { _exprOisTopApp ->
                                                                                                                         (case (_lhsIevalCtx) of
                                                                                                                          { _exprOevalCtx ->
                                                                                                                          (case (_lhsIdataGam) of
                                                                                                                           { _exprOdataGam ->
                                                                                                                           (case (False) of
                                                                                                                            { _exprOisTopTup ->
                                                                                                                            (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                                                                             { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                                                                                 (case (_exprIfvS `Set.union` _offsetIfvS `Set.union` _fldExprIfvS) of
                                                                                                                                  { _lhsOfvS ->
                                                                                                                                  (case (Nothing) of
                                                                                                                                   { _lhsOmbFFIApp ->
                                                                                                                                   (case (Nothing) of
                                                                                                                                    { _lhsOmbLam ->
                                                                                                                                    (case (Nothing) of
                                                                                                                                     { _lhsOmbVar ->
                                                                                                                                     (case (ExprIsOther) of
                                                                                                                                      { _whatBelow ->
                                                                                                                                      (case (_whatBelow) of
                                                                                                                                       { _lhsOwhatBelow ->
                                                                                                                                       ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                                      in  sem_CExpr_TupUpd_2)) of
                                                               { ( sem_CExpr_2) ->
                                                               ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }) }) }) }) }) }) }))
              in  sem_CExpr_TupUpd_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_FFI :: FFIWay ->
                 String ->
                 ForeignEnt ->
                 Ty ->
                 T_CExpr
sem_CExpr_FFI callconv_ safety_ impEnt_ ty_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_FFI_1 :: T_CExpr_1
                  sem_CExpr_FFI_1 =
                      (\ _lhsIgUniq ->
                           (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
                            { __tup11 ->
                            (case (__tup11) of
                             { (_lhsOgUniq,_) ->
                             (case ((let sem_CExpr_FFI_2 :: T_CExpr_2
                                         sem_CExpr_FFI_2 =
                                             (\ _lhsIdataGam
                                                _lhsIevalCtx
                                                _lhsIisTopApp
                                                _lhsIisTopTup
                                                _lhsIlamMp
                                                _lhsIlev
                                                _lhsImodNm
                                                _lhsIopts
                                                _lhsIwhatAbove ->
                                                  (case (AppFunKind_FFI) of
                                                   { _lhsOappFunKind ->
                                                   (case (Set.empty) of
                                                    { _lhsOfvS ->
                                                    (case (foreignEntExtract impEnt_) of
                                                     { _foreignEntInfo ->
                                                     (case (maybe Nothing lookupPrimNeedsEval $ forextractMbEnt _foreignEntInfo) of
                                                      { _mbPrimNeedEval ->
                                                      (case (maybe False primResNeedEval _mbPrimNeedEval) of
                                                       { _primResNeedsEval ->
                                                       (case (appUnArr ty_) of
                                                        { _argTyLresTy ->
                                                        (case (snd _argTyLresTy) of
                                                         { _resTy ->
                                                         (case (fst _argTyLresTy) of
                                                          { _argTyL ->
                                                          (case (Just ( _resTy
                                                                      , _primResNeedsEval
                                                                      , callconv_
                                                                      , impEnt_
                                                                      , _argTyL
                                                                      )) of
                                                           { _lhsOmbFFIApp ->
                                                           (case (Nothing) of
                                                            { _lhsOmbLam ->
                                                            (case (Nothing) of
                                                             { _lhsOmbVar ->
                                                             (case (ExprIsFFI) of
                                                              { _whatBelow ->
                                                              (case (_whatBelow) of
                                                               { _lhsOwhatBelow ->
                                                               ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                     in  sem_CExpr_FFI_2)) of
                              { ( sem_CExpr_2) ->
                              ( _lhsOgUniq,sem_CExpr_2) }) }) }))
              in  sem_CExpr_FFI_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Dbg :: String ->
                 T_CExpr
sem_CExpr_Dbg info_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Dbg_1 :: T_CExpr_1
                  sem_CExpr_Dbg_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _lhsOgUniq ->
                            (case ((let sem_CExpr_Dbg_2 :: T_CExpr_2
                                        sem_CExpr_Dbg_2 =
                                            (\ _lhsIdataGam
                                               _lhsIevalCtx
                                               _lhsIisTopApp
                                               _lhsIisTopTup
                                               _lhsIlamMp
                                               _lhsIlev
                                               _lhsImodNm
                                               _lhsIopts
                                               _lhsIwhatAbove ->
                                                 (case (AppFunKind_NoApp) of
                                                  { _lhsOappFunKind ->
                                                  (case (Set.empty) of
                                                   { _lhsOfvS ->
                                                   (case (Nothing) of
                                                    { _lhsOmbFFIApp ->
                                                    (case (Nothing) of
                                                     { _lhsOmbLam ->
                                                     (case (Nothing) of
                                                      { _lhsOmbVar ->
                                                      (case (ExprIsOther) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                    in  sem_CExpr_Dbg_2)) of
                             { ( sem_CExpr_2) ->
                             ( _lhsOgUniq,sem_CExpr_2) }) }))
              in  sem_CExpr_Dbg_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Hole :: UID ->
                  T_CExpr
sem_CExpr_Hole uid_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_Hole_1 :: T_CExpr_1
                  sem_CExpr_Hole_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _lhsOgUniq ->
                            (case ((let sem_CExpr_Hole_2 :: T_CExpr_2
                                        sem_CExpr_Hole_2 =
                                            (\ _lhsIdataGam
                                               _lhsIevalCtx
                                               _lhsIisTopApp
                                               _lhsIisTopTup
                                               _lhsIlamMp
                                               _lhsIlev
                                               _lhsImodNm
                                               _lhsIopts
                                               _lhsIwhatAbove ->
                                                 (case (AppFunKind_NoApp) of
                                                  { _lhsOappFunKind ->
                                                  (case (Set.empty) of
                                                   { _lhsOfvS ->
                                                   (case (Nothing) of
                                                    { _lhsOmbFFIApp ->
                                                    (case (Nothing) of
                                                     { _lhsOmbLam ->
                                                     (case (Nothing) of
                                                      { _lhsOmbVar ->
                                                      (case (ExprIsOther) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                    in  sem_CExpr_Hole_2)) of
                             { ( sem_CExpr_2) ->
                             ( _lhsOgUniq,sem_CExpr_2) }) }))
              in  sem_CExpr_Hole_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_HoleLet :: UID ->
                     T_CExpr ->
                     T_CExpr
sem_CExpr_HoleLet bindsUid_ body_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_HoleLet_1 :: T_CExpr_1
                  sem_CExpr_HoleLet_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _bodyOgUniq ->
                            (case (body_) of
                             { ( _bodyIgathLamMp,_bodyIgrLamArgL,body_1) ->
                                 (case (body_1 _bodyOgUniq) of
                                  { ( _bodyIgUniq,body_2) ->
                                      (case (_bodyIgUniq) of
                                       { _lhsOgUniq ->
                                       (case ((let sem_CExpr_HoleLet_2 :: T_CExpr_2
                                                   sem_CExpr_HoleLet_2 =
                                                       (\ _lhsIdataGam
                                                          _lhsIevalCtx
                                                          _lhsIisTopApp
                                                          _lhsIisTopTup
                                                          _lhsIlamMp
                                                          _lhsIlev
                                                          _lhsImodNm
                                                          _lhsIopts
                                                          _lhsIwhatAbove ->
                                                            (case (AppFunKind_NoApp) of
                                                             { _lhsOappFunKind ->
                                                             (case (ExprIsOther) of
                                                              { _whatAbove ->
                                                              (case (_whatAbove) of
                                                               { _bodyOwhatAbove ->
                                                               (case (_lhsIopts) of
                                                                { _bodyOopts ->
                                                                (case (_lhsImodNm) of
                                                                 { _bodyOmodNm ->
                                                                 (case (_lhsIlev) of
                                                                  { _bodyOlev ->
                                                                  (case (_lhsIlamMp) of
                                                                   { _bodyOlamMp ->
                                                                   (case (True) of
                                                                    { _isTopTup ->
                                                                    (case (_isTopTup) of
                                                                     { _bodyOisTopTup ->
                                                                     (case (True) of
                                                                      { _isTopApp ->
                                                                      (case (_isTopApp) of
                                                                       { _bodyOisTopApp ->
                                                                       (case (_lhsIevalCtx) of
                                                                        { _bodyOevalCtx ->
                                                                        (case (_lhsIdataGam) of
                                                                         { _bodyOdataGam ->
                                                                         (case (body_2 _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlamMp _bodyOlev _bodyOmodNm _bodyOopts _bodyOwhatAbove) of
                                                                          { ( _bodyIappFunKind,_bodyIfvS,_bodyImbFFIApp,_bodyImbLam,_bodyImbVar,_bodyIwhatBelow) ->
                                                                              (case (_bodyIfvS) of
                                                                               { _lhsOfvS ->
                                                                               (case (Nothing) of
                                                                                { _lhsOmbFFIApp ->
                                                                                (case (Nothing) of
                                                                                 { _lhsOmbLam ->
                                                                                 (case (Nothing) of
                                                                                  { _lhsOmbVar ->
                                                                                  (case (ExprIsOther) of
                                                                                   { _whatBelow ->
                                                                                   (case (_whatBelow) of
                                                                                    { _lhsOwhatBelow ->
                                                                                    ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                               in  sem_CExpr_HoleLet_2)) of
                                        { ( sem_CExpr_2) ->
                                        ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }))
              in  sem_CExpr_HoleLet_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_CoeArg :: T_CExpr
sem_CExpr_CoeArg =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_CoeArg_1 :: T_CExpr_1
                  sem_CExpr_CoeArg_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _lhsOgUniq ->
                            (case ((let sem_CExpr_CoeArg_2 :: T_CExpr_2
                                        sem_CExpr_CoeArg_2 =
                                            (\ _lhsIdataGam
                                               _lhsIevalCtx
                                               _lhsIisTopApp
                                               _lhsIisTopTup
                                               _lhsIlamMp
                                               _lhsIlev
                                               _lhsImodNm
                                               _lhsIopts
                                               _lhsIwhatAbove ->
                                                 (case (AppFunKind_NoApp) of
                                                  { _lhsOappFunKind ->
                                                  (case (Set.empty) of
                                                   { _lhsOfvS ->
                                                   (case (Nothing) of
                                                    { _lhsOmbFFIApp ->
                                                    (case (Nothing) of
                                                     { _lhsOmbLam ->
                                                     (case (Nothing) of
                                                      { _lhsOmbVar ->
                                                      (case (ExprIsOther) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }))
                                    in  sem_CExpr_CoeArg_2)) of
                             { ( sem_CExpr_2) ->
                             ( _lhsOgUniq,sem_CExpr_2) }) }))
              in  sem_CExpr_CoeArg_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_ImplsApp :: T_CExpr ->
                      ImplsVarId ->
                      T_CExpr
sem_CExpr_ImplsApp func_ uid_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_ImplsApp_1 :: T_CExpr_1
                  sem_CExpr_ImplsApp_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _funcOgUniq ->
                            (case (func_) of
                             { ( _funcIgathLamMp,_funcIgrLamArgL,func_1) ->
                                 (case (func_1 _funcOgUniq) of
                                  { ( _funcIgUniq,func_2) ->
                                      (case (_funcIgUniq) of
                                       { _lhsOgUniq ->
                                       (case ((let sem_CExpr_ImplsApp_2 :: T_CExpr_2
                                                   sem_CExpr_ImplsApp_2 =
                                                       (\ _lhsIdataGam
                                                          _lhsIevalCtx
                                                          _lhsIisTopApp
                                                          _lhsIisTopTup
                                                          _lhsIlamMp
                                                          _lhsIlev
                                                          _lhsImodNm
                                                          _lhsIopts
                                                          _lhsIwhatAbove ->
                                                            (case (AppFunKind_NoApp) of
                                                             { _lhsOappFunKind ->
                                                             (case (ExprIsOther) of
                                                              { _whatAbove ->
                                                              (case (_whatAbove) of
                                                               { _funcOwhatAbove ->
                                                               (case (_lhsIopts) of
                                                                { _funcOopts ->
                                                                (case (_lhsImodNm) of
                                                                 { _funcOmodNm ->
                                                                 (case (_lhsIlev) of
                                                                  { _funcOlev ->
                                                                  (case (_lhsIlamMp) of
                                                                   { _funcOlamMp ->
                                                                   (case (True) of
                                                                    { _isTopTup ->
                                                                    (case (_isTopTup) of
                                                                     { _funcOisTopTup ->
                                                                     (case (True) of
                                                                      { _isTopApp ->
                                                                      (case (_isTopApp) of
                                                                       { _funcOisTopApp ->
                                                                       (case (_lhsIevalCtx) of
                                                                        { _funcOevalCtx ->
                                                                        (case (_lhsIdataGam) of
                                                                         { _funcOdataGam ->
                                                                         (case (func_2 _funcOdataGam _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlamMp _funcOlev _funcOmodNm _funcOopts _funcOwhatAbove) of
                                                                          { ( _funcIappFunKind,_funcIfvS,_funcImbFFIApp,_funcImbLam,_funcImbVar,_funcIwhatBelow) ->
                                                                              (case (_funcIfvS) of
                                                                               { _lhsOfvS ->
                                                                               (case (Nothing) of
                                                                                { _lhsOmbFFIApp ->
                                                                                (case (Nothing) of
                                                                                 { _lhsOmbLam ->
                                                                                 (case (Nothing) of
                                                                                  { _lhsOmbVar ->
                                                                                  (case (ExprIsOther) of
                                                                                   { _whatBelow ->
                                                                                   (case (_whatBelow) of
                                                                                    { _lhsOwhatBelow ->
                                                                                    ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                               in  sem_CExpr_ImplsApp_2)) of
                                        { ( sem_CExpr_2) ->
                                        ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }))
              in  sem_CExpr_ImplsApp_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_ImplsLam :: ImplsVarId ->
                      T_CExpr ->
                      T_CExpr
sem_CExpr_ImplsLam uid_ body_ =
    (case (Map.empty) of
     { _lhsOgathLamMp ->
     (case ([]) of
      { _lhsOgrLamArgL ->
      (case ((let sem_CExpr_ImplsLam_1 :: T_CExpr_1
                  sem_CExpr_ImplsLam_1 =
                      (\ _lhsIgUniq ->
                           (case (_lhsIgUniq) of
                            { _bodyOgUniq ->
                            (case (body_) of
                             { ( _bodyIgathLamMp,_bodyIgrLamArgL,body_1) ->
                                 (case (body_1 _bodyOgUniq) of
                                  { ( _bodyIgUniq,body_2) ->
                                      (case (_bodyIgUniq) of
                                       { _lhsOgUniq ->
                                       (case ((let sem_CExpr_ImplsLam_2 :: T_CExpr_2
                                                   sem_CExpr_ImplsLam_2 =
                                                       (\ _lhsIdataGam
                                                          _lhsIevalCtx
                                                          _lhsIisTopApp
                                                          _lhsIisTopTup
                                                          _lhsIlamMp
                                                          _lhsIlev
                                                          _lhsImodNm
                                                          _lhsIopts
                                                          _lhsIwhatAbove ->
                                                            (case (AppFunKind_NoApp) of
                                                             { _lhsOappFunKind ->
                                                             (case (ExprIsOther) of
                                                              { _whatAbove ->
                                                              (case (_whatAbove) of
                                                               { _bodyOwhatAbove ->
                                                               (case (_lhsIopts) of
                                                                { _bodyOopts ->
                                                                (case (_lhsImodNm) of
                                                                 { _bodyOmodNm ->
                                                                 (case (_lhsIlev) of
                                                                  { _bodyOlev ->
                                                                  (case (_lhsIlamMp) of
                                                                   { _bodyOlamMp ->
                                                                   (case (True) of
                                                                    { _isTopTup ->
                                                                    (case (_isTopTup) of
                                                                     { _bodyOisTopTup ->
                                                                     (case (True) of
                                                                      { _isTopApp ->
                                                                      (case (_isTopApp) of
                                                                       { _bodyOisTopApp ->
                                                                       (case (_lhsIevalCtx) of
                                                                        { _bodyOevalCtx ->
                                                                        (case (_lhsIdataGam) of
                                                                         { _bodyOdataGam ->
                                                                         (case (body_2 _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlamMp _bodyOlev _bodyOmodNm _bodyOopts _bodyOwhatAbove) of
                                                                          { ( _bodyIappFunKind,_bodyIfvS,_bodyImbFFIApp,_bodyImbLam,_bodyImbVar,_bodyIwhatBelow) ->
                                                                              (case (_bodyIfvS) of
                                                                               { _lhsOfvS ->
                                                                               (case (Nothing) of
                                                                                { _lhsOmbFFIApp ->
                                                                                (case (Nothing) of
                                                                                 { _lhsOmbLam ->
                                                                                 (case (Nothing) of
                                                                                  { _lhsOmbVar ->
                                                                                  (case (ExprIsOther) of
                                                                                   { _whatBelow ->
                                                                                   (case (_whatBelow) of
                                                                                    { _lhsOwhatBelow ->
                                                                                    ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                               in  sem_CExpr_ImplsLam_2)) of
                                        { ( sem_CExpr_2) ->
                                        ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }))
              in  sem_CExpr_ImplsLam_1)) of
       { ( sem_CExpr_1) ->
       ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) })
sem_CExpr_Ann :: T_CExprAnn ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Ann ann_ expr_ =
    (case (expr_) of
     { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
         (case (_exprIgathLamMp) of
          { _lhsOgathLamMp ->
          (case (_exprIgrLamArgL) of
           { _lhsOgrLamArgL ->
           (case ((let sem_CExpr_Ann_1 :: T_CExpr_1
                       sem_CExpr_Ann_1 =
                           (\ _lhsIgUniq ->
                                (case (_lhsIgUniq) of
                                 { _annOgUniq ->
                                 (case (ann_ _annOgUniq) of
                                  { ( _annIgUniq,ann_1) ->
                                      (case (_annIgUniq) of
                                       { _exprOgUniq ->
                                       (case (expr_1 _exprOgUniq) of
                                        { ( _exprIgUniq,expr_2) ->
                                            (case (_exprIgUniq) of
                                             { _lhsOgUniq ->
                                             (case ((let sem_CExpr_Ann_2 :: T_CExpr_2
                                                         sem_CExpr_Ann_2 =
                                                             (\ _lhsIdataGam
                                                                _lhsIevalCtx
                                                                _lhsIisTopApp
                                                                _lhsIisTopTup
                                                                _lhsIlamMp
                                                                _lhsIlev
                                                                _lhsImodNm
                                                                _lhsIopts
                                                                _lhsIwhatAbove ->
                                                                  (case (_lhsIwhatAbove) of
                                                                   { _exprOwhatAbove ->
                                                                   (case (_lhsIopts) of
                                                                    { _exprOopts ->
                                                                    (case (_lhsImodNm) of
                                                                     { _exprOmodNm ->
                                                                     (case (_lhsIlev) of
                                                                      { _exprOlev ->
                                                                      (case (_lhsIlamMp) of
                                                                       { _exprOlamMp ->
                                                                       (case (_lhsIisTopTup) of
                                                                        { _exprOisTopTup ->
                                                                        (case (_lhsIisTopApp) of
                                                                         { _exprOisTopApp ->
                                                                         (case (_lhsIevalCtx) of
                                                                          { _exprOevalCtx ->
                                                                          (case (_lhsIdataGam) of
                                                                           { _exprOdataGam ->
                                                                           (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                                            { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                                                (case (_exprIappFunKind) of
                                                                                 { _lhsOappFunKind ->
                                                                                 (case (_lhsIopts) of
                                                                                  { _annOopts ->
                                                                                  (case (_lhsImodNm) of
                                                                                   { _annOmodNm ->
                                                                                   (case (_lhsIlev) of
                                                                                    { _annOlev ->
                                                                                    (case (_lhsIlamMp) of
                                                                                     { _annOlamMp ->
                                                                                     (case (_lhsIdataGam) of
                                                                                      { _annOdataGam ->
                                                                                      (case (ann_1 _annOdataGam _annOlamMp _annOlev _annOmodNm _annOopts) of
                                                                                       { ( _annIfvS) ->
                                                                                           (case (_annIfvS `Set.union` _exprIfvS) of
                                                                                            { _lhsOfvS ->
                                                                                            (case (_exprImbFFIApp) of
                                                                                             { _lhsOmbFFIApp ->
                                                                                             (case (_exprImbLam) of
                                                                                              { _lhsOmbLam ->
                                                                                              (case (_exprImbVar) of
                                                                                               { _lhsOmbVar ->
                                                                                               (case (_exprIwhatBelow) of
                                                                                                { _lhsOwhatBelow ->
                                                                                                ( _lhsOappFunKind,_lhsOfvS,_lhsOmbFFIApp,_lhsOmbLam,_lhsOmbVar,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                                     in  sem_CExpr_Ann_2)) of
                                              { ( sem_CExpr_2) ->
                                              ( _lhsOgUniq,sem_CExpr_2) }) }) }) }) }) }))
                   in  sem_CExpr_Ann_1)) of
            { ( sem_CExpr_1) ->
            ( _lhsOgathLamMp,_lhsOgrLamArgL,sem_CExpr_1) }) }) }) })
-- CExprAnn ----------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Ty:
         child ty             : {Ty}
      alternative Debug:
         child info           : {String}
-}
-- cata
sem_CExprAnn :: CExprAnn ->
                T_CExprAnn
sem_CExprAnn (CExprAnn_Ty _ty) =
    (sem_CExprAnn_Ty _ty)
sem_CExprAnn (CExprAnn_Debug _info) =
    (sem_CExprAnn_Debug _info)
-- semantic domain
type T_CExprAnn = UID ->
                  ( UID,T_CExprAnn_1)
type T_CExprAnn_1 = DataGam ->
                    LamMp ->
                    Int ->
                    HsName ->
                    EHCOpts ->
                    ( FvS)
sem_CExprAnn_Ty :: Ty ->
                   T_CExprAnn
sem_CExprAnn_Ty ty_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CExprAnn_Ty_1 :: T_CExprAnn_1
                      sem_CExprAnn_Ty_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                ( _lhsOfvS) }))
                  in  sem_CExprAnn_Ty_1)) of
           { ( sem_CExprAnn_1) ->
           ( _lhsOgUniq,sem_CExprAnn_1) }) }))
sem_CExprAnn_Debug :: String ->
                      T_CExprAnn
sem_CExprAnn_Debug info_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CExprAnn_Debug_1 :: T_CExprAnn_1
                      sem_CExprAnn_Debug_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                ( _lhsOfvS) }))
                  in  sem_CExprAnn_Debug_1)) of
           { ( sem_CExprAnn_1) ->
           ( _lhsOgUniq,sem_CExprAnn_1) }) }))
-- CImport -----------------------------------------------------
{-
   alternatives:
      alternative Import:
         child nm             : {HsName}
-}
-- cata
sem_CImport :: CImport ->
               T_CImport
sem_CImport (CImport_Import _nm) =
    (sem_CImport_Import _nm)
-- semantic domain
type T_CImport = ( )
sem_CImport_Import :: HsName ->
                      T_CImport
sem_CImport_Import nm_ =
    ( )
-- CImportL ----------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CImport 
         child tl             : CImportL 
      alternative Nil:
-}
-- 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 = ( )
sem_CImportL_Cons :: T_CImport ->
                     T_CImportL ->
                     T_CImportL
sem_CImportL_Cons hd_ tl_ =
    ( )
sem_CImportL_Nil :: T_CImportL
sem_CImportL_Nil =
    ( )
-- CMetaBind ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Plain:
      alternative Function0:
      alternative Function1:
      alternative Apply0:
-}
-- 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 = DataGam ->
                   LamMp ->
                   Int ->
                   HsName ->
                   EHCOpts ->
                   ( FvS)
sem_CMetaBind_Plain :: T_CMetaBind
sem_CMetaBind_Plain =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaBind_Function0 :: T_CMetaBind
sem_CMetaBind_Function0 =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaBind_Function1 :: T_CMetaBind
sem_CMetaBind_Function1 =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaBind_Apply0 :: T_CMetaBind
sem_CMetaBind_Apply0 =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
-- CMetaVal ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Val:
      alternative Dict:
      alternative DictClass:
         child tracks         : {[Track]}
      alternative DictInstance:
         child tracks         : {[Track]}
      alternative Track:
         child track          : {Track}
-}
-- 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 = DataGam ->
                  LamMp ->
                  Int ->
                  HsName ->
                  EHCOpts ->
                  ( FvS)
sem_CMetaVal_Val :: T_CMetaVal
sem_CMetaVal_Val =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaVal_Dict :: T_CMetaVal
sem_CMetaVal_Dict =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaVal_DictClass :: ([Track]) ->
                          T_CMetaVal
sem_CMetaVal_DictClass tracks_ =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaVal_DictInstance :: ([Track]) ->
                             T_CMetaVal
sem_CMetaVal_DictInstance tracks_ =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
sem_CMetaVal_Track :: Track ->
                      T_CMetaVal
sem_CMetaVal_Track track_ =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (Set.empty) of
          { _lhsOfvS ->
          ( _lhsOfvS) }))
-- CMetas ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attribute:
         fvS                  : FvS
   alternatives:
      alternative Tuple:
         child x1             : CMetaBind 
         child x2             : CMetaVal 
-}
-- cata
sem_CMetas :: CMetas ->
              T_CMetas
sem_CMetas ( x1,x2) =
    (sem_CMetas_Tuple (sem_CMetaBind x1) (sem_CMetaVal x2))
-- semantic domain
type T_CMetas = DataGam ->
                LamMp ->
                Int ->
                HsName ->
                EHCOpts ->
                ( FvS)
sem_CMetas_Tuple :: T_CMetaBind ->
                    T_CMetaVal ->
                    T_CMetas
sem_CMetas_Tuple x1_ x2_ =
    (\ _lhsIdataGam
       _lhsIlamMp
       _lhsIlev
       _lhsImodNm
       _lhsIopts ->
         (case (_lhsIopts) of
          { _x2Oopts ->
          (case (_lhsImodNm) of
           { _x2OmodNm ->
           (case (_lhsIlev) of
            { _x2Olev ->
            (case (_lhsIlamMp) of
             { _x2OlamMp ->
             (case (_lhsIdataGam) of
              { _x2OdataGam ->
              (case (x2_ _x2OdataGam _x2OlamMp _x2Olev _x2OmodNm _x2Oopts) of
               { ( _x2IfvS) ->
                   (case (_lhsIopts) of
                    { _x1Oopts ->
                    (case (_lhsImodNm) of
                     { _x1OmodNm ->
                     (case (_lhsIlev) of
                      { _x1Olev ->
                      (case (_lhsIlamMp) of
                       { _x1OlamMp ->
                       (case (_lhsIdataGam) of
                        { _x1OdataGam ->
                        (case (x1_ _x1OdataGam _x1OlamMp _x1Olev _x1OmodNm _x1Oopts) of
                         { ( _x1IfvS) ->
                             (case (_x1IfvS `Set.union` _x2IfvS) of
                              { _lhsOfvS ->
                              ( _lhsOfvS) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CModule -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         gathLamMp            : LamMp
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         importUsedModules    : ImportUsedModules
         lamMp                : LamMp
         lev                  : Int
         opts                 : EHCOpts
      chained attribute:
         gUniq                : UID
      synthesized attributes:
         fvS                  : FvS
         gathDataGam          : DataGam
   alternatives:
      alternative Mod:
         child moduleNm       : {HsName}
         child exports        : CExportL 
         child imports        : CImportL 
         child declMetas      : CDeclMetaL 
         child expr           : CExpr 
         visit 1:
            local whatAbove   : {WhatExpr}
            local dataGam     : _
-}
-- 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,T_CModule_1)
type T_CModule_1 = DataGam ->
                   UID ->
                   ImportUsedModules ->
                   LamMp ->
                   Int ->
                   EHCOpts ->
                   ( FvS,UID,DataGam)
sem_CModule_Mod :: HsName ->
                   T_CExportL ->
                   T_CImportL ->
                   T_CDeclMetaL ->
                   T_CExpr ->
                   T_CModule
sem_CModule_Mod moduleNm_ exports_ imports_ declMetas_ expr_ =
    (case (expr_) of
     { ( _exprIgathLamMp,_exprIgrLamArgL,expr_1) ->
         (case (_exprIgathLamMp) of
          { _lhsOgathLamMp ->
          (case ((let sem_CModule_Mod_1 :: T_CModule_1
                      sem_CModule_Mod_1 =
                          (\ _lhsIdataGam
                             _lhsIgUniq
                             _lhsIimportUsedModules
                             _lhsIlamMp
                             _lhsIlev
                             _lhsIopts ->
                               (case (_lhsIgUniq) of
                                { _exprOgUniq ->
                                (case (expr_1 _exprOgUniq) of
                                 { ( _exprIgUniq,expr_2) ->
                                     (case (ExprIsOther) of
                                      { _whatAbove ->
                                      (case (_whatAbove) of
                                       { _exprOwhatAbove ->
                                       (case (_lhsIopts) of
                                        { _exprOopts ->
                                        (case (_lhsIlev) of
                                         { _exprOlev ->
                                         (case (_lhsIlamMp) of
                                          { _exprOlamMp ->
                                          (case (declMetas_) of
                                           { ( _declMetasIgathDataGam) ->
                                               (case (_lhsIdataGam `gamUnion` _declMetasIgathDataGam) of
                                                { _dataGam ->
                                                (case (_dataGam) of
                                                 { _exprOdataGam ->
                                                 (case (moduleNm_) of
                                                  { _exprOmodNm ->
                                                  (case (EvalCtx_Eval) of
                                                   { _exprOevalCtx ->
                                                   (case (True) of
                                                    { _exprOisTopTup ->
                                                    (case (True) of
                                                     { _exprOisTopApp ->
                                                     (case (expr_2 _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlamMp _exprOlev _exprOmodNm _exprOopts _exprOwhatAbove) of
                                                      { ( _exprIappFunKind,_exprIfvS,_exprImbFFIApp,_exprImbLam,_exprImbVar,_exprIwhatBelow) ->
                                                          (case (_exprIfvS) of
                                                           { _lhsOfvS ->
                                                           (case (_exprIgUniq) of
                                                            { _lhsOgUniq ->
                                                            (case (_declMetasIgathDataGam) of
                                                             { _lhsOgathDataGam ->
                                                             ( _lhsOfvS,_lhsOgUniq,_lhsOgathDataGam) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                  in  sem_CModule_Mod_1)) of
           { ( sem_CModule_1) ->
           ( _lhsOgathLamMp,sem_CModule_1) }) }) })
-- CPat --------------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fldNmL               : [HsName]
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Var:
         child pnm            : {HsName}
      alternative Con:
         child tag            : {CTag}
         child rest           : CPatRest 
         child binds          : CPatFldL 
         visit 0:
            local _tup12      : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local _tup13      : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local _tup14      : _
      alternative BoolExpr:
         child cexpr          : {CExpr}
-}
-- 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 = UID ->
              ( UID,T_CPat_1)
type T_CPat_1 = DataGam ->
                LamMp ->
                Int ->
                HsName ->
                EHCOpts ->
                ( ([HsName]),FvS,([HsName]))
sem_CPat_Var :: HsName ->
                T_CPat
sem_CPat_Var pnm_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CPat_Var_1 :: T_CPat_1
                      sem_CPat_Var_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case ([]) of
                                { _lhsOfldNmL ->
                                (case (Set.empty) of
                                 { _lhsOfvS ->
                                 (case ([pnm_]) of
                                  { _lhsOnmL ->
                                  ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }))
                  in  sem_CPat_Var_1)) of
           { ( sem_CPat_1) ->
           ( _lhsOgUniq,sem_CPat_1) }) }))
sem_CPat_Con :: CTag ->
                T_CPatRest ->
                T_CPatFldL ->
                T_CPat
sem_CPat_Con tag_ rest_ binds_ =
    (\ _lhsIgUniq ->
         (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
          { __tup12 ->
          (case (__tup12) of
           { (_restOgUniq,_) ->
           (case (rest_ _restOgUniq) of
            { ( _restIgUniq,rest_1) ->
                (case (_restIgUniq) of
                 { _bindsOgUniq ->
                 (case (binds_ _bindsOgUniq) of
                  { ( _bindsIgUniq,binds_1) ->
                      (case (_bindsIgUniq) of
                       { _lhsOgUniq ->
                       (case ((let sem_CPat_Con_1 :: T_CPat_1
                                   sem_CPat_Con_1 =
                                       (\ _lhsIdataGam
                                          _lhsIlamMp
                                          _lhsIlev
                                          _lhsImodNm
                                          _lhsIopts ->
                                            (case (_lhsIopts) of
                                             { _bindsOopts ->
                                             (case (_lhsImodNm) of
                                              { _bindsOmodNm ->
                                              (case (_lhsIlev) of
                                               { _bindsOlev ->
                                               (case (_lhsIlamMp) of
                                                { _bindsOlamMp ->
                                                (case (_lhsIdataGam) of
                                                 { _bindsOdataGam ->
                                                 (case (binds_1 _bindsOdataGam _bindsOlamMp _bindsOlev _bindsOmodNm _bindsOopts) of
                                                  { ( _bindsIfldNmL,_bindsIfvS,_bindsInmL) ->
                                                      (case (_bindsIfldNmL) of
                                                       { _lhsOfldNmL ->
                                                       (case (_lhsIopts) of
                                                        { _restOopts ->
                                                        (case (_lhsImodNm) of
                                                         { _restOmodNm ->
                                                         (case (_lhsIlev) of
                                                          { _restOlev ->
                                                          (case (_lhsIlamMp) of
                                                           { _restOlamMp ->
                                                           (case (_lhsIdataGam) of
                                                            { _restOdataGam ->
                                                            (case (rest_1 _restOdataGam _restOlamMp _restOlev _restOmodNm _restOopts) of
                                                             { ( _restIfvS,_restInmL) ->
                                                                 (case (_restIfvS `Set.union` _bindsIfvS) of
                                                                  { _lhsOfvS ->
                                                                  (case (_restInmL ++ _bindsInmL) of
                                                                   { _lhsOnmL ->
                                                                   ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                               in  sem_CPat_Con_1)) of
                        { ( sem_CPat_1) ->
                        ( _lhsOgUniq,sem_CPat_1) }) }) }) }) }) }) }))
sem_CPat_Int :: Int ->
                T_CPat
sem_CPat_Int int_ =
    (\ _lhsIgUniq ->
         (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
          { __tup13 ->
          (case (__tup13) of
           { (_lhsOgUniq,_) ->
           (case ((let sem_CPat_Int_1 :: T_CPat_1
                       sem_CPat_Int_1 =
                           (\ _lhsIdataGam
                              _lhsIlamMp
                              _lhsIlev
                              _lhsImodNm
                              _lhsIopts ->
                                (case ([]) of
                                 { _lhsOfldNmL ->
                                 (case (Set.empty) of
                                  { _lhsOfvS ->
                                  (case ([]) of
                                   { _lhsOnmL ->
                                   ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }))
                   in  sem_CPat_Int_1)) of
            { ( sem_CPat_1) ->
            ( _lhsOgUniq,sem_CPat_1) }) }) }))
sem_CPat_Char :: Char ->
                 T_CPat
sem_CPat_Char char_ =
    (\ _lhsIgUniq ->
         (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> (__cont,lUniq)} )) of
          { __tup14 ->
          (case (__tup14) of
           { (_lhsOgUniq,_) ->
           (case ((let sem_CPat_Char_1 :: T_CPat_1
                       sem_CPat_Char_1 =
                           (\ _lhsIdataGam
                              _lhsIlamMp
                              _lhsIlev
                              _lhsImodNm
                              _lhsIopts ->
                                (case ([]) of
                                 { _lhsOfldNmL ->
                                 (case (Set.empty) of
                                  { _lhsOfvS ->
                                  (case ([]) of
                                   { _lhsOnmL ->
                                   ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }))
                   in  sem_CPat_Char_1)) of
            { ( sem_CPat_1) ->
            ( _lhsOgUniq,sem_CPat_1) }) }) }))
sem_CPat_BoolExpr :: CExpr ->
                     T_CPat
sem_CPat_BoolExpr cexpr_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CPat_BoolExpr_1 :: T_CPat_1
                      sem_CPat_BoolExpr_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case ([]) of
                                { _lhsOfldNmL ->
                                (case (Set.empty) of
                                 { _lhsOfvS ->
                                 (case ([]) of
                                  { _lhsOnmL ->
                                  ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }))
                  in  sem_CPat_BoolExpr_1)) of
           { ( sem_CPat_1) ->
           ( _lhsOgUniq,sem_CPat_1) }) }))
-- CPatFld -----------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fldNmL               : [HsName]
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Fld:
         child lbl            : {HsName}
         child offset         : CExpr 
         child bind           : CBind 
         child fldAnns        : CBindAnnL 
         visit 1:
            local fldNm       : _
            local whatAbove   : {WhatExpr}
-}
-- 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 = UID ->
                 ( UID,T_CPatFld_1)
type T_CPatFld_1 = DataGam ->
                   LamMp ->
                   Int ->
                   HsName ->
                   EHCOpts ->
                   ( ([HsName]),FvS,([HsName]))
sem_CPatFld_Fld :: HsName ->
                   T_CExpr ->
                   T_CBind ->
                   T_CBindAnnL ->
                   T_CPatFld
sem_CPatFld_Fld lbl_ offset_ bind_ fldAnns_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _offsetOgUniq ->
          (case (offset_) of
           { ( _offsetIgathLamMp,_offsetIgrLamArgL,offset_1) ->
               (case (offset_1 _offsetOgUniq) of
                { ( _offsetIgUniq,offset_2) ->
                    (case (_offsetIgUniq) of
                     { _bindOgUniq ->
                     (case (bind_) of
                      { ( _bindIbindLamMp,_bindInm,bind_1) ->
                          (case (bind_1 _bindOgUniq) of
                           { ( _bindIgUniq,bind_2) ->
                               (case (_bindIgUniq) of
                                { _fldAnnsOgUniq ->
                                (case (fldAnns_ _fldAnnsOgUniq) of
                                 { ( _fldAnnsIgUniq,fldAnns_1) ->
                                     (case (_fldAnnsIgUniq) of
                                      { _lhsOgUniq ->
                                      (case ((let sem_CPatFld_Fld_1 :: T_CPatFld_1
                                                  sem_CPatFld_Fld_1 =
                                                      (\ _lhsIdataGam
                                                         _lhsIlamMp
                                                         _lhsIlev
                                                         _lhsImodNm
                                                         _lhsIopts ->
                                                           (case (_bindInm) of
                                                            { _fldNm ->
                                                            (case ([_fldNm]) of
                                                             { _lhsOfldNmL ->
                                                             (case (_lhsIopts) of
                                                              { _fldAnnsOopts ->
                                                              (case (_lhsImodNm) of
                                                               { _fldAnnsOmodNm ->
                                                               (case (_lhsIlev) of
                                                                { _fldAnnsOlev ->
                                                                (case (_lhsIlamMp) of
                                                                 { _fldAnnsOlamMp ->
                                                                 (case (_lhsIdataGam) of
                                                                  { _fldAnnsOdataGam ->
                                                                  (case (fldAnns_1 _fldAnnsOdataGam _fldAnnsOlamMp _fldAnnsOlev _fldAnnsOmodNm _fldAnnsOopts) of
                                                                   { ( _fldAnnsIfvS,_fldAnnsInmL) ->
                                                                       (case (_lhsIopts) of
                                                                        { _bindOopts ->
                                                                        (case (_lhsImodNm) of
                                                                         { _bindOmodNm ->
                                                                         (case (_lhsIlev) of
                                                                          { _bindOlev ->
                                                                          (case (_lhsIlamMp) of
                                                                           { _bindOlamMp ->
                                                                           (case (_lhsIdataGam) of
                                                                            { _bindOdataGam ->
                                                                            (case (False) of
                                                                             { _bindOisGlobal ->
                                                                             (case (EvalCtx_None) of
                                                                              { _bindOevalCtx ->
                                                                              (case (acoreBindcategPlain) of
                                                                               { _bindOletBindingsCateg ->
                                                                               (case (bind_2 _bindOdataGam _bindOevalCtx _bindOisGlobal _bindOlamMp _bindOletBindingsCateg _bindOlev _bindOmodNm _bindOopts) of
                                                                                { ( _bindIfvS,_bindIfvSMp,_bindInmL) ->
                                                                                    (case (ExprIsOther) of
                                                                                     { _whatAbove ->
                                                                                     (case (_whatAbove) of
                                                                                      { _offsetOwhatAbove ->
                                                                                      (case (_lhsIopts) of
                                                                                       { _offsetOopts ->
                                                                                       (case (_lhsImodNm) of
                                                                                        { _offsetOmodNm ->
                                                                                        (case (_lhsIlev) of
                                                                                         { _offsetOlev ->
                                                                                         (case (_lhsIlamMp) of
                                                                                          { _offsetOlamMp ->
                                                                                          (case (_lhsIdataGam) of
                                                                                           { _offsetOdataGam ->
                                                                                           (case (EvalCtx_Eval) of
                                                                                            { _offsetOevalCtx ->
                                                                                            (case (True) of
                                                                                             { _offsetOisTopTup ->
                                                                                             (case (True) of
                                                                                              { _offsetOisTopApp ->
                                                                                              (case (offset_2 _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlamMp _offsetOlev _offsetOmodNm _offsetOopts _offsetOwhatAbove) of
                                                                                               { ( _offsetIappFunKind,_offsetIfvS,_offsetImbFFIApp,_offsetImbLam,_offsetImbVar,_offsetIwhatBelow) ->
                                                                                                   (case (_offsetIfvS `Set.union` _bindIfvS `Set.union` _fldAnnsIfvS) of
                                                                                                    { _lhsOfvS ->
                                                                                                    (case ([_fldNm]) of
                                                                                                     { _lhsOnmL ->
                                                                                                     ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                                              in  sem_CPatFld_Fld_1)) of
                                       { ( sem_CPatFld_1) ->
                                       ( _lhsOgUniq,sem_CPatFld_1) }) }) }) }) }) }) }) }) }) }))
-- CPatFldL ----------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fldNmL               : [HsName]
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CPatFld 
         child tl             : CPatFldL 
      alternative Nil:
-}
-- 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 = UID ->
                  ( UID,T_CPatFldL_1)
type T_CPatFldL_1 = DataGam ->
                    LamMp ->
                    Int ->
                    HsName ->
                    EHCOpts ->
                    ( ([HsName]),FvS,([HsName]))
sem_CPatFldL_Cons :: T_CPatFld ->
                     T_CPatFldL ->
                     T_CPatFldL
sem_CPatFldL_Cons hd_ tl_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _hdOgUniq ->
          (case (hd_ _hdOgUniq) of
           { ( _hdIgUniq,hd_1) ->
               (case (_hdIgUniq) of
                { _tlOgUniq ->
                (case (tl_ _tlOgUniq) of
                 { ( _tlIgUniq,tl_1) ->
                     (case (_tlIgUniq) of
                      { _lhsOgUniq ->
                      (case ((let sem_CPatFldL_Cons_1 :: T_CPatFldL_1
                                  sem_CPatFldL_Cons_1 =
                                      (\ _lhsIdataGam
                                         _lhsIlamMp
                                         _lhsIlev
                                         _lhsImodNm
                                         _lhsIopts ->
                                           (case (_lhsIopts) of
                                            { _tlOopts ->
                                            (case (_lhsImodNm) of
                                             { _tlOmodNm ->
                                             (case (_lhsIlev) of
                                              { _tlOlev ->
                                              (case (_lhsIlamMp) of
                                               { _tlOlamMp ->
                                               (case (_lhsIdataGam) of
                                                { _tlOdataGam ->
                                                (case (tl_1 _tlOdataGam _tlOlamMp _tlOlev _tlOmodNm _tlOopts) of
                                                 { ( _tlIfldNmL,_tlIfvS,_tlInmL) ->
                                                     (case (_lhsIopts) of
                                                      { _hdOopts ->
                                                      (case (_lhsImodNm) of
                                                       { _hdOmodNm ->
                                                       (case (_lhsIlev) of
                                                        { _hdOlev ->
                                                        (case (_lhsIlamMp) of
                                                         { _hdOlamMp ->
                                                         (case (_lhsIdataGam) of
                                                          { _hdOdataGam ->
                                                          (case (hd_1 _hdOdataGam _hdOlamMp _hdOlev _hdOmodNm _hdOopts) of
                                                           { ( _hdIfldNmL,_hdIfvS,_hdInmL) ->
                                                               (case (_hdIfldNmL ++ _tlIfldNmL) of
                                                                { _lhsOfldNmL ->
                                                                (case (_hdIfvS `Set.union` _tlIfvS) of
                                                                 { _lhsOfvS ->
                                                                 (case (_hdInmL ++ _tlInmL) of
                                                                  { _lhsOnmL ->
                                                                  ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
                              in  sem_CPatFldL_Cons_1)) of
                       { ( sem_CPatFldL_1) ->
                       ( _lhsOgUniq,sem_CPatFldL_1) }) }) }) }) }) }))
sem_CPatFldL_Nil :: T_CPatFldL
sem_CPatFldL_Nil =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CPatFldL_Nil_1 :: T_CPatFldL_1
                      sem_CPatFldL_Nil_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case ([]) of
                                { _lhsOfldNmL ->
                                (case (Set.empty) of
                                 { _lhsOfvS ->
                                 (case ([]) of
                                  { _lhsOnmL ->
                                  ( _lhsOfldNmL,_lhsOfvS,_lhsOnmL) }) }) }))
                  in  sem_CPatFldL_Nil_1)) of
           { ( sem_CPatFldL_1) ->
           ( _lhsOgUniq,sem_CPatFldL_1) }) }))
-- CPatRest ----------------------------------------------------
{-
   visit 0:
      chained attribute:
         gUniq                : UID
   visit 1:
      inherited attributes:
         dataGam              : DataGam
         lamMp                : LamMp
         lev                  : Int
         modNm                : HsName
         opts                 : EHCOpts
      synthesized attributes:
         fvS                  : FvS
         nmL                  : [HsName]
   alternatives:
      alternative Var:
         child nm             : {HsName}
      alternative Empty:
-}
-- 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 = UID ->
                  ( UID,T_CPatRest_1)
type T_CPatRest_1 = DataGam ->
                    LamMp ->
                    Int ->
                    HsName ->
                    EHCOpts ->
                    ( FvS,([HsName]))
sem_CPatRest_Var :: HsName ->
                    T_CPatRest
sem_CPatRest_Var nm_ =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CPatRest_Var_1 :: T_CPatRest_1
                      sem_CPatRest_Var_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                (case ([nm_]) of
                                 { _lhsOnmL ->
                                 ( _lhsOfvS,_lhsOnmL) }) }))
                  in  sem_CPatRest_Var_1)) of
           { ( sem_CPatRest_1) ->
           ( _lhsOgUniq,sem_CPatRest_1) }) }))
sem_CPatRest_Empty :: T_CPatRest
sem_CPatRest_Empty =
    (\ _lhsIgUniq ->
         (case (_lhsIgUniq) of
          { _lhsOgUniq ->
          (case ((let sem_CPatRest_Empty_1 :: T_CPatRest_1
                      sem_CPatRest_Empty_1 =
                          (\ _lhsIdataGam
                             _lhsIlamMp
                             _lhsIlev
                             _lhsImodNm
                             _lhsIopts ->
                               (case (Set.empty) of
                                { _lhsOfvS ->
                                (case ([]) of
                                 { _lhsOnmL ->
                                 ( _lhsOfvS,_lhsOnmL) }) }))
                  in  sem_CPatRest_Empty_1)) of
           { ( sem_CPatRest_1) ->
           ( _lhsOgUniq,sem_CPatRest_1) }) }))
-- CodeAGItf ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         gUniq                : UID
         importUsedModules    : ImportUsedModules
         lamMp                : LamMp
         opts                 : EHCOpts
      synthesized attributes:
         gathDataGam          : DataGam
         gathLamMp            : LamMp
   alternatives:
      alternative AGItf:
         child module         : CModule 
         visit 0:
            local howMergeLamInfo : _
            local gathLamMp   : _
            local howUnionGathLamInfo : _
-}
-- cata
sem_CodeAGItf :: CodeAGItf ->
                 T_CodeAGItf
sem_CodeAGItf (CodeAGItf_AGItf _module) =
    (sem_CodeAGItf_AGItf (sem_CModule _module))
-- semantic domain
type T_CodeAGItf = DataGam ->
                   UID ->
                   ImportUsedModules ->
                   LamMp ->
                   EHCOpts ->
                   ( DataGam,LamMp)
data Inh_CodeAGItf = Inh_CodeAGItf {dataGam_Inh_CodeAGItf :: !(DataGam),gUniq_Inh_CodeAGItf :: !(UID),importUsedModules_Inh_CodeAGItf :: !(ImportUsedModules),lamMp_Inh_CodeAGItf :: !(LamMp),opts_Inh_CodeAGItf :: !(EHCOpts)}
data Syn_CodeAGItf = Syn_CodeAGItf {gathDataGam_Syn_CodeAGItf :: !(DataGam),gathLamMp_Syn_CodeAGItf :: !(LamMp)}
wrap_CodeAGItf :: T_CodeAGItf ->
                  Inh_CodeAGItf ->
                  Syn_CodeAGItf
wrap_CodeAGItf sem (Inh_CodeAGItf _lhsIdataGam _lhsIgUniq _lhsIimportUsedModules _lhsIlamMp _lhsIopts) =
    (let ( _lhsOgathDataGam,_lhsOgathLamMp) = sem _lhsIdataGam _lhsIgUniq _lhsIimportUsedModules _lhsIlamMp _lhsIopts
     in  (Syn_CodeAGItf _lhsOgathDataGam _lhsOgathLamMp))
sem_CodeAGItf_AGItf :: T_CModule ->
                       T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
    (\ _lhsIdataGam
       _lhsIgUniq
       _lhsIimportUsedModules
       _lhsIlamMp
       _lhsIopts ->
         (case (module_) of
          { ( _moduleIgathLamMp,module_1) ->
              (case (_lhsIopts) of
               { _moduleOopts ->
               (case (_lhsIimportUsedModules) of
                { _moduleOimportUsedModules ->
                (case (_lhsIgUniq) of
                 { _moduleOgUniq ->
                 (case (_lhsIdataGam) of
                  { _moduleOdataGam ->
                  (case (cLevModule) of
                   { _moduleOlev ->
                   (case ((\(LamInfo {laminfoArity=a}) i -> i {laminfoArity=a})) of
                    { _howMergeLamInfo ->
                    (case (lamMpMergeInto _howMergeLamInfo const _moduleIgathLamMp _lhsIlamMp) of
                     { _gathLamMp ->
                     (case (Map.union _gathLamMp) of
                      { _howUnionGathLamInfo ->
                      (case (_howUnionGathLamInfo _lhsIlamMp) of
                       { _moduleOlamMp ->
                       (case (module_1 _moduleOdataGam _moduleOgUniq _moduleOimportUsedModules _moduleOlamMp _moduleOlev _moduleOopts) of
                        { ( _moduleIfvS,_moduleIgUniq,_moduleIgathDataGam) ->
                            (case (_moduleIgathDataGam) of
                             { _lhsOgathDataGam ->
                             (case (_gathLamMp) of
                              { _lhsOgathLamMp ->
                              ( _lhsOgathDataGam,_lhsOgathLamMp) }) }) }) }) }) }) }) }) }) }) }) }) }))