-- UUAGC 0.9.50.2 (build/103/lib-ehc/UHC/Light/Compiler/Core/Check.ag)
module UHC.Light.Compiler.Core.Check(cmodCheck', Inh_CodeAGItf (..), Syn_CodeAGItf (..)) where

import UHC.Light.Compiler.Base.HsName.Builtin
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.Ty
import UHC.Light.Compiler.Error
import UHC.Light.Compiler.Gam
import UHC.Light.Compiler.Gam.DataGam
import UHC.Light.Compiler.Base.TermLike
import UHC.Light.Compiler.AbstractCore
import UHC.Light.Compiler.Core
import qualified UHC.Util.FastSeq as Seq
import Data.Maybe
import qualified Data.Map as Map
import Control.Applicative
import UHC.Util.Pretty

















cmodCheck'
  :: Inh_CodeAGItf
     -> CModule
     -> Syn_CodeAGItf
cmodCheck' inh cmod
  = t
  where t = wrap_CodeAGItf
              (sem_CodeAGItf (CodeAGItf_AGItf cmod))
              inh




type UndefNmMp = Map.Map MetaLev [ACoreBindRef]

undefmpUnion :: UndefNmMp -> UndefNmMp -> UndefNmMp
undefmpUnion = Map.unionWith (++)

-- CAlt --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Alt:
         child pat            : CPat 
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local lev         : _
-}
-- 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 = DataGam ->
              EvalCtx ->
              Int ->
              EHCOpts ->
              ( ErrSq,Bool,UndefNmMp)
sem_CAlt_Alt :: T_CPat ->
                T_CExpr ->
                T_CAlt
sem_CAlt_Alt pat_ expr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIlev
       _lhsIopts ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _exprOwhatAbove ->
           (case (_lhsIopts) of
            { _exprOopts ->
            (case (_lhsIlev + 1) of
             { _lev ->
             (case (_lev) of
              { _exprOlev ->
              (case (_lhsIevalCtx) of
               { _exprOevalCtx ->
               (case (_lhsIdataGam) of
                { _exprOdataGam ->
                (case (True) of
                 { _exprOisTopTup ->
                 (case (True) of
                  { _exprOisTopApp ->
                  (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                   { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                       (case (_lhsIopts) of
                        { _patOopts ->
                        (case (_lev) of
                         { _patOlev ->
                         (case (_lhsIdataGam) of
                          { _patOdataGam ->
                          (case (pat_ _patOdataGam _patOlev _patOopts) of
                           { ( _patIerrs,_patIfldNmL,_patIisFreeOfLam,_patIundefNmMp) ->
                               (case (_patIerrs `Seq.union` _exprIerrs) of
                                { _lhsOerrs ->
                                (case (_patIisFreeOfLam && _exprIisFreeOfLam) of
                                 { _lhsOisFreeOfLam ->
                                 (case (_patIundefNmMp `undefmpUnion` _exprIundefNmMp) of
                                  { _lhsOundefNmMp ->
                                  ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CAltL -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
               EvalCtx ->
               Int ->
               EHCOpts ->
               ( ErrSq,Bool,UndefNmMp)
sem_CAltL_Cons :: T_CAlt ->
                  T_CAltL ->
                  T_CAltL
sem_CAltL_Cons hd_ tl_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts ->
          (case (_lhsIlev) of
           { _tlOlev ->
           (case (_lhsIevalCtx) of
            { _tlOevalCtx ->
            (case (_lhsIdataGam) of
             { _tlOdataGam ->
             (case (tl_ _tlOdataGam _tlOevalCtx _tlOlev _tlOopts) of
              { ( _tlIerrs,_tlIisFreeOfLam,_tlIundefNmMp) ->
                  (case (_lhsIopts) of
                   { _hdOopts ->
                   (case (_lhsIlev) of
                    { _hdOlev ->
                    (case (_lhsIevalCtx) of
                     { _hdOevalCtx ->
                     (case (_lhsIdataGam) of
                      { _hdOdataGam ->
                      (case (hd_ _hdOdataGam _hdOevalCtx _hdOlev _hdOopts) of
                       { ( _hdIerrs,_hdIisFreeOfLam,_hdIundefNmMp) ->
                           (case (_hdIerrs `Seq.union` _tlIerrs) of
                            { _lhsOerrs ->
                            (case (_hdIisFreeOfLam && _tlIisFreeOfLam) of
                             { _lhsOisFreeOfLam ->
                             (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                              { _lhsOundefNmMp ->
                              ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CAltL_Nil :: T_CAltL
sem_CAltL_Nil =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CBind -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         hasMain              : Bool
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         nm                   : HsName
         undefNmMp            : UndefNmMp
   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 = DataGam ->
               EvalCtx ->
               Bool ->
               CBindCateg ->
               Int ->
               EHCOpts ->
               ( ErrSq,Bool,Bool,Bool,HsName,UndefNmMp)
sem_CBind_Bind :: HsName ->
                  T_CBoundL ->
                  T_CBind
sem_CBind_Bind nm_ bindAspects_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _bindAspectsOopts ->
          (case (_lhsIlev) of
           { _bindAspectsOlev ->
           (case (_lhsIletBindingsCateg) of
            { _bindAspectsOletBindingsCateg ->
            (case (_lhsIisGlobal) of
             { _bindAspectsOisGlobal ->
             (case (_lhsIevalCtx) of
              { _bindAspectsOevalCtx ->
              (case (_lhsIdataGam) of
               { _bindAspectsOdataGam ->
               (case (nm_) of
                { _bindAspectsOnm ->
                (case (bindAspects_ _bindAspectsOdataGam _bindAspectsOevalCtx _bindAspectsOisGlobal _bindAspectsOletBindingsCateg _bindAspectsOlev _bindAspectsOnm _bindAspectsOopts) of
                 { ( _bindAspectsIerrs,_bindAspectsIisFreeOfLam,_bindAspectsIisLamLifted,_bindAspectsIundefNmMp) ->
                     (case (_bindAspectsIerrs) of
                      { _lhsOerrs ->
                      (case (nm_ == hsnMain) of
                       { _lhsOhasMain ->
                       (case (_bindAspectsIisFreeOfLam) of
                        { _lhsOisFreeOfLam ->
                        (case (_bindAspectsIisLamLifted) of
                         { _lhsOisLamLifted ->
                         (case (nm_) of
                          { _lhsOnm ->
                          (case (_bindAspectsIundefNmMp) of
                           { _lhsOundefNmMp ->
                           ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOnm,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CBindAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Coe:
         child coe            : {RelevCoe}
-}
-- cata
sem_CBindAnn :: CBindAnn ->
                T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
    (sem_CBindAnn_Coe _coe)
-- semantic domain
type T_CBindAnn = DataGam ->
                  Int ->
                  EHCOpts ->
                  ( ErrSq,Bool,UndefNmMp)
sem_CBindAnn_Coe :: RelevCoe ->
                    T_CBindAnn
sem_CBindAnn_Coe coe_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CBindAnnL ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
                   Int ->
                   EHCOpts ->
                   ( ErrSq,Bool,UndefNmMp)
sem_CBindAnnL_Cons :: T_CBindAnn ->
                      T_CBindAnnL ->
                      T_CBindAnnL
sem_CBindAnnL_Cons hd_ tl_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts ->
          (case (_lhsIlev) of
           { _tlOlev ->
           (case (_lhsIdataGam) of
            { _tlOdataGam ->
            (case (tl_ _tlOdataGam _tlOlev _tlOopts) of
             { ( _tlIerrs,_tlIisFreeOfLam,_tlIundefNmMp) ->
                 (case (_lhsIopts) of
                  { _hdOopts ->
                  (case (_lhsIlev) of
                   { _hdOlev ->
                   (case (_lhsIdataGam) of
                    { _hdOdataGam ->
                    (case (hd_ _hdOdataGam _hdOlev _hdOopts) of
                     { ( _hdIerrs,_hdIisFreeOfLam,_hdIundefNmMp) ->
                         (case (_hdIerrs `Seq.union` _tlIerrs) of
                          { _lhsOerrs ->
                          (case (_hdIisFreeOfLam && _tlIisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                            { _lhsOundefNmMp ->
                            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }))
sem_CBindAnnL_Nil :: T_CBindAnnL
sem_CBindAnnL_Nil =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CBindL ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         hasMain              : Bool
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
                EvalCtx ->
                Bool ->
                CBindCateg ->
                Int ->
                EHCOpts ->
                ( ErrSq,Bool,Bool,Bool,UndefNmMp)
sem_CBindL_Cons :: T_CBind ->
                   T_CBindL ->
                   T_CBindL
sem_CBindL_Cons hd_ tl_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts ->
          (case (_lhsIlev) of
           { _tlOlev ->
           (case (_lhsIletBindingsCateg) of
            { _tlOletBindingsCateg ->
            (case (_lhsIisGlobal) of
             { _tlOisGlobal ->
             (case (_lhsIevalCtx) of
              { _tlOevalCtx ->
              (case (_lhsIdataGam) of
               { _tlOdataGam ->
               (case (tl_ _tlOdataGam _tlOevalCtx _tlOisGlobal _tlOletBindingsCateg _tlOlev _tlOopts) of
                { ( _tlIerrs,_tlIhasMain,_tlIisFreeOfLam,_tlIisLamLifted,_tlIundefNmMp) ->
                    (case (_lhsIopts) of
                     { _hdOopts ->
                     (case (_lhsIlev) of
                      { _hdOlev ->
                      (case (_lhsIletBindingsCateg) of
                       { _hdOletBindingsCateg ->
                       (case (_lhsIisGlobal) of
                        { _hdOisGlobal ->
                        (case (_lhsIevalCtx) of
                         { _hdOevalCtx ->
                         (case (_lhsIdataGam) of
                          { _hdOdataGam ->
                          (case (hd_ _hdOdataGam _hdOevalCtx _hdOisGlobal _hdOletBindingsCateg _hdOlev _hdOopts) of
                           { ( _hdIerrs,_hdIhasMain,_hdIisFreeOfLam,_hdIisLamLifted,_hdInm,_hdIundefNmMp) ->
                               (case (_hdIerrs `Seq.union` _tlIerrs) of
                                { _lhsOerrs ->
                                (case (_hdIhasMain || _tlIhasMain) of
                                 { _lhsOhasMain ->
                                 (case (_hdIisFreeOfLam && _tlIisFreeOfLam) of
                                  { _lhsOisFreeOfLam ->
                                  (case (_hdIisLamLifted && _tlIisLamLifted) of
                                   { _lhsOisLamLifted ->
                                   (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                                    { _lhsOundefNmMp ->
                                    ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBindL_Nil :: T_CBindL
sem_CBindL_Nil =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (Map.empty) of
              { _lhsOundefNmMp ->
              ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }))
-- CBound ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         isTopApp             : Bool
         isTopTup             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         nm                   : HsName
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Bind:
         child bindMeta       : CMetas 
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isLamLifted : _
      alternative Meta:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child cmetas         : CMetas 
      alternative RelevTy:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child relevTy        : {RelevTy}
      alternative Val:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child mlev           : {MetaLev}
         child lbl            : {CLbl}
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isLamLifted : _
      alternative Ty:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child ty             : {Ty}
      alternative FFE:
         child callconv       : {FFIWay}
         child expEnt         : {ForeignEnt}
         child expr           : CExpr 
         child ty             : {Ty}
         visit 0:
            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_RelevTy _aspectKeyS _relevTy) =
    (sem_CBound_RelevTy _aspectKeyS _relevTy)
sem_CBound (CBound_Val _aspectKeyS _mlev _lbl _expr) =
    (sem_CBound_Val _aspectKeyS _mlev _lbl (sem_CExpr _expr))
sem_CBound (CBound_Ty _aspectKeyS _ty) =
    (sem_CBound_Ty _aspectKeyS _ty)
sem_CBound (CBound_FFE _callconv _expEnt _expr _ty) =
    (sem_CBound_FFE _callconv _expEnt (sem_CExpr _expr) _ty)
-- semantic domain
type T_CBound = DataGam ->
                EvalCtx ->
                Bool ->
                Bool ->
                Bool ->
                CBindCateg ->
                Int ->
                HsName ->
                EHCOpts ->
                ( ErrSq,Bool,Bool,UndefNmMp)
sem_CBound_Bind :: T_CMetas ->
                   T_CExpr ->
                   T_CBound
sem_CBound_Bind bindMeta_ expr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (ExprIsBind) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _exprOwhatAbove ->
           (case (_lhsIopts) of
            { _exprOopts ->
            (case (_lhsIlev) of
             { _exprOlev ->
             (case (_lhsIevalCtx) of
              { _exprOevalCtx ->
              (case (_lhsIdataGam) of
               { _exprOdataGam ->
               (case (True) of
                { _exprOisTopTup ->
                (case (True) of
                 { _exprOisTopApp ->
                 (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                  { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                      (case (_lhsIopts) of
                       { _bindMetaOopts ->
                       (case (_lhsIlev) of
                        { _bindMetaOlev ->
                        (case (_lhsIdataGam) of
                         { _bindMetaOdataGam ->
                         (case (bindMeta_ _bindMetaOdataGam _bindMetaOlev _bindMetaOopts) of
                          { ( _bindMetaIerrs,_bindMetaIisFreeOfLam,_bindMetaIundefNmMp) ->
                              (case (_bindMetaIerrs `Seq.union` _exprIerrs) of
                               { _lhsOerrs ->
                               (case (_bindMetaIisFreeOfLam && _exprIisFreeOfLam) of
                                { _lhsOisFreeOfLam ->
                                (case (if whatExprIsLam _exprIwhatBelow
                                       then _lhsIisGlobal && _exprIlamBodyIsFreeOfLam
                                       else _exprIisFreeOfLam) of
                                 { _isLamLifted ->
                                 (case (_isLamLifted) of
                                  { _lhsOisLamLifted ->
                                  (case (_bindMetaIundefNmMp `undefmpUnion` _exprIundefNmMp) of
                                   { _lhsOundefNmMp ->
                                   ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBound_Meta :: ACoreBindAspectKeyS ->
                   T_CMetas ->
                   T_CBound
sem_CBound_Meta aspectKeyS_ cmetas_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (_lhsIopts) of
          { _cmetasOopts ->
          (case (_lhsIlev) of
           { _cmetasOlev ->
           (case (_lhsIdataGam) of
            { _cmetasOdataGam ->
            (case (cmetas_ _cmetasOdataGam _cmetasOlev _cmetasOopts) of
             { ( _cmetasIerrs,_cmetasIisFreeOfLam,_cmetasIundefNmMp) ->
                 (case (_cmetasIerrs) of
                  { _lhsOerrs ->
                  (case (_cmetasIisFreeOfLam) of
                   { _lhsOisFreeOfLam ->
                   (case (True) of
                    { _lhsOisLamLifted ->
                    (case (_cmetasIundefNmMp) of
                     { _lhsOundefNmMp ->
                     ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }))
sem_CBound_RelevTy :: ACoreBindAspectKeyS ->
                      RelevTy ->
                      T_CBound
sem_CBound_RelevTy aspectKeyS_ relevTy_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (True) of
            { _lhsOisLamLifted ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }))
sem_CBound_Val :: ACoreBindAspectKeyS ->
                  MetaLev ->
                  CLbl ->
                  T_CExpr ->
                  T_CBound
sem_CBound_Val aspectKeyS_ mlev_ lbl_ expr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (ExprIsBind) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _exprOwhatAbove ->
           (case (_lhsIopts) of
            { _exprOopts ->
            (case (_lhsIlev) of
             { _exprOlev ->
             (case (_lhsIisTopTup) of
              { _exprOisTopTup ->
              (case (_lhsIisTopApp) of
               { _exprOisTopApp ->
               (case (_lhsIevalCtx) of
                { _exprOevalCtx ->
                (case (_lhsIdataGam) of
                 { _exprOdataGam ->
                 (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                  { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                      (case (_exprIerrs) of
                       { _lhsOerrs ->
                       (case (_exprIisFreeOfLam) of
                        { _lhsOisFreeOfLam ->
                        (case (if whatExprIsLam _exprIwhatBelow
                               then _lhsIisGlobal && _exprIlamBodyIsFreeOfLam
                               else _exprIisFreeOfLam) of
                         { _isLamLifted ->
                         (case (_isLamLifted) of
                          { _lhsOisLamLifted ->
                          (case (_exprIundefNmMp) of
                           { _lhsOundefNmMp ->
                           ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBound_Ty :: ACoreBindAspectKeyS ->
                 Ty ->
                 T_CBound
sem_CBound_Ty aspectKeyS_ ty_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (True) of
            { _lhsOisLamLifted ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }))
sem_CBound_FFE :: FFIWay ->
                  ForeignEnt ->
                  T_CExpr ->
                  Ty ->
                  T_CBound
sem_CBound_FFE callconv_ expEnt_ expr_ ty_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (ExprIsLam 0) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _exprOwhatAbove ->
           (case (_lhsIopts) of
            { _exprOopts ->
            (case (_lhsIlev) of
             { _exprOlev ->
             (case (_lhsIevalCtx) of
              { _exprOevalCtx ->
              (case (_lhsIdataGam) of
               { _exprOdataGam ->
               (case (True) of
                { _exprOisTopTup ->
                (case (True) of
                 { _exprOisTopApp ->
                 (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                  { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                      (case (_exprIerrs) of
                       { _lhsOerrs ->
                       (case (_exprIisFreeOfLam) of
                        { _lhsOisFreeOfLam ->
                        (case (_exprIisLamLifted) of
                         { _lhsOisLamLifted ->
                         (case (_exprIundefNmMp) of
                          { _lhsOundefNmMp ->
                          ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CBoundL -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         nm                   : HsName
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
                 EvalCtx ->
                 Bool ->
                 CBindCateg ->
                 Int ->
                 HsName ->
                 EHCOpts ->
                 ( ErrSq,Bool,Bool,UndefNmMp)
sem_CBoundL_Cons :: T_CBound ->
                    T_CBoundL ->
                    T_CBoundL
sem_CBoundL_Cons hd_ tl_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts ->
          (case (_lhsInm) of
           { _tlOnm ->
           (case (_lhsIlev) of
            { _tlOlev ->
            (case (_lhsIletBindingsCateg) of
             { _tlOletBindingsCateg ->
             (case (_lhsIisGlobal) of
              { _tlOisGlobal ->
              (case (_lhsIevalCtx) of
               { _tlOevalCtx ->
               (case (_lhsIdataGam) of
                { _tlOdataGam ->
                (case (tl_ _tlOdataGam _tlOevalCtx _tlOisGlobal _tlOletBindingsCateg _tlOlev _tlOnm _tlOopts) of
                 { ( _tlIerrs,_tlIisFreeOfLam,_tlIisLamLifted,_tlIundefNmMp) ->
                     (case (_lhsIopts) of
                      { _hdOopts ->
                      (case (_lhsInm) of
                       { _hdOnm ->
                       (case (_lhsIlev) of
                        { _hdOlev ->
                        (case (_lhsIletBindingsCateg) of
                         { _hdOletBindingsCateg ->
                         (case (_lhsIisGlobal) of
                          { _hdOisGlobal ->
                          (case (_lhsIevalCtx) of
                           { _hdOevalCtx ->
                           (case (_lhsIdataGam) of
                            { _hdOdataGam ->
                            (case (True) of
                             { _hdOisTopTup ->
                             (case (True) of
                              { _hdOisTopApp ->
                              (case (hd_ _hdOdataGam _hdOevalCtx _hdOisGlobal _hdOisTopApp _hdOisTopTup _hdOletBindingsCateg _hdOlev _hdOnm _hdOopts) of
                               { ( _hdIerrs,_hdIisFreeOfLam,_hdIisLamLifted,_hdIundefNmMp) ->
                                   (case (_hdIerrs `Seq.union` _tlIerrs) of
                                    { _lhsOerrs ->
                                    (case (_hdIisFreeOfLam && _tlIisFreeOfLam) of
                                     { _lhsOisFreeOfLam ->
                                     (case (_hdIisLamLifted && _tlIisLamLifted) of
                                      { _lhsOisLamLifted ->
                                      (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                                       { _lhsOundefNmMp ->
                                       ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (True) of
            { _lhsOisLamLifted ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOundefNmMp) }) }) }) }))
-- CDataCon ----------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         dataConstrTagMp      : DataConstrTagMp
         errs                 : ErrSq
         undefNmMp            : UndefNmMp
   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,ErrSq,UndefNmMp)
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 ->
      (case (Seq.empty) of
       { _lhsOerrs ->
       (case (Map.empty) of
        { _lhsOundefNmMp ->
        ( _lhsOdataConstrTagMp,_lhsOerrs,_lhsOundefNmMp) }) }) }) })
-- CDataConL ---------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         dataConstrTagMp      : DataConstrTagMp
         errs                 : ErrSq
         undefNmMp            : UndefNmMp
   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,ErrSq,UndefNmMp)
sem_CDataConL_Cons :: T_CDataCon ->
                      T_CDataConL ->
                      T_CDataConL
sem_CDataConL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIdataConstrTagMp,_tlIerrs,_tlIundefNmMp) ->
         (case (hd_) of
          { ( _hdIdataConstrTagMp,_hdIerrs,_hdIundefNmMp) ->
              (case (_hdIdataConstrTagMp `Map.union` _tlIdataConstrTagMp) of
               { _lhsOdataConstrTagMp ->
               (case (_hdIerrs `Seq.union` _tlIerrs) of
                { _lhsOerrs ->
                (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                 { _lhsOundefNmMp ->
                 ( _lhsOdataConstrTagMp,_lhsOerrs,_lhsOundefNmMp) }) }) }) }) })
sem_CDataConL_Nil :: T_CDataConL
sem_CDataConL_Nil =
    (case (Map.empty) of
     { _lhsOdataConstrTagMp ->
     (case (Seq.empty) of
      { _lhsOerrs ->
      (case (Map.empty) of
       { _lhsOundefNmMp ->
       ( _lhsOdataConstrTagMp,_lhsOerrs,_lhsOundefNmMp) }) }) })
-- CDeclMeta ---------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         errs                 : ErrSq
         gathDataGam          : DataGam
         undefNmMp            : UndefNmMp
   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 = ( ErrSq,DataGam,UndefNmMp)
sem_CDeclMeta_Data :: HsName ->
                      T_CDataConL ->
                      T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
    (case (dataCons_) of
     { ( _dataConsIdataConstrTagMp,_dataConsIerrs,_dataConsIundefNmMp) ->
         (case (_dataConsIerrs) of
          { _lhsOerrs ->
          (case (gamSingleton tyNm_ $ mkDGIForCodegenOnly tyNm_ _dataConsIdataConstrTagMp) of
           { _lhsOgathDataGam ->
           (case (_dataConsIundefNmMp) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOgathDataGam,_lhsOundefNmMp) }) }) }) })
-- CDeclMetaL --------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         errs                 : ErrSq
         gathDataGam          : DataGam
         undefNmMp            : UndefNmMp
   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 = ( ErrSq,DataGam,UndefNmMp)
sem_CDeclMetaL_Cons :: T_CDeclMeta ->
                       T_CDeclMetaL ->
                       T_CDeclMetaL
sem_CDeclMetaL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIerrs,_tlIgathDataGam,_tlIundefNmMp) ->
         (case (hd_) of
          { ( _hdIerrs,_hdIgathDataGam,_hdIundefNmMp) ->
              (case (_hdIerrs `Seq.union` _tlIerrs) of
               { _lhsOerrs ->
               (case (_hdIgathDataGam `gamUnion` _tlIgathDataGam) of
                { _lhsOgathDataGam ->
                (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                 { _lhsOundefNmMp ->
                 ( _lhsOerrs,_lhsOgathDataGam,_lhsOundefNmMp) }) }) }) }) })
sem_CDeclMetaL_Nil :: T_CDeclMetaL
sem_CDeclMetaL_Nil =
    (case (Seq.empty) of
     { _lhsOerrs ->
     (case (emptyGam) of
      { _lhsOgathDataGam ->
      (case (Map.empty) of
       { _lhsOundefNmMp ->
       ( _lhsOerrs,_lhsOgathDataGam,_lhsOundefNmMp) }) }) })
-- CExpr -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         evalCtx              : EvalCtx
         isTopApp             : Bool
         isTopTup             : Bool
         lev                  : Int
         opts                 : EHCOpts
         whatAbove            : WhatExpr
      synthesized attributes:
         errs                 : ErrSq
         hasMain              : Bool
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         lamBodyIsFreeOfLam   : Bool
         undefNmMp            : UndefNmMp
         whatBelow            : WhatExpr
   alternatives:
      alternative Var:
         child ref            : {ACoreBindRef}
         visit 0:
            local nm          : {HsName}
            local whatBelow   : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local whatBelow   : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local whatBelow   : _
      alternative String:
         child str            : {String}
         visit 0:
            local whatBelow   : _
      alternative Integer:
         child integer        : {Integer}
         visit 0:
            local whatBelow   : _
      alternative Tup:
         child tag            : {CTag}
         visit 0:
            local whatBelow   : _
      alternative Let:
         child categ          : {CBindCateg}
         child binds          : CBindL 
         child body           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local evalCtx     : _
            local letBindingsCateg : _
            local isGlobal    : _
            local whatBelow   : _
      alternative App:
         child func           : CExpr 
         child arg            : CBound 
         visit 0:
            local letBindingsCateg : _
            local isTopTup    : _
            local isGlobal    : _
            local whatAbove   : {WhatExpr}
            local whatBelow   : _
      alternative Lam:
         child bind           : CBind 
         child body           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local lev         : _
            local isTopTup    : _
            local isTopApp    : {Bool}
            local letBindingsCateg : _
            local isGlobal    : _
            local whatBelow   : _
      alternative Case:
         child expr           : CExpr 
         child alts           : CAltL 
         child dflt           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative CaseAltFail:
         child failReason     : {CaseAltFailReason}
         child errorExpr      : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
      alternative TupDel:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         visit 0:
            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 0:
            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 0:
            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 0:
            local whatBelow   : _
      alternative Dbg:
         child info           : {String}
         visit 0:
            local whatBelow   : _
      alternative Hole:
         child uid            : {UID}
         visit 0:
            local whatBelow   : _
      alternative HoleLet:
         child bindsUid       : {UID}
         child body           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative CoeArg:
         visit 0:
            local whatBelow   : _
      alternative ImplsApp:
         child func           : CExpr 
         child uid            : {ImplsVarId}
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local whatBelow   : _
      alternative ImplsLam:
         child uid            : {ImplsVarId}
         child body           : CExpr 
         visit 0:
            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 = DataGam ->
               EvalCtx ->
               Bool ->
               Bool ->
               Int ->
               EHCOpts ->
               WhatExpr ->
               ( ErrSq,Bool,Bool,Bool,Bool,UndefNmMp,WhatExpr)
sem_CExpr_Var :: ACoreBindRef ->
                 T_CExpr
sem_CExpr_Var ref_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (acbrefNm ref_) of
                { _nm ->
                (case (ExprIsVar _nm) of
                 { _whatBelow ->
                 (case (_whatBelow) of
                  { _lhsOwhatBelow ->
                  ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }))
sem_CExpr_Int :: Int ->
                 T_CExpr
sem_CExpr_Int int_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsInt int_) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Char :: Char ->
                  T_CExpr
sem_CExpr_Char char_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOtherWHNF) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_String :: String ->
                    T_CExpr
sem_CExpr_String str_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOtherWHNF) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Integer :: Integer ->
                     T_CExpr
sem_CExpr_Integer integer_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOtherWHNF) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Tup :: CTag ->
                 T_CExpr
sem_CExpr_Tup tag_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsTup tag_) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Let :: CBindCateg ->
                 T_CBindL ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Let categ_ binds_ body_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _bodyOwhatAbove ->
           (case (_lhsIopts) of
            { _bodyOopts ->
            (case (_lhsIlev) of
             { _bodyOlev ->
             (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_ _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOwhatAbove) of
                     { ( _bodyIerrs,_bodyIhasMain,_bodyIisFreeOfLam,_bodyIisLamLifted,_bodyIlamBodyIsFreeOfLam,_bodyIundefNmMp,_bodyIwhatBelow) ->
                         (case (_lhsIopts) of
                          { _bindsOopts ->
                          (case (categ_) of
                           { _letBindingsCateg ->
                           (case (_letBindingsCateg) of
                            { _bindsOletBindingsCateg ->
                            (case (_lhsIlev == cLevModule) of
                             { _isGlobal ->
                             (case (_isGlobal) of
                              { _bindsOisGlobal ->
                              (case (_evalCtx) of
                               { _bindsOevalCtx ->
                               (case (_lhsIdataGam) of
                                { _bindsOdataGam ->
                                (case (_lhsIlev + 1) of
                                 { _bindsOlev ->
                                 (case (binds_ _bindsOdataGam _bindsOevalCtx _bindsOisGlobal _bindsOletBindingsCateg _bindsOlev _bindsOopts) of
                                  { ( _bindsIerrs,_bindsIhasMain,_bindsIisFreeOfLam,_bindsIisLamLifted,_bindsIundefNmMp) ->
                                      (case (_bindsIerrs `Seq.union` _bodyIerrs) of
                                       { _lhsOerrs ->
                                       (case (_bindsIhasMain || _bodyIhasMain) of
                                        { _lhsOhasMain ->
                                        (case (_bindsIisFreeOfLam && _bodyIisFreeOfLam) of
                                         { _lhsOisFreeOfLam ->
                                         (case (_bindsIisLamLifted && _bodyIisLamLifted) of
                                          { _lhsOisLamLifted ->
                                          (case (False) of
                                           { _lhsOlamBodyIsFreeOfLam ->
                                           (case (_bindsIundefNmMp `undefmpUnion` _bodyIundefNmMp) of
                                            { _lhsOundefNmMp ->
                                            (case (ExprIsOther) of
                                             { _whatBelow ->
                                             (case (_whatBelow) of
                                              { _lhsOwhatBelow ->
                                              ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_App :: T_CExpr ->
                 T_CBound ->
                 T_CExpr
sem_CExpr_App func_ arg_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (_lhsIopts) of
          { _argOopts ->
          (case (_lhsIlev) of
           { _argOlev ->
           (case (acoreBindcategPlain) of
            { _letBindingsCateg ->
            (case (_letBindingsCateg) of
             { _argOletBindingsCateg ->
             (case (True) of
              { _isTopTup ->
              (case (_isTopTup) of
               { _argOisTopTup ->
               (case (False) of
                { _isGlobal ->
                (case (_isGlobal) of
                 { _argOisGlobal ->
                 (case (_lhsIdataGam) of
                  { _argOdataGam ->
                  (case (hsnUnknown) of
                   { _argOnm ->
                   (case (EvalCtx_Thunk) of
                    { _argOevalCtx ->
                    (case (True) of
                     { _argOisTopApp ->
                     (case (arg_ _argOdataGam _argOevalCtx _argOisGlobal _argOisTopApp _argOisTopTup _argOletBindingsCateg _argOlev _argOnm _argOopts) of
                      { ( _argIerrs,_argIisFreeOfLam,_argIisLamLifted,_argIundefNmMp) ->
                          (case (maybe (ExprIsApp 1 ExprIsOther) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _lhsIwhatAbove) of
                           { _whatAbove ->
                           (case (_whatAbove) of
                            { _funcOwhatAbove ->
                            (case (_lhsIopts) of
                             { _funcOopts ->
                             (case (_lhsIlev) of
                              { _funcOlev ->
                              (case (_isTopTup) of
                               { _funcOisTopTup ->
                               (case (_lhsIevalCtx) of
                                { _funcOevalCtx ->
                                (case (_lhsIdataGam) of
                                 { _funcOdataGam ->
                                 (case (False) of
                                  { _funcOisTopApp ->
                                  (case (func_ _funcOdataGam _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlev _funcOopts _funcOwhatAbove) of
                                   { ( _funcIerrs,_funcIhasMain,_funcIisFreeOfLam,_funcIisLamLifted,_funcIlamBodyIsFreeOfLam,_funcIundefNmMp,_funcIwhatBelow) ->
                                       (case (_funcIerrs `Seq.union` _argIerrs) of
                                        { _lhsOerrs ->
                                        (case (_funcIhasMain) of
                                         { _lhsOhasMain ->
                                         (case (_funcIisFreeOfLam && _argIisFreeOfLam) of
                                          { _lhsOisFreeOfLam ->
                                          (case (_funcIisLamLifted && _argIisLamLifted) of
                                           { _lhsOisLamLifted ->
                                           (case (False) of
                                            { _lhsOlamBodyIsFreeOfLam ->
                                            (case (_funcIundefNmMp `undefmpUnion` _argIundefNmMp) of
                                             { _lhsOundefNmMp ->
                                             (case (maybe (ExprIsApp 1 _funcIwhatBelow) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _funcIwhatBelow) of
                                              { _whatBelow ->
                                              (case (_whatBelow) of
                                               { _lhsOwhatBelow ->
                                               ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Lam :: T_CBind ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Lam bind_ body_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (maybe (ExprIsLam 1) (\a -> ExprIsLam $ a + 1) $ whatExprMbLam _lhsIwhatAbove) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _bodyOwhatAbove ->
           (case (_lhsIopts) of
            { _bodyOopts ->
            (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 (body_ _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOwhatAbove) of
                     { ( _bodyIerrs,_bodyIhasMain,_bodyIisFreeOfLam,_bodyIisLamLifted,_bodyIlamBodyIsFreeOfLam,_bodyIundefNmMp,_bodyIwhatBelow) ->
                         (case (_lhsIopts) of
                          { _bindOopts ->
                          (case (_lev) of
                           { _bindOlev ->
                           (case (acoreBindcategPlain) of
                            { _letBindingsCateg ->
                            (case (_letBindingsCateg) of
                             { _bindOletBindingsCateg ->
                             (case (False) of
                              { _isGlobal ->
                              (case (_isGlobal) of
                               { _bindOisGlobal ->
                               (case (_lhsIevalCtx) of
                                { _bindOevalCtx ->
                                (case (_lhsIdataGam) of
                                 { _bindOdataGam ->
                                 (case (bind_ _bindOdataGam _bindOevalCtx _bindOisGlobal _bindOletBindingsCateg _bindOlev _bindOopts) of
                                  { ( _bindIerrs,_bindIhasMain,_bindIisFreeOfLam,_bindIisLamLifted,_bindInm,_bindIundefNmMp) ->
                                      (case (_bindIerrs `Seq.union` _bodyIerrs) of
                                       { _lhsOerrs ->
                                       (case (_bindIhasMain || _bodyIhasMain) of
                                        { _lhsOhasMain ->
                                        (case (False) of
                                         { _lhsOisFreeOfLam ->
                                         (case (_bindIisLamLifted && _bodyIisLamLifted) of
                                          { _lhsOisLamLifted ->
                                          (case (if whatExprIsLam _bodyIwhatBelow
                                                 then _bodyIlamBodyIsFreeOfLam
                                                 else _bodyIisFreeOfLam) of
                                           { _lhsOlamBodyIsFreeOfLam ->
                                           (case (_bindIundefNmMp `undefmpUnion` _bodyIundefNmMp) of
                                            { _lhsOundefNmMp ->
                                            (case (maybe (ExprIsLam 1) (\a -> ExprIsLam $ a + 1) $ whatExprMbLam _bodyIwhatBelow) of
                                             { _whatBelow ->
                                             (case (_whatBelow) of
                                              { _lhsOwhatBelow ->
                                              ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Case :: T_CExpr ->
                  T_CAltL ->
                  T_CExpr ->
                  T_CExpr
sem_CExpr_Case expr_ alts_ dflt_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _dfltOwhatAbove ->
           (case (_lhsIopts) of
            { _dfltOopts ->
            (case (_lhsIlev) of
             { _dfltOlev ->
             (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_ _dfltOdataGam _dfltOevalCtx _dfltOisTopApp _dfltOisTopTup _dfltOlev _dfltOopts _dfltOwhatAbove) of
                    { ( _dfltIerrs,_dfltIhasMain,_dfltIisFreeOfLam,_dfltIisLamLifted,_dfltIlamBodyIsFreeOfLam,_dfltIundefNmMp,_dfltIwhatBelow) ->
                        (case (_lhsIopts) of
                         { _altsOopts ->
                         (case (_lhsIlev) of
                          { _altsOlev ->
                          (case (_lhsIevalCtx) of
                           { _altsOevalCtx ->
                           (case (_lhsIdataGam) of
                            { _altsOdataGam ->
                            (case (alts_ _altsOdataGam _altsOevalCtx _altsOlev _altsOopts) of
                             { ( _altsIerrs,_altsIisFreeOfLam,_altsIundefNmMp) ->
                                 (case (_whatAbove) of
                                  { _exprOwhatAbove ->
                                  (case (_lhsIopts) of
                                   { _exprOopts ->
                                   (case (_lhsIlev) of
                                    { _exprOlev ->
                                    (case (_isTopTup) of
                                     { _exprOisTopTup ->
                                     (case (_isTopApp) of
                                      { _exprOisTopApp ->
                                      (case (_lhsIevalCtx) of
                                       { _exprOevalCtx ->
                                       (case (_lhsIdataGam) of
                                        { _exprOdataGam ->
                                        (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                                         { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                                             (case (_exprIerrs `Seq.union` _altsIerrs `Seq.union` _dfltIerrs) of
                                              { _lhsOerrs ->
                                              (case (_exprIhasMain || _dfltIhasMain) of
                                               { _lhsOhasMain ->
                                               (case (_exprIisFreeOfLam && _altsIisFreeOfLam && _dfltIisFreeOfLam) of
                                                { _lhsOisFreeOfLam ->
                                                (case (_exprIisLamLifted && _dfltIisLamLifted) of
                                                 { _lhsOisLamLifted ->
                                                 (case (False) of
                                                  { _lhsOlamBodyIsFreeOfLam ->
                                                  (case (_exprIundefNmMp `undefmpUnion` _altsIundefNmMp `undefmpUnion` _dfltIundefNmMp) of
                                                   { _lhsOundefNmMp ->
                                                   (case (ExprIsOther) of
                                                    { _whatBelow ->
                                                    (case (_whatBelow) of
                                                     { _lhsOwhatBelow ->
                                                     ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_CaseAltFail :: CaseAltFailReason ->
                         T_CExpr ->
                         T_CExpr
sem_CExpr_CaseAltFail failReason_ errorExpr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _errorExprOwhatAbove ->
           (case (_lhsIopts) of
            { _errorExprOopts ->
            (case (_lhsIlev) of
             { _errorExprOlev ->
             (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_ _errorExprOdataGam _errorExprOevalCtx _errorExprOisTopApp _errorExprOisTopTup _errorExprOlev _errorExprOopts _errorExprOwhatAbove) of
                    { ( _errorExprIerrs,_errorExprIhasMain,_errorExprIisFreeOfLam,_errorExprIisLamLifted,_errorExprIlamBodyIsFreeOfLam,_errorExprIundefNmMp,_errorExprIwhatBelow) ->
                        (case (_errorExprIerrs) of
                         { _lhsOerrs ->
                         (case (_errorExprIhasMain) of
                          { _lhsOhasMain ->
                          (case (_errorExprIisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_errorExprIisLamLifted) of
                            { _lhsOisLamLifted ->
                            (case (False) of
                             { _lhsOlamBodyIsFreeOfLam ->
                             (case (_errorExprIundefNmMp) of
                              { _lhsOundefNmMp ->
                              (case (_errorExprIwhatBelow) of
                               { _lhsOwhatBelow ->
                               ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupDel :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupDel expr_ tag_ nm_ offset_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _offsetOwhatAbove ->
           (case (_lhsIopts) of
            { _offsetOopts ->
            (case (_lhsIlev) of
             { _offsetOlev ->
             (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_ _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOwhatAbove) of
                    { ( _offsetIerrs,_offsetIhasMain,_offsetIisFreeOfLam,_offsetIisLamLifted,_offsetIlamBodyIsFreeOfLam,_offsetIundefNmMp,_offsetIwhatBelow) ->
                        (case (_whatAbove) of
                         { _exprOwhatAbove ->
                         (case (_lhsIopts) of
                          { _exprOopts ->
                          (case (_lhsIlev) of
                           { _exprOlev ->
                           (case (_isTopApp) of
                            { _exprOisTopApp ->
                            (case (_lhsIevalCtx) of
                             { _exprOevalCtx ->
                             (case (_lhsIdataGam) of
                              { _exprOdataGam ->
                              (case (False) of
                               { _exprOisTopTup ->
                               (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                                { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                                    (case (_exprIerrs `Seq.union` _offsetIerrs) of
                                     { _lhsOerrs ->
                                     (case (_exprIhasMain || _offsetIhasMain) of
                                      { _lhsOhasMain ->
                                      (case (_exprIisFreeOfLam && _offsetIisFreeOfLam) of
                                       { _lhsOisFreeOfLam ->
                                       (case (_exprIisLamLifted && _offsetIisLamLifted) of
                                        { _lhsOisLamLifted ->
                                        (case (False) of
                                         { _lhsOlamBodyIsFreeOfLam ->
                                         (case (_exprIundefNmMp `undefmpUnion` _offsetIundefNmMp) of
                                          { _lhsOundefNmMp ->
                                          (case (ExprIsOther) of
                                           { _whatBelow ->
                                           (case (_whatBelow) of
                                            { _lhsOwhatBelow ->
                                            ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupIns :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupIns expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _fldExprOwhatAbove ->
           (case (_lhsIopts) of
            { _fldExprOopts ->
            (case (_lhsIlev) of
             { _fldExprOlev ->
             (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_ _fldExprOdataGam _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlev _fldExprOopts _fldExprOwhatAbove) of
                    { ( _fldExprIerrs,_fldExprIhasMain,_fldExprIisFreeOfLam,_fldExprIisLamLifted,_fldExprIlamBodyIsFreeOfLam,_fldExprIundefNmMp,_fldExprIwhatBelow) ->
                        (case (_whatAbove) of
                         { _offsetOwhatAbove ->
                         (case (_lhsIopts) of
                          { _offsetOopts ->
                          (case (_lhsIlev) of
                           { _offsetOlev ->
                           (case (_isTopTup) of
                            { _offsetOisTopTup ->
                            (case (_isTopApp) of
                             { _offsetOisTopApp ->
                             (case (_lhsIevalCtx) of
                              { _offsetOevalCtx ->
                              (case (_lhsIdataGam) of
                               { _offsetOdataGam ->
                               (case (offset_ _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOwhatAbove) of
                                { ( _offsetIerrs,_offsetIhasMain,_offsetIisFreeOfLam,_offsetIisLamLifted,_offsetIlamBodyIsFreeOfLam,_offsetIundefNmMp,_offsetIwhatBelow) ->
                                    (case (_whatAbove) of
                                     { _exprOwhatAbove ->
                                     (case (_lhsIopts) of
                                      { _exprOopts ->
                                      (case (_lhsIlev) of
                                       { _exprOlev ->
                                       (case (_isTopApp) of
                                        { _exprOisTopApp ->
                                        (case (_lhsIevalCtx) of
                                         { _exprOevalCtx ->
                                         (case (_lhsIdataGam) of
                                          { _exprOdataGam ->
                                          (case (False) of
                                           { _exprOisTopTup ->
                                           (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                                            { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                                                (case (_exprIerrs `Seq.union` _offsetIerrs `Seq.union` _fldExprIerrs) of
                                                 { _lhsOerrs ->
                                                 (case (_exprIhasMain || _offsetIhasMain || _fldExprIhasMain) of
                                                  { _lhsOhasMain ->
                                                  (case (_exprIisFreeOfLam && _offsetIisFreeOfLam && _fldExprIisFreeOfLam) of
                                                   { _lhsOisFreeOfLam ->
                                                   (case (_exprIisLamLifted && _offsetIisLamLifted && _fldExprIisLamLifted) of
                                                    { _lhsOisLamLifted ->
                                                    (case (False) of
                                                     { _lhsOlamBodyIsFreeOfLam ->
                                                     (case (_exprIundefNmMp `undefmpUnion` _offsetIundefNmMp `undefmpUnion` _fldExprIundefNmMp) of
                                                      { _lhsOundefNmMp ->
                                                      (case (ExprIsOther) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupUpd :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupUpd expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _fldExprOwhatAbove ->
           (case (_lhsIopts) of
            { _fldExprOopts ->
            (case (_lhsIlev) of
             { _fldExprOlev ->
             (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_ _fldExprOdataGam _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlev _fldExprOopts _fldExprOwhatAbove) of
                    { ( _fldExprIerrs,_fldExprIhasMain,_fldExprIisFreeOfLam,_fldExprIisLamLifted,_fldExprIlamBodyIsFreeOfLam,_fldExprIundefNmMp,_fldExprIwhatBelow) ->
                        (case (_whatAbove) of
                         { _offsetOwhatAbove ->
                         (case (_lhsIopts) of
                          { _offsetOopts ->
                          (case (_lhsIlev) of
                           { _offsetOlev ->
                           (case (_isTopTup) of
                            { _offsetOisTopTup ->
                            (case (_isTopApp) of
                             { _offsetOisTopApp ->
                             (case (_lhsIevalCtx) of
                              { _offsetOevalCtx ->
                              (case (_lhsIdataGam) of
                               { _offsetOdataGam ->
                               (case (offset_ _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOwhatAbove) of
                                { ( _offsetIerrs,_offsetIhasMain,_offsetIisFreeOfLam,_offsetIisLamLifted,_offsetIlamBodyIsFreeOfLam,_offsetIundefNmMp,_offsetIwhatBelow) ->
                                    (case (_whatAbove) of
                                     { _exprOwhatAbove ->
                                     (case (_lhsIopts) of
                                      { _exprOopts ->
                                      (case (_lhsIlev) of
                                       { _exprOlev ->
                                       (case (_isTopApp) of
                                        { _exprOisTopApp ->
                                        (case (_lhsIevalCtx) of
                                         { _exprOevalCtx ->
                                         (case (_lhsIdataGam) of
                                          { _exprOdataGam ->
                                          (case (False) of
                                           { _exprOisTopTup ->
                                           (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                                            { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                                                (case (_exprIerrs `Seq.union` _offsetIerrs `Seq.union` _fldExprIerrs) of
                                                 { _lhsOerrs ->
                                                 (case (_exprIhasMain || _offsetIhasMain || _fldExprIhasMain) of
                                                  { _lhsOhasMain ->
                                                  (case (_exprIisFreeOfLam && _offsetIisFreeOfLam && _fldExprIisFreeOfLam) of
                                                   { _lhsOisFreeOfLam ->
                                                   (case (_exprIisLamLifted && _offsetIisLamLifted && _fldExprIisLamLifted) of
                                                    { _lhsOisLamLifted ->
                                                    (case (False) of
                                                     { _lhsOlamBodyIsFreeOfLam ->
                                                     (case (_exprIundefNmMp `undefmpUnion` _offsetIundefNmMp `undefmpUnion` _fldExprIundefNmMp) of
                                                      { _lhsOundefNmMp ->
                                                      (case (ExprIsOther) of
                                                       { _whatBelow ->
                                                       (case (_whatBelow) of
                                                        { _lhsOwhatBelow ->
                                                        ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_FFI :: FFIWay ->
                 String ->
                 ForeignEnt ->
                 Ty ->
                 T_CExpr
sem_CExpr_FFI callconv_ safety_ impEnt_ ty_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsFFI) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Dbg :: String ->
                 T_CExpr
sem_CExpr_Dbg info_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOther) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_Hole :: UID ->
                  T_CExpr
sem_CExpr_Hole uid_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOther) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_HoleLet :: UID ->
                     T_CExpr ->
                     T_CExpr
sem_CExpr_HoleLet bindsUid_ body_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _bodyOwhatAbove ->
           (case (_lhsIopts) of
            { _bodyOopts ->
            (case (_lhsIlev) 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 (body_ _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOwhatAbove) of
                    { ( _bodyIerrs,_bodyIhasMain,_bodyIisFreeOfLam,_bodyIisLamLifted,_bodyIlamBodyIsFreeOfLam,_bodyIundefNmMp,_bodyIwhatBelow) ->
                        (case (_bodyIerrs) of
                         { _lhsOerrs ->
                         (case (_bodyIhasMain) of
                          { _lhsOhasMain ->
                          (case (_bodyIisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_bodyIisLamLifted) of
                            { _lhsOisLamLifted ->
                            (case (False) of
                             { _lhsOlamBodyIsFreeOfLam ->
                             (case (_bodyIundefNmMp) of
                              { _lhsOundefNmMp ->
                              (case (ExprIsOther) of
                               { _whatBelow ->
                               (case (_whatBelow) of
                                { _lhsOwhatBelow ->
                                ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_CoeArg :: T_CExpr
sem_CExpr_CoeArg =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (False) of
           { _lhsOhasMain ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (True) of
             { _lhsOisLamLifted ->
             (case (False) of
              { _lhsOlamBodyIsFreeOfLam ->
              (case (Map.empty) of
               { _lhsOundefNmMp ->
               (case (ExprIsOther) of
                { _whatBelow ->
                (case (_whatBelow) of
                 { _lhsOwhatBelow ->
                 ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }))
sem_CExpr_ImplsApp :: T_CExpr ->
                      ImplsVarId ->
                      T_CExpr
sem_CExpr_ImplsApp func_ uid_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _funcOwhatAbove ->
           (case (_lhsIopts) of
            { _funcOopts ->
            (case (_lhsIlev) of
             { _funcOlev ->
             (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_ _funcOdataGam _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlev _funcOopts _funcOwhatAbove) of
                    { ( _funcIerrs,_funcIhasMain,_funcIisFreeOfLam,_funcIisLamLifted,_funcIlamBodyIsFreeOfLam,_funcIundefNmMp,_funcIwhatBelow) ->
                        (case (_funcIerrs) of
                         { _lhsOerrs ->
                         (case (_funcIhasMain) of
                          { _lhsOhasMain ->
                          (case (_funcIisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_funcIisLamLifted) of
                            { _lhsOisLamLifted ->
                            (case (False) of
                             { _lhsOlamBodyIsFreeOfLam ->
                             (case (_funcIundefNmMp) of
                              { _lhsOundefNmMp ->
                              (case (ExprIsOther) of
                               { _whatBelow ->
                               (case (_whatBelow) of
                                { _lhsOwhatBelow ->
                                ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_ImplsLam :: ImplsVarId ->
                      T_CExpr ->
                      T_CExpr
sem_CExpr_ImplsLam uid_ body_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _bodyOwhatAbove ->
           (case (_lhsIopts) of
            { _bodyOopts ->
            (case (_lhsIlev) 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 (body_ _bodyOdataGam _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOwhatAbove) of
                    { ( _bodyIerrs,_bodyIhasMain,_bodyIisFreeOfLam,_bodyIisLamLifted,_bodyIlamBodyIsFreeOfLam,_bodyIundefNmMp,_bodyIwhatBelow) ->
                        (case (_bodyIerrs) of
                         { _lhsOerrs ->
                         (case (_bodyIhasMain) of
                          { _lhsOhasMain ->
                          (case (_bodyIisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_bodyIisLamLifted) of
                            { _lhsOisLamLifted ->
                            (case (False) of
                             { _lhsOlamBodyIsFreeOfLam ->
                             (case (_bodyIundefNmMp) of
                              { _lhsOundefNmMp ->
                              (case (ExprIsOther) of
                               { _whatBelow ->
                               (case (_whatBelow) of
                                { _lhsOwhatBelow ->
                                ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Ann :: T_CExprAnn ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Ann ann_ expr_ =
    (\ _lhsIdataGam
       _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIwhatAbove ->
         (case (_lhsIwhatAbove) of
          { _exprOwhatAbove ->
          (case (_lhsIopts) of
           { _exprOopts ->
           (case (_lhsIlev) of
            { _exprOlev ->
            (case (_lhsIisTopTup) of
             { _exprOisTopTup ->
             (case (_lhsIisTopApp) of
              { _exprOisTopApp ->
              (case (_lhsIevalCtx) of
               { _exprOevalCtx ->
               (case (_lhsIdataGam) of
                { _exprOdataGam ->
                (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                 { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                     (case (_lhsIopts) of
                      { _annOopts ->
                      (case (_lhsIlev) of
                       { _annOlev ->
                       (case (_lhsIdataGam) of
                        { _annOdataGam ->
                        (case (ann_ _annOdataGam _annOlev _annOopts) of
                         { ( _annIerrs,_annIisFreeOfLam,_annIundefNmMp) ->
                             (case (_annIerrs `Seq.union` _exprIerrs) of
                              { _lhsOerrs ->
                              (case (_exprIhasMain) of
                               { _lhsOhasMain ->
                               (case (_annIisFreeOfLam && _exprIisFreeOfLam) of
                                { _lhsOisFreeOfLam ->
                                (case (_exprIisLamLifted) of
                                 { _lhsOisLamLifted ->
                                 (case (False) of
                                  { _lhsOlamBodyIsFreeOfLam ->
                                  (case (_annIundefNmMp `undefmpUnion` _exprIundefNmMp) of
                                   { _lhsOundefNmMp ->
                                   (case (_exprIwhatBelow) of
                                    { _lhsOwhatBelow ->
                                    ( _lhsOerrs,_lhsOhasMain,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOlamBodyIsFreeOfLam,_lhsOundefNmMp,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CExprAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Ty:
         child ty             : {Ty}
      alternative Coe:
         child coe            : {RelevCoe}
      alternative Debug:
         child info           : {String}
-}
-- cata
sem_CExprAnn :: CExprAnn ->
                T_CExprAnn
sem_CExprAnn (CExprAnn_Ty _ty) =
    (sem_CExprAnn_Ty _ty)
sem_CExprAnn (CExprAnn_Coe _coe) =
    (sem_CExprAnn_Coe _coe)
sem_CExprAnn (CExprAnn_Debug _info) =
    (sem_CExprAnn_Debug _info)
-- semantic domain
type T_CExprAnn = DataGam ->
                  Int ->
                  EHCOpts ->
                  ( ErrSq,Bool,UndefNmMp)
sem_CExprAnn_Ty :: Ty ->
                   T_CExprAnn
sem_CExprAnn_Ty ty_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CExprAnn_Coe :: RelevCoe ->
                    T_CExprAnn
sem_CExprAnn_Coe coe_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CExprAnn_Debug :: String ->
                      T_CExprAnn
sem_CExprAnn_Debug info_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CImport -----------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         errs                 : ErrSq
         impModNmL            : [HsName]
         undefNmMp            : UndefNmMp
   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 = ( ErrSq,([HsName]),UndefNmMp)
sem_CImport_Import :: HsName ->
                      T_CImport
sem_CImport_Import nm_ =
    (case (Seq.empty) of
     { _lhsOerrs ->
     (case ([nm_]) of
      { _lhsOimpModNmL ->
      (case (Map.empty) of
       { _lhsOundefNmMp ->
       ( _lhsOerrs,_lhsOimpModNmL,_lhsOundefNmMp) }) }) })
-- CImportL ----------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         errs                 : ErrSq
         impModNmL            : [HsName]
         undefNmMp            : UndefNmMp
   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 = ( ErrSq,([HsName]),UndefNmMp)
sem_CImportL_Cons :: T_CImport ->
                     T_CImportL ->
                     T_CImportL
sem_CImportL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIerrs,_tlIimpModNmL,_tlIundefNmMp) ->
         (case (hd_) of
          { ( _hdIerrs,_hdIimpModNmL,_hdIundefNmMp) ->
              (case (_hdIerrs `Seq.union` _tlIerrs) of
               { _lhsOerrs ->
               (case (_hdIimpModNmL ++ _tlIimpModNmL) of
                { _lhsOimpModNmL ->
                (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                 { _lhsOundefNmMp ->
                 ( _lhsOerrs,_lhsOimpModNmL,_lhsOundefNmMp) }) }) }) }) })
sem_CImportL_Nil :: T_CImportL
sem_CImportL_Nil =
    (case (Seq.empty) of
     { _lhsOerrs ->
     (case ([]) of
      { _lhsOimpModNmL ->
      (case (Map.empty) of
       { _lhsOundefNmMp ->
       ( _lhsOerrs,_lhsOimpModNmL,_lhsOundefNmMp) }) }) })
-- CMetaBind ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 ->
                   Int ->
                   EHCOpts ->
                   ( ErrSq,Bool,UndefNmMp)
sem_CMetaBind_Plain :: T_CMetaBind
sem_CMetaBind_Plain =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaBind_Function0 :: T_CMetaBind
sem_CMetaBind_Function0 =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaBind_Function1 :: T_CMetaBind
sem_CMetaBind_Function1 =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaBind_Apply0 :: T_CMetaBind
sem_CMetaBind_Apply0 =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CMetaVal ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 ->
                  Int ->
                  EHCOpts ->
                  ( ErrSq,Bool,UndefNmMp)
sem_CMetaVal_Val :: T_CMetaVal
sem_CMetaVal_Val =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaVal_Dict :: T_CMetaVal
sem_CMetaVal_Dict =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaVal_DictClass :: ([Track]) ->
                          T_CMetaVal
sem_CMetaVal_DictClass tracks_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaVal_DictInstance :: ([Track]) ->
                             T_CMetaVal
sem_CMetaVal_DictInstance tracks_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CMetaVal_Track :: Track ->
                      T_CMetaVal
sem_CMetaVal_Track track_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CMetas ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 ->
                Int ->
                EHCOpts ->
                ( ErrSq,Bool,UndefNmMp)
sem_CMetas_Tuple :: T_CMetaBind ->
                    T_CMetaVal ->
                    T_CMetas
sem_CMetas_Tuple x1_ x2_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _x2Oopts ->
          (case (_lhsIlev) of
           { _x2Olev ->
           (case (_lhsIdataGam) of
            { _x2OdataGam ->
            (case (x2_ _x2OdataGam _x2Olev _x2Oopts) of
             { ( _x2Ierrs,_x2IisFreeOfLam,_x2IundefNmMp) ->
                 (case (_lhsIopts) of
                  { _x1Oopts ->
                  (case (_lhsIlev) of
                   { _x1Olev ->
                   (case (_lhsIdataGam) of
                    { _x1OdataGam ->
                    (case (x1_ _x1OdataGam _x1Olev _x1Oopts) of
                     { ( _x1Ierrs,_x1IisFreeOfLam,_x1IundefNmMp) ->
                         (case (_x1Ierrs `Seq.union` _x2Ierrs) of
                          { _lhsOerrs ->
                          (case (_x1IisFreeOfLam && _x2IisFreeOfLam) of
                           { _lhsOisFreeOfLam ->
                           (case (_x1IundefNmMp `undefmpUnion` _x2IundefNmMp) of
                            { _lhsOundefNmMp ->
                            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }))
-- CModule -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         gathDataGam          : DataGam
         hasMain              : Bool
         impModNmL            : [HsName]
         isFreeOfLam          : Bool
         isLamLifted          : Bool
         realModuleNm         : HsName
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Mod:
         child moduleNm       : {HsName}
         child imports        : CImportL 
         child declMetas      : CDeclMetaL 
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local dataGam     : _
-}
-- cata
sem_CModule :: CModule ->
               T_CModule
sem_CModule (CModule_Mod _moduleNm _imports _declMetas _expr) =
    (sem_CModule_Mod _moduleNm (sem_CImportL _imports) (sem_CDeclMetaL _declMetas) (sem_CExpr _expr))
-- semantic domain
type T_CModule = DataGam ->
                 Int ->
                 EHCOpts ->
                 ( ErrSq,DataGam,Bool,([HsName]),Bool,Bool,HsName,UndefNmMp)
sem_CModule_Mod :: HsName ->
                   T_CImportL ->
                   T_CDeclMetaL ->
                   T_CExpr ->
                   T_CModule
sem_CModule_Mod moduleNm_ imports_ declMetas_ expr_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (ExprIsOther) of
          { _whatAbove ->
          (case (_whatAbove) of
           { _exprOwhatAbove ->
           (case (_lhsIopts) of
            { _exprOopts ->
            (case (_lhsIlev) of
             { _exprOlev ->
             (case (declMetas_) of
              { ( _declMetasIerrs,_declMetasIgathDataGam,_declMetasIundefNmMp) ->
                  (case (_lhsIdataGam `gamUnion` _declMetasIgathDataGam) of
                   { _dataGam ->
                   (case (_dataGam) of
                    { _exprOdataGam ->
                    (case (EvalCtx_Eval) of
                     { _exprOevalCtx ->
                     (case (True) of
                      { _exprOisTopTup ->
                      (case (True) of
                       { _exprOisTopApp ->
                       (case (expr_ _exprOdataGam _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOwhatAbove) of
                        { ( _exprIerrs,_exprIhasMain,_exprIisFreeOfLam,_exprIisLamLifted,_exprIlamBodyIsFreeOfLam,_exprIundefNmMp,_exprIwhatBelow) ->
                            (case (imports_) of
                             { ( _importsIerrs,_importsIimpModNmL,_importsIundefNmMp) ->
                                 (case (_importsIerrs `Seq.union` _declMetasIerrs `Seq.union` _exprIerrs) of
                                  { _lhsOerrs ->
                                  (case (_declMetasIgathDataGam) of
                                   { _lhsOgathDataGam ->
                                   (case (_exprIhasMain) of
                                    { _lhsOhasMain ->
                                    (case (_importsIimpModNmL) of
                                     { _lhsOimpModNmL ->
                                     (case (_exprIisFreeOfLam) of
                                      { _lhsOisFreeOfLam ->
                                      (case (_exprIisLamLifted) of
                                       { _lhsOisLamLifted ->
                                       (case (moduleNm_) of
                                        { _lhsOrealModuleNm ->
                                        (case (_importsIundefNmMp `undefmpUnion` _declMetasIundefNmMp `undefmpUnion` _exprIundefNmMp) of
                                         { _lhsOundefNmMp ->
                                         ( _lhsOerrs,_lhsOgathDataGam,_lhsOhasMain,_lhsOimpModNmL,_lhsOisFreeOfLam,_lhsOisLamLifted,_lhsOrealModuleNm,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CPat --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         fldNmL               : [HsName]
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Var:
         child pnm            : {HsName}
      alternative Con:
         child tag            : {CTag}
         child rest           : CPatRest 
         child binds          : CPatFldL 
      alternative Int:
         child int            : {Int}
      alternative Char:
         child char           : {Char}
      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 = DataGam ->
              Int ->
              EHCOpts ->
              ( ErrSq,([HsName]),Bool,UndefNmMp)
sem_CPat_Var :: HsName ->
                T_CPat
sem_CPat_Var pnm_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case ([]) of
           { _lhsOfldNmL ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }))
sem_CPat_Con :: CTag ->
                T_CPatRest ->
                T_CPatFldL ->
                T_CPat
sem_CPat_Con tag_ rest_ binds_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _bindsOopts ->
          (case (_lhsIlev) of
           { _bindsOlev ->
           (case (_lhsIdataGam) of
            { _bindsOdataGam ->
            (case (binds_ _bindsOdataGam _bindsOlev _bindsOopts) of
             { ( _bindsIerrs,_bindsIfldNmL,_bindsIisFreeOfLam,_bindsIundefNmMp) ->
                 (case (_lhsIopts) of
                  { _restOopts ->
                  (case (_lhsIlev) of
                   { _restOlev ->
                   (case (_lhsIdataGam) of
                    { _restOdataGam ->
                    (case (rest_ _restOdataGam _restOlev _restOopts) of
                     { ( _restIerrs,_restIisFreeOfLam,_restIundefNmMp) ->
                         (case (_restIerrs `Seq.union` _bindsIerrs) of
                          { _lhsOerrs ->
                          (case (_bindsIfldNmL) of
                           { _lhsOfldNmL ->
                           (case (_restIisFreeOfLam && _bindsIisFreeOfLam) of
                            { _lhsOisFreeOfLam ->
                            (case (_restIundefNmMp `undefmpUnion` _bindsIundefNmMp) of
                             { _lhsOundefNmMp ->
                             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CPat_Int :: Int ->
                T_CPat
sem_CPat_Int int_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case ([]) of
           { _lhsOfldNmL ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }))
sem_CPat_Char :: Char ->
                 T_CPat
sem_CPat_Char char_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case ([]) of
           { _lhsOfldNmL ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }))
sem_CPat_BoolExpr :: CExpr ->
                     T_CPat
sem_CPat_BoolExpr cexpr_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case ([]) of
           { _lhsOfldNmL ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }))
-- CPatFld -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         fldNmL               : [HsName]
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   alternatives:
      alternative Fld:
         child lbl            : {HsName}
         child offset         : CExpr 
         child bind           : CBind 
         child fldAnns        : CBindAnnL 
         visit 0:
            local whatAbove   : {WhatExpr}
            local fldNm       : _
-}
-- 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 = DataGam ->
                 Int ->
                 EHCOpts ->
                 ( ErrSq,([HsName]),Bool,UndefNmMp)
sem_CPatFld_Fld :: HsName ->
                   T_CExpr ->
                   T_CBind ->
                   T_CBindAnnL ->
                   T_CPatFld
sem_CPatFld_Fld lbl_ offset_ bind_ fldAnns_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _fldAnnsOopts ->
          (case (_lhsIlev) of
           { _fldAnnsOlev ->
           (case (_lhsIdataGam) of
            { _fldAnnsOdataGam ->
            (case (fldAnns_ _fldAnnsOdataGam _fldAnnsOlev _fldAnnsOopts) of
             { ( _fldAnnsIerrs,_fldAnnsIisFreeOfLam,_fldAnnsIundefNmMp) ->
                 (case (_lhsIopts) of
                  { _bindOopts ->
                  (case (_lhsIlev) of
                   { _bindOlev ->
                   (case (_lhsIdataGam) of
                    { _bindOdataGam ->
                    (case (False) of
                     { _bindOisGlobal ->
                     (case (EvalCtx_None) of
                      { _bindOevalCtx ->
                      (case (acoreBindcategPlain) of
                       { _bindOletBindingsCateg ->
                       (case (bind_ _bindOdataGam _bindOevalCtx _bindOisGlobal _bindOletBindingsCateg _bindOlev _bindOopts) of
                        { ( _bindIerrs,_bindIhasMain,_bindIisFreeOfLam,_bindIisLamLifted,_bindInm,_bindIundefNmMp) ->
                            (case (ExprIsOther) of
                             { _whatAbove ->
                             (case (_whatAbove) of
                              { _offsetOwhatAbove ->
                              (case (_lhsIopts) of
                               { _offsetOopts ->
                               (case (_lhsIlev) of
                                { _offsetOlev ->
                                (case (_lhsIdataGam) of
                                 { _offsetOdataGam ->
                                 (case (EvalCtx_Eval) of
                                  { _offsetOevalCtx ->
                                  (case (True) of
                                   { _offsetOisTopTup ->
                                   (case (True) of
                                    { _offsetOisTopApp ->
                                    (case (offset_ _offsetOdataGam _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOwhatAbove) of
                                     { ( _offsetIerrs,_offsetIhasMain,_offsetIisFreeOfLam,_offsetIisLamLifted,_offsetIlamBodyIsFreeOfLam,_offsetIundefNmMp,_offsetIwhatBelow) ->
                                         (case (_offsetIerrs `Seq.union` _bindIerrs `Seq.union` _fldAnnsIerrs) of
                                          { _lhsOerrs ->
                                          (case (_bindInm) of
                                           { _fldNm ->
                                           (case ([_fldNm]) of
                                            { _lhsOfldNmL ->
                                            (case (_offsetIisFreeOfLam && _bindIisFreeOfLam && _fldAnnsIisFreeOfLam) of
                                             { _lhsOisFreeOfLam ->
                                             (case (_offsetIundefNmMp `undefmpUnion` _bindIundefNmMp `undefmpUnion` _fldAnnsIundefNmMp) of
                                              { _lhsOundefNmMp ->
                                              ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CPatFldL ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         fldNmL               : [HsName]
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
                  Int ->
                  EHCOpts ->
                  ( ErrSq,([HsName]),Bool,UndefNmMp)
sem_CPatFldL_Cons :: T_CPatFld ->
                     T_CPatFldL ->
                     T_CPatFldL
sem_CPatFldL_Cons hd_ tl_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts ->
          (case (_lhsIlev) of
           { _tlOlev ->
           (case (_lhsIdataGam) of
            { _tlOdataGam ->
            (case (tl_ _tlOdataGam _tlOlev _tlOopts) of
             { ( _tlIerrs,_tlIfldNmL,_tlIisFreeOfLam,_tlIundefNmMp) ->
                 (case (_lhsIopts) of
                  { _hdOopts ->
                  (case (_lhsIlev) of
                   { _hdOlev ->
                   (case (_lhsIdataGam) of
                    { _hdOdataGam ->
                    (case (hd_ _hdOdataGam _hdOlev _hdOopts) of
                     { ( _hdIerrs,_hdIfldNmL,_hdIisFreeOfLam,_hdIundefNmMp) ->
                         (case (_hdIerrs `Seq.union` _tlIerrs) of
                          { _lhsOerrs ->
                          (case (_hdIfldNmL ++ _tlIfldNmL) of
                           { _lhsOfldNmL ->
                           (case (_hdIisFreeOfLam && _tlIisFreeOfLam) of
                            { _lhsOisFreeOfLam ->
                            (case (_hdIundefNmMp `undefmpUnion` _tlIundefNmMp) of
                             { _lhsOundefNmMp ->
                             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CPatFldL_Nil :: T_CPatFldL
sem_CPatFldL_Nil =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case ([]) of
           { _lhsOfldNmL ->
           (case (True) of
            { _lhsOisFreeOfLam ->
            (case (Map.empty) of
             { _lhsOundefNmMp ->
             ( _lhsOerrs,_lhsOfldNmL,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }) }))
-- CPatRest ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         isFreeOfLam          : Bool
         undefNmMp            : UndefNmMp
   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 = DataGam ->
                  Int ->
                  EHCOpts ->
                  ( ErrSq,Bool,UndefNmMp)
sem_CPatRest_Var :: HsName ->
                    T_CPatRest
sem_CPatRest_Var nm_ =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
sem_CPatRest_Empty :: T_CPatRest
sem_CPatRest_Empty =
    (\ _lhsIdataGam
       _lhsIlev
       _lhsIopts ->
         (case (Seq.empty) of
          { _lhsOerrs ->
          (case (True) of
           { _lhsOisFreeOfLam ->
           (case (Map.empty) of
            { _lhsOundefNmMp ->
            ( _lhsOerrs,_lhsOisFreeOfLam,_lhsOundefNmMp) }) }) }))
-- CodeAGItf ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         dataGam              : DataGam
         opts                 : EHCOpts
      synthesized attributes:
         errs                 : ErrSq
         gathDataGam          : DataGam
         hasMain              : Bool
         impModNmL            : [HsName]
         isLamLifted          : Bool
         realModuleNm         : HsName
   alternatives:
      alternative AGItf:
         child module         : CModule 
-}
-- cata
sem_CodeAGItf :: CodeAGItf ->
                 T_CodeAGItf
sem_CodeAGItf (CodeAGItf_AGItf _module) =
    (sem_CodeAGItf_AGItf (sem_CModule _module))
-- semantic domain
type T_CodeAGItf = DataGam ->
                   EHCOpts ->
                   ( ErrSq,DataGam,Bool,([HsName]),Bool,HsName)
data Inh_CodeAGItf = Inh_CodeAGItf {dataGam_Inh_CodeAGItf :: !(DataGam),opts_Inh_CodeAGItf :: !(EHCOpts)}
data Syn_CodeAGItf = Syn_CodeAGItf {errs_Syn_CodeAGItf :: !(ErrSq),gathDataGam_Syn_CodeAGItf :: !(DataGam),hasMain_Syn_CodeAGItf :: !(Bool),impModNmL_Syn_CodeAGItf :: !(([HsName])),isLamLifted_Syn_CodeAGItf :: !(Bool),realModuleNm_Syn_CodeAGItf :: !(HsName)}
wrap_CodeAGItf :: T_CodeAGItf ->
                  Inh_CodeAGItf ->
                  Syn_CodeAGItf
wrap_CodeAGItf sem (Inh_CodeAGItf _lhsIdataGam _lhsIopts) =
    (let ( _lhsOerrs,_lhsOgathDataGam,_lhsOhasMain,_lhsOimpModNmL,_lhsOisLamLifted,_lhsOrealModuleNm) = sem _lhsIdataGam _lhsIopts
     in  (Syn_CodeAGItf _lhsOerrs _lhsOgathDataGam _lhsOhasMain _lhsOimpModNmL _lhsOisLamLifted _lhsOrealModuleNm))
sem_CodeAGItf_AGItf :: T_CModule ->
                       T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
    (\ _lhsIdataGam
       _lhsIopts ->
         (case (_lhsIopts) of
          { _moduleOopts ->
          (case (_lhsIdataGam) of
           { _moduleOdataGam ->
           (case (cLevModule) of
            { _moduleOlev ->
            (case (module_ _moduleOdataGam _moduleOlev _moduleOopts) of
             { ( _moduleIerrs,_moduleIgathDataGam,_moduleIhasMain,_moduleIimpModNmL,_moduleIisFreeOfLam,_moduleIisLamLifted,_moduleIrealModuleNm,_moduleIundefNmMp) ->
                 (case (_moduleIerrs) of
                  { _lhsOerrs ->
                  (case (_moduleIgathDataGam) of
                   { _lhsOgathDataGam ->
                   (case (_moduleIhasMain) of
                    { _lhsOhasMain ->
                    (case (_moduleIimpModNmL) of
                     { _lhsOimpModNmL ->
                     (case (_moduleIisLamLifted) of
                      { _lhsOisLamLifted ->
                      (case (_moduleIrealModuleNm) of
                       { _lhsOrealModuleNm ->
                       ( _lhsOerrs,_lhsOgathDataGam,_lhsOhasMain,_lhsOimpModNmL,_lhsOisLamLifted,_lhsOrealModuleNm) }) }) }) }) }) }) }) }) }) }))