-- UUAGC 0.9.50.2 (build/103/lib-ehc/UHC/Light/Compiler/Core/Trf/AnnBa)
module UHC.Light.Compiler.Core.Trf.AnnBasedSimplify(cmodTrfAnnBasedSimplify) where

import UHC.Light.Compiler.Base.HsName.Builtin
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.CodeGen.Bits
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Ty
import Data.Maybe
import qualified Data.Set as Set
import UHC.Light.Compiler.AbstractCore









cmodTrfAnnBasedSimplify :: EHCOpts -> CModule -> CModule
cmodTrfAnnBasedSimplify opts cmod
  =  let  t = wrap_CodeAGItf (sem_CodeAGItf (CodeAGItf_AGItf cmod))
                             (Inh_CodeAGItf
                               { opts_Inh_CodeAGItf = opts
                               })
     in   cTrf_Syn_CodeAGItf t



data Prop
  = Prop_None
  | Prop_HasTy              Ty          -- has ty
  | Prop_IsTyInt                        -- is of type Int
  | Prop_IsTyInteger                    -- is of type Integer
  | Prop_IsInteger          CExpr       -- is an Integer
  | Prop_IsIntegerConst     Integer     -- is an Integer constant
  | Prop_IsIntConst         Int         -- is an Int constant

type PropS = Set.Set Prop

-- CAlt --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         lev                  : Int
         opts                 : EHCOpts
         propDown             : Prop
      synthesized attributes:
         cTrf                 : CAlt 
         mbCTag               : Maybe CTag
   alternatives:
      alternative Alt:
         child pat            : CPat 
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local lev         : _
            local cTrf        : _
-}
-- cata
sem_CAlt :: CAlt ->
            T_CAlt
sem_CAlt (CAlt_Alt _pat _expr) =
    (sem_CAlt_Alt (sem_CPat _pat) (sem_CExpr _expr))
-- semantic domain
type T_CAlt = EvalCtx ->
              Int ->
              EHCOpts ->
              Prop ->
              ( CAlt,(Maybe CTag))
sem_CAlt_Alt :: T_CPat ->
                T_CExpr ->
                T_CAlt
sem_CAlt_Alt pat_ expr_ =
    (\ _lhsIevalCtx
       _lhsIlev
       _lhsIopts
       _lhsIpropDown ->
         (case (_lhsIpropDown) of
          { _exprOpropDown | _exprOpropDown `seq` (True) ->
          (case (_lhsIopts) of
           { _exprOopts | _exprOopts `seq` (True) ->
           (case (_lhsIopts) of
            { _patOopts | _patOopts `seq` (True) ->
            (case (True) of
             { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
             (case (ExprIsOther) of
              { _whatAbove | _whatAbove `seq` (True) ->
              (case (_whatAbove) of
               { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
               (case (_lhsIlev + 1) of
                { _lev | _lev `seq` (True) ->
                (case (_lev) of
                 { _exprOlev | _exprOlev `seq` (True) ->
                 (case (_lhsIevalCtx) of
                  { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                  (case (True) of
                   { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                   (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                    { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                        (case (_lev) of
                         { _patOlev | _patOlev `seq` (True) ->
                         (case (pat_ _patOlev _patOopts) of
                          { ( _patIcTrf,_patIfldNmL,_patImbCTag) | True ->
                              (case (CAlt_Alt _patIcTrf _exprIcTrf) of
                               { _cTrf | _cTrf `seq` (True) ->
                               (case (_cTrf) of
                                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                (case (_patImbCTag) of
                                 { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
                                 ( _lhsOcTrf,_lhsOmbCTag) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CAltL -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         lev                  : Int
         opts                 : EHCOpts
         propDown             : Prop
      synthesized attribute:
         cTrf                 : CAltL 
   alternatives:
      alternative Cons:
         child hd             : CAlt 
         child tl             : CAltL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CAltL :: CAltL ->
             T_CAltL
sem_CAltL list =
    (Prelude.foldr sem_CAltL_Cons sem_CAltL_Nil (Prelude.map sem_CAlt list))
-- semantic domain
type T_CAltL = EvalCtx ->
               Int ->
               EHCOpts ->
               Prop ->
               ( CAltL)
sem_CAltL_Cons :: T_CAlt ->
                  T_CAltL ->
                  T_CAltL
sem_CAltL_Cons hd_ tl_ =
    (\ _lhsIevalCtx
       _lhsIlev
       _lhsIopts
       _lhsIpropDown ->
         (case (_lhsIpropDown) of
          { _tlOpropDown | _tlOpropDown `seq` (True) ->
          (case (_lhsIopts) of
           { _tlOopts | _tlOopts `seq` (True) ->
           (case (_lhsIpropDown) of
            { _hdOpropDown | _hdOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _hdOopts | _hdOopts `seq` (True) ->
             (case (_lhsIlev) of
              { _tlOlev | _tlOlev `seq` (True) ->
              (case (_lhsIevalCtx) of
               { _tlOevalCtx | _tlOevalCtx `seq` (True) ->
               (case (tl_ _tlOevalCtx _tlOlev _tlOopts _tlOpropDown) of
                { ( _tlIcTrf) | True ->
                    (case (_lhsIlev) of
                     { _hdOlev | _hdOlev `seq` (True) ->
                     (case (_lhsIevalCtx) of
                      { _hdOevalCtx | _hdOevalCtx `seq` (True) ->
                      (case (hd_ _hdOevalCtx _hdOlev _hdOopts _hdOpropDown) of
                       { ( _hdIcTrf,_hdImbCTag) | True ->
                           (case ((:) _hdIcTrf _tlIcTrf) of
                            { _cTrf | _cTrf `seq` (True) ->
                            (case (_cTrf) of
                             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                             ( _lhsOcTrf) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CAltL_Nil :: T_CAltL
sem_CAltL_Nil =
    (\ _lhsIevalCtx
       _lhsIlev
       _lhsIopts
       _lhsIpropDown ->
         (case ([]) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CBind -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CBind 
         nm                   : HsName
   alternatives:
      alternative Bind:
         child nm             : {HsName}
         child bindAspects    : CBoundL 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBind :: CBind ->
             T_CBind
sem_CBind (CBind_Bind _nm _bindAspects) =
    (sem_CBind_Bind _nm (sem_CBoundL _bindAspects))
-- semantic domain
type T_CBind = EvalCtx ->
               Bool ->
               CBindCateg ->
               Int ->
               EHCOpts ->
               ( CBind,HsName)
sem_CBind_Bind :: HsName ->
                  T_CBoundL ->
                  T_CBind
sem_CBind_Bind nm_ bindAspects_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _bindAspectsOopts | _bindAspectsOopts `seq` (True) ->
          (case (_lhsIlev) of
           { _bindAspectsOlev | _bindAspectsOlev `seq` (True) ->
           (case (_lhsIletBindingsCateg) of
            { _bindAspectsOletBindingsCateg | _bindAspectsOletBindingsCateg `seq` (True) ->
            (case (_lhsIisGlobal) of
             { _bindAspectsOisGlobal | _bindAspectsOisGlobal `seq` (True) ->
             (case (_lhsIevalCtx) of
              { _bindAspectsOevalCtx | _bindAspectsOevalCtx `seq` (True) ->
              (case (nm_) of
               { _bindAspectsOnm | _bindAspectsOnm `seq` (True) ->
               (case (bindAspects_ _bindAspectsOevalCtx _bindAspectsOisGlobal _bindAspectsOletBindingsCateg _bindAspectsOlev _bindAspectsOnm _bindAspectsOopts) of
                { ( _bindAspectsIcTrf) | True ->
                    (case (CBind_Bind nm_ _bindAspectsIcTrf) of
                     { _cTrf | _cTrf `seq` (True) ->
                     (case (_cTrf) of
                      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                      (case (nm_) of
                       { _lhsOnm | _lhsOnm `seq` (True) ->
                       ( _lhsOcTrf,_lhsOnm) }) }) }) }) }) }) }) }) }) }))
-- CBindAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBindAnn 
   alternatives:
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindAnn :: CBindAnn ->
                T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
    (sem_CBindAnn_Coe _coe)
-- semantic domain
type T_CBindAnn = Int ->
                  EHCOpts ->
                  ( CBindAnn)
sem_CBindAnn_Coe :: RelevCoe ->
                    T_CBindAnn
sem_CBindAnn_Coe coe_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CBindAnn_Coe coe_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CBindAnnL ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBindAnnL 
   alternatives:
      alternative Cons:
         child hd             : CBindAnn 
         child tl             : CBindAnnL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindAnnL :: CBindAnnL ->
                 T_CBindAnnL
sem_CBindAnnL list =
    (Prelude.foldr sem_CBindAnnL_Cons sem_CBindAnnL_Nil (Prelude.map sem_CBindAnn list))
-- semantic domain
type T_CBindAnnL = Int ->
                   EHCOpts ->
                   ( CBindAnnL)
sem_CBindAnnL_Cons :: T_CBindAnn ->
                      T_CBindAnnL ->
                      T_CBindAnnL
sem_CBindAnnL_Cons hd_ tl_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts | _tlOopts `seq` (True) ->
          (case (_lhsIlev) of
           { _tlOlev | _tlOlev `seq` (True) ->
           (case (tl_ _tlOlev _tlOopts) of
            { ( _tlIcTrf) | True ->
                (case (_lhsIopts) of
                 { _hdOopts | _hdOopts `seq` (True) ->
                 (case (_lhsIlev) of
                  { _hdOlev | _hdOlev `seq` (True) ->
                  (case (hd_ _hdOlev _hdOopts) of
                   { ( _hdIcTrf) | True ->
                       (case ((:) _hdIcTrf _tlIcTrf) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         ( _lhsOcTrf) }) }) }) }) }) }) }) }))
sem_CBindAnnL_Nil :: T_CBindAnnL
sem_CBindAnnL_Nil =
    (\ _lhsIlev
       _lhsIopts ->
         (case ([]) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CBindL ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBindL 
   alternatives:
      alternative Cons:
         child hd             : CBind 
         child tl             : CBindL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBindL :: CBindL ->
              T_CBindL
sem_CBindL list =
    (Prelude.foldr sem_CBindL_Cons sem_CBindL_Nil (Prelude.map sem_CBind list))
-- semantic domain
type T_CBindL = EvalCtx ->
                Bool ->
                CBindCateg ->
                Int ->
                EHCOpts ->
                ( CBindL)
sem_CBindL_Cons :: T_CBind ->
                   T_CBindL ->
                   T_CBindL
sem_CBindL_Cons hd_ tl_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts | _tlOopts `seq` (True) ->
          (case (_lhsIopts) of
           { _hdOopts | _hdOopts `seq` (True) ->
           (case (_lhsIlev) of
            { _tlOlev | _tlOlev `seq` (True) ->
            (case (_lhsIletBindingsCateg) of
             { _tlOletBindingsCateg | _tlOletBindingsCateg `seq` (True) ->
             (case (_lhsIisGlobal) of
              { _tlOisGlobal | _tlOisGlobal `seq` (True) ->
              (case (_lhsIevalCtx) of
               { _tlOevalCtx | _tlOevalCtx `seq` (True) ->
               (case (tl_ _tlOevalCtx _tlOisGlobal _tlOletBindingsCateg _tlOlev _tlOopts) of
                { ( _tlIcTrf) | True ->
                    (case (_lhsIlev) of
                     { _hdOlev | _hdOlev `seq` (True) ->
                     (case (_lhsIletBindingsCateg) of
                      { _hdOletBindingsCateg | _hdOletBindingsCateg `seq` (True) ->
                      (case (_lhsIisGlobal) of
                       { _hdOisGlobal | _hdOisGlobal `seq` (True) ->
                       (case (_lhsIevalCtx) of
                        { _hdOevalCtx | _hdOevalCtx `seq` (True) ->
                        (case (hd_ _hdOevalCtx _hdOisGlobal _hdOletBindingsCateg _hdOlev _hdOopts) of
                         { ( _hdIcTrf,_hdInm) | True ->
                             (case ((:) _hdIcTrf _tlIcTrf) of
                              { _cTrf | _cTrf `seq` (True) ->
                              (case (_cTrf) of
                               { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                               ( _lhsOcTrf) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBindL_Nil :: T_CBindL
sem_CBindL_Nil =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsIopts ->
         (case ([]) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CBound ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         isGlobal             : Bool
         isTopApp             : Bool
         isTopTup             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         nm                   : HsName
         opts                 : EHCOpts
         propDown             : Prop
      synthesized attributes:
         cTrf                 : CBound 
         propUp               : Prop
   alternatives:
      alternative Bind:
         child bindMeta       : CMetas 
         child expr           : CExpr 
         visit 0:
            local propDown    : _
            local whatAbove   : {WhatExpr}
            local cTrf        : _
            local propUp      : _
      alternative Meta:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child cmetas         : CMetas 
         visit 0:
            local cTrf        : _
            local propUp      : _
      alternative RelevTy:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child relevTy        : {RelevTy}
         visit 0:
            local cTrf        : _
            local propUp      : _
      alternative Val:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child mlev           : {MetaLev}
         child lbl            : {CLbl}
         child expr           : CExpr 
         visit 0:
            local propDown    : _
            local whatAbove   : {WhatExpr}
            local cTrf        : _
      alternative Ty:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child ty             : {Ty}
         visit 0:
            local cTrf        : _
            local propUp      : _
      alternative FFE:
         child callconv       : {FFIWay}
         child expEnt         : {ForeignEnt}
         child expr           : CExpr 
         child ty             : {Ty}
         visit 0:
            local propDown    : _
            local whatAbove   : {WhatExpr}
            local cTrf        : _
            local propUp      : _
-}
-- 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 = EvalCtx ->
                Bool ->
                Bool ->
                Bool ->
                CBindCateg ->
                Int ->
                HsName ->
                EHCOpts ->
                Prop ->
                ( CBound,Prop)
sem_CBound_Bind :: T_CMetas ->
                   T_CExpr ->
                   T_CBound
sem_CBound_Bind bindMeta_ expr_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (Prop_None) of
          { _propDown | _propDown `seq` (True) ->
          (case (_propDown) of
           { _exprOpropDown | _exprOpropDown `seq` (True) ->
           (case (_lhsIopts) of
            { _exprOopts | _exprOopts `seq` (True) ->
            (case (True) of
             { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
             (case (ExprIsBind) of
              { _whatAbove | _whatAbove `seq` (True) ->
              (case (_whatAbove) of
               { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
               (case (_lhsIlev) of
                { _exprOlev | _exprOlev `seq` (True) ->
                (case (_lhsIevalCtx) of
                 { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                 (case (True) of
                  { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                  (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                   { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                       (case (_lhsIopts) of
                        { _bindMetaOopts | _bindMetaOopts `seq` (True) ->
                        (case (_lhsIlev) of
                         { _bindMetaOlev | _bindMetaOlev `seq` (True) ->
                         (case (bindMeta_ _bindMetaOlev _bindMetaOopts) of
                          { ( _bindMetaIcTrf) | True ->
                              (case (CBound_Bind _bindMetaIcTrf _exprIcTrf) of
                               { _cTrf | _cTrf `seq` (True) ->
                               (case (_cTrf) of
                                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                (case (Prop_None) of
                                 { _propUp | _propUp `seq` (True) ->
                                 (case (_propUp) of
                                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                  ( _lhsOcTrf,_lhsOpropUp) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBound_Meta :: ACoreBindAspectKeyS ->
                   T_CMetas ->
                   T_CBound
sem_CBound_Meta aspectKeyS_ cmetas_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (_lhsIopts) of
          { _cmetasOopts | _cmetasOopts `seq` (True) ->
          (case (_lhsIlev) of
           { _cmetasOlev | _cmetasOlev `seq` (True) ->
           (case (cmetas_ _cmetasOlev _cmetasOopts) of
            { ( _cmetasIcTrf) | True ->
                (case (CBound_Meta aspectKeyS_ _cmetasIcTrf) of
                 { _cTrf | _cTrf `seq` (True) ->
                 (case (_cTrf) of
                  { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                  (case (Prop_None) of
                   { _propUp | _propUp `seq` (True) ->
                   (case (_propUp) of
                    { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                    ( _lhsOcTrf,_lhsOpropUp) }) }) }) }) }) }) }))
sem_CBound_RelevTy :: ACoreBindAspectKeyS ->
                      RelevTy ->
                      T_CBound
sem_CBound_RelevTy aspectKeyS_ relevTy_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (CBound_RelevTy aspectKeyS_ relevTy_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case (Prop_None) of
            { _propUp | _propUp `seq` (True) ->
            (case (_propUp) of
             { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
             ( _lhsOcTrf,_lhsOpropUp) }) }) }) }))
sem_CBound_Val :: ACoreBindAspectKeyS ->
                  MetaLev ->
                  CLbl ->
                  T_CExpr ->
                  T_CBound
sem_CBound_Val aspectKeyS_ mlev_ lbl_ expr_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (Prop_None) of
          { _propDown | _propDown `seq` (True) ->
          (case (_propDown) of
           { _exprOpropDown | _exprOpropDown `seq` (True) ->
           (case (_lhsIopts) of
            { _exprOopts | _exprOopts `seq` (True) ->
            (case (_lhsIisTopApp) of
             { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
             (case (ExprIsBind) of
              { _whatAbove | _whatAbove `seq` (True) ->
              (case (_whatAbove) of
               { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
               (case (_lhsIlev) of
                { _exprOlev | _exprOlev `seq` (True) ->
                (case (_lhsIisTopTup) of
                 { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                 (case (_lhsIevalCtx) of
                  { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                  (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                   { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                       (case (CBound_Val aspectKeyS_ mlev_ lbl_ _exprIcTrf) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         (case (_exprIpropUp) of
                          { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                          ( _lhsOcTrf,_lhsOpropUp) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBound_Ty :: ACoreBindAspectKeyS ->
                 Ty ->
                 T_CBound
sem_CBound_Ty aspectKeyS_ ty_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (CBound_Ty aspectKeyS_ ty_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case (Prop_None) of
            { _propUp | _propUp `seq` (True) ->
            (case (_propUp) of
             { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
             ( _lhsOcTrf,_lhsOpropUp) }) }) }) }))
sem_CBound_FFE :: FFIWay ->
                  ForeignEnt ->
                  T_CExpr ->
                  Ty ->
                  T_CBound
sem_CBound_FFE callconv_ expEnt_ expr_ ty_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts
       _lhsIpropDown ->
         (case (Prop_None) of
          { _propDown | _propDown `seq` (True) ->
          (case (_propDown) of
           { _exprOpropDown | _exprOpropDown `seq` (True) ->
           (case (_lhsIopts) of
            { _exprOopts | _exprOopts `seq` (True) ->
            (case (True) of
             { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
             (case (ExprIsLam 0) of
              { _whatAbove | _whatAbove `seq` (True) ->
              (case (_whatAbove) of
               { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
               (case (_lhsIlev) of
                { _exprOlev | _exprOlev `seq` (True) ->
                (case (_lhsIevalCtx) of
                 { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                 (case (True) of
                  { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                  (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                   { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                       (case (CBound_FFE callconv_ expEnt_ _exprIcTrf ty_) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         (case (Prop_None) of
                          { _propUp | _propUp `seq` (True) ->
                          (case (_propUp) of
                           { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                           ( _lhsOcTrf,_lhsOpropUp) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CBoundL -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         isGlobal             : Bool
         letBindingsCateg     : CBindCateg
         lev                  : Int
         nm                   : HsName
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CBoundL 
   alternatives:
      alternative Cons:
         child hd             : CBound 
         child tl             : CBoundL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CBoundL :: CBoundL ->
               T_CBoundL
sem_CBoundL list =
    (Prelude.foldr sem_CBoundL_Cons sem_CBoundL_Nil (Prelude.map sem_CBound list))
-- semantic domain
type T_CBoundL = EvalCtx ->
                 Bool ->
                 CBindCateg ->
                 Int ->
                 HsName ->
                 EHCOpts ->
                 ( CBoundL)
sem_CBoundL_Cons :: T_CBound ->
                    T_CBoundL ->
                    T_CBoundL
sem_CBoundL_Cons hd_ tl_ =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts | _tlOopts `seq` (True) ->
          (case (_lhsIopts) of
           { _hdOopts | _hdOopts `seq` (True) ->
           (case (True) of
            { _hdOisTopApp | _hdOisTopApp `seq` (True) ->
            (case (_lhsInm) of
             { _tlOnm | _tlOnm `seq` (True) ->
             (case (_lhsIlev) of
              { _tlOlev | _tlOlev `seq` (True) ->
              (case (_lhsIletBindingsCateg) of
               { _tlOletBindingsCateg | _tlOletBindingsCateg `seq` (True) ->
               (case (_lhsIisGlobal) of
                { _tlOisGlobal | _tlOisGlobal `seq` (True) ->
                (case (_lhsIevalCtx) of
                 { _tlOevalCtx | _tlOevalCtx `seq` (True) ->
                 (case (tl_ _tlOevalCtx _tlOisGlobal _tlOletBindingsCateg _tlOlev _tlOnm _tlOopts) of
                  { ( _tlIcTrf) | True ->
                      (case (_lhsInm) of
                       { _hdOnm | _hdOnm `seq` (True) ->
                       (case (_lhsIlev) of
                        { _hdOlev | _hdOlev `seq` (True) ->
                        (case (_lhsIletBindingsCateg) of
                         { _hdOletBindingsCateg | _hdOletBindingsCateg `seq` (True) ->
                         (case (_lhsIisGlobal) of
                          { _hdOisGlobal | _hdOisGlobal `seq` (True) ->
                          (case (_lhsIevalCtx) of
                           { _hdOevalCtx | _hdOevalCtx `seq` (True) ->
                           (case (Prop_None) of
                            { _hdOpropDown | _hdOpropDown `seq` (True) ->
                            (case (True) of
                             { _hdOisTopTup | _hdOisTopTup `seq` (True) ->
                             (case (hd_ _hdOevalCtx _hdOisGlobal _hdOisTopApp _hdOisTopTup _hdOletBindingsCateg _hdOlev _hdOnm _hdOopts _hdOpropDown) of
                              { ( _hdIcTrf,_hdIpropUp) | True ->
                                  (case ((:) _hdIcTrf _tlIcTrf) of
                                   { _cTrf | _cTrf `seq` (True) ->
                                   (case (_cTrf) of
                                    { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                    ( _lhsOcTrf) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
    (\ _lhsIevalCtx
       _lhsIisGlobal
       _lhsIletBindingsCateg
       _lhsIlev
       _lhsInm
       _lhsIopts ->
         (case ([]) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CDataCon ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDataCon 
   alternatives:
      alternative Con:
         child conNm          : {HsName}
         child tagNr          : {Int}
         child arity          : {Int}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDataCon :: CDataCon ->
                T_CDataCon
sem_CDataCon (CDataCon_Con _conNm _tagNr _arity) =
    (sem_CDataCon_Con _conNm _tagNr _arity)
-- semantic domain
type T_CDataCon = ( CDataCon)
sem_CDataCon_Con :: HsName ->
                    Int ->
                    Int ->
                    T_CDataCon
sem_CDataCon_Con conNm_ tagNr_ arity_ =
    (case (CDataCon_Con conNm_ tagNr_ arity_) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CDataConL ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDataConL 
   alternatives:
      alternative Cons:
         child hd             : CDataCon 
         child tl             : CDataConL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDataConL :: CDataConL ->
                 T_CDataConL
sem_CDataConL list =
    (Prelude.foldr sem_CDataConL_Cons sem_CDataConL_Nil (Prelude.map sem_CDataCon list))
-- semantic domain
type T_CDataConL = ( CDataConL)
sem_CDataConL_Cons :: T_CDataCon ->
                      T_CDataConL ->
                      T_CDataConL
sem_CDataConL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIcTrf) | True ->
         (case (hd_) of
          { ( _hdIcTrf) | True ->
              (case ((:) _hdIcTrf _tlIcTrf) of
               { _cTrf | _cTrf `seq` (True) ->
               (case (_cTrf) of
                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                ( _lhsOcTrf) }) }) }) })
sem_CDataConL_Nil :: T_CDataConL
sem_CDataConL_Nil =
    (case ([]) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CDeclMeta ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDeclMeta 
   alternatives:
      alternative Data:
         child tyNm           : {HsName}
         child dataCons       : CDataConL 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDeclMeta :: CDeclMeta ->
                 T_CDeclMeta
sem_CDeclMeta (CDeclMeta_Data _tyNm _dataCons) =
    (sem_CDeclMeta_Data _tyNm (sem_CDataConL _dataCons))
-- semantic domain
type T_CDeclMeta = ( CDeclMeta)
sem_CDeclMeta_Data :: HsName ->
                      T_CDataConL ->
                      T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
    (case (dataCons_) of
     { ( _dataConsIcTrf) | True ->
         (case (CDeclMeta_Data tyNm_ _dataConsIcTrf) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }) })
-- CDeclMetaL --------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CDeclMetaL 
   alternatives:
      alternative Cons:
         child hd             : CDeclMeta 
         child tl             : CDeclMetaL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CDeclMetaL :: CDeclMetaL ->
                  T_CDeclMetaL
sem_CDeclMetaL list =
    (Prelude.foldr sem_CDeclMetaL_Cons sem_CDeclMetaL_Nil (Prelude.map sem_CDeclMeta list))
-- semantic domain
type T_CDeclMetaL = ( CDeclMetaL)
sem_CDeclMetaL_Cons :: T_CDeclMeta ->
                       T_CDeclMetaL ->
                       T_CDeclMetaL
sem_CDeclMetaL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIcTrf) | True ->
         (case (hd_) of
          { ( _hdIcTrf) | True ->
              (case ((:) _hdIcTrf _tlIcTrf) of
               { _cTrf | _cTrf `seq` (True) ->
               (case (_cTrf) of
                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                ( _lhsOcTrf) }) }) }) })
sem_CDeclMetaL_Nil :: T_CDeclMetaL
sem_CDeclMetaL_Nil =
    (case ([]) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CExport -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CExport 
   alternatives:
      alternative Export:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExport :: CExport ->
               T_CExport
sem_CExport (CExport_Export _nm) =
    (sem_CExport_Export _nm)
-- semantic domain
type T_CExport = ( CExport)
sem_CExport_Export :: HsName ->
                      T_CExport
sem_CExport_Export nm_ =
    (case (CExport_Export nm_) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CExportL ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CExportL 
   alternatives:
      alternative Cons:
         child hd             : CExport 
         child tl             : CExportL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CExportL :: CExportL ->
                T_CExportL
sem_CExportL list =
    (Prelude.foldr sem_CExportL_Cons sem_CExportL_Nil (Prelude.map sem_CExport list))
-- semantic domain
type T_CExportL = ( CExportL)
sem_CExportL_Cons :: T_CExport ->
                     T_CExportL ->
                     T_CExportL
sem_CExportL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIcTrf) | True ->
         (case (hd_) of
          { ( _hdIcTrf) | True ->
              (case ((:) _hdIcTrf _tlIcTrf) of
               { _cTrf | _cTrf `seq` (True) ->
               (case (_cTrf) of
                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                ( _lhsOcTrf) }) }) }) })
sem_CExportL_Nil :: T_CExportL
sem_CExportL_Nil =
    (case ([]) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CExpr -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         evalCtx              : EvalCtx
         isTopApp             : Bool
         isTopTup             : Bool
         lev                  : Int
         opts                 : EHCOpts
         propDown             : Prop
         whatAbove            : WhatExpr
      synthesized attributes:
         appFunKind           : AppFunKind
         argL                 : [CBound]
         cTrf                 : CExpr 
         mbFunVar             : Maybe HsName
         mbLam                : Maybe [HsName]
         mbVar                : Maybe HsName
         propUp               : Prop
         propUpL              : [Prop]
         whatBelow            : WhatExpr
   alternatives:
      alternative Var:
         child ref            : {ACoreBindRef}
         visit 0:
            local cTrf        : _
            local nm          : {HsName}
            local mbVar       : {Maybe HsName}
            local propUp      : _
            local whatBelow   : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative String:
         child str            : {String}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Integer:
         child integer        : {Integer}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Tup:
         child tag            : {CTag}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Let:
         child categ          : {CBindCateg}
         child binds          : CBindL 
         child body           : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local evalCtx     : _
            local letBindingsCateg : _
            local isGlobal    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative App:
         child func           : CExpr 
         child arg            : CBound 
         visit 0:
            local whatAbove   : {WhatExpr}
            local propDown    : _
            local isTopTup    : _
            local letBindingsCateg : _
            local isGlobal    : _
            local argL        : _
            local cTrf        : _
            local propUpL     : _
            local propUp      : _
            local whatBelow   : _
      alternative Lam:
         child bind           : CBind 
         child body           : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local lev         : _
            local isTopTup    : _
            local letBindingsCateg : _
            local isGlobal    : _
            local cTrf        : _
            local argNm       : _
            local propUp      : _
            local whatBelow   : _
      alternative Case:
         child expr           : CExpr 
         child alts           : CAltL 
         child dflt           : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative CaseAltFail:
         child failReason     : {CaseAltFailReason}
         child errorExpr      : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local isTopApp    : {Bool}
            local cTrf        : _
            local propUp      : _
      alternative TupDel:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative TupIns:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative TupUpd:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative FFI:
         child callconv       : {FFIWay}
         child safety         : {String}
         child impEnt         : {ForeignEnt}
         child ty             : {Ty}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Dbg:
         child info           : {String}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Hole:
         child uid            : {UID}
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative HoleLet:
         child bindsUid       : {UID}
         child body           : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative CoeArg:
         visit 0:
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative ImplsApp:
         child func           : CExpr 
         child uid            : {ImplsVarId}
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative ImplsLam:
         child uid            : {ImplsVarId}
         child body           : CExpr 
         visit 0:
            local isTopApp    : {Bool}
            local whatAbove   : {WhatExpr}
            local isTopTup    : _
            local cTrf        : _
            local propUp      : _
            local whatBelow   : _
      alternative Ann:
         child ann            : CExprAnn 
         child expr           : CExpr 
         visit 0:
            local cTrf        : _
            local propUp      : _
-}
-- 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 = EvalCtx ->
               Bool ->
               Bool ->
               Int ->
               EHCOpts ->
               Prop ->
               WhatExpr ->
               ( AppFunKind,([CBound]),CExpr,(Maybe HsName),(Maybe [HsName]),(Maybe HsName),Prop,([Prop]),WhatExpr)
sem_CExpr_Var :: ACoreBindRef ->
                 T_CExpr
sem_CExpr_Var ref_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_Fun ref_) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Var ref_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (acbrefNm ref_) of
              { _nm | _nm `seq` (True) ->
              (case (Just _nm) of
               { _mbVar | _mbVar `seq` (True) ->
               (case (_mbVar) of
                { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                (case (Nothing) of
                 { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                 (case (_mbVar) of
                  { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                  (case (Prop_None) of
                   { _propUp | _propUp `seq` (True) ->
                   (case (_propUp) of
                    { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                    (case ([]) of
                     { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                     (case (ExprIsVar _nm) of
                      { _whatBelow | _whatBelow `seq` (True) ->
                      (case (_whatBelow) of
                       { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                       ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Int :: Int ->
                 T_CExpr
sem_CExpr_Int int_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Int int_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsInt int_) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Char :: Char ->
                  T_CExpr
sem_CExpr_Char char_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Char char_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOtherWHNF) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_String :: String ->
                    T_CExpr
sem_CExpr_String str_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_String str_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOtherWHNF) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Integer :: Integer ->
                     T_CExpr
sem_CExpr_Integer integer_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Integer integer_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOtherWHNF) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Tup :: CTag ->
                 T_CExpr
sem_CExpr_Tup tag_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_Tag tag_) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Tup tag_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsTup tag_) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Let :: CBindCateg ->
                 T_CBindL ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Let categ_ binds_ body_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _bodyOpropDown | _bodyOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _bodyOopts | _bodyOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _bodyOisTopApp | _bodyOisTopApp `seq` (True) ->
               (case (_lhsIopts) of
                { _bindsOopts | _bindsOopts `seq` (True) ->
                (case (ExprIsOther) of
                 { _whatAbove | _whatAbove `seq` (True) ->
                 (case (_whatAbove) of
                  { _bodyOwhatAbove | _bodyOwhatAbove `seq` (True) ->
                  (case (_lhsIlev) of
                   { _bodyOlev | _bodyOlev `seq` (True) ->
                   (case (True) of
                    { _isTopTup | _isTopTup `seq` (True) ->
                    (case (_isTopTup) of
                     { _bodyOisTopTup | _bodyOisTopTup `seq` (True) ->
                     (case (if categ_ == CBindCateg_Strict
                            then EvalCtx_Eval
                            else EvalCtx_Thunk) of
                      { _evalCtx | _evalCtx `seq` (True) ->
                      (case (_evalCtx) of
                       { _bodyOevalCtx | _bodyOevalCtx `seq` (True) ->
                       (case (body_ _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOpropDown _bodyOwhatAbove) of
                        { ( _bodyIappFunKind,_bodyIargL,_bodyIcTrf,_bodyImbFunVar,_bodyImbLam,_bodyImbVar,_bodyIpropUp,_bodyIpropUpL,_bodyIwhatBelow) | True ->
                            (case (_lhsIlev) of
                             { _bindsOlev | _bindsOlev `seq` (True) ->
                             (case (categ_) of
                              { _letBindingsCateg | _letBindingsCateg `seq` (True) ->
                              (case (_letBindingsCateg) of
                               { _bindsOletBindingsCateg | _bindsOletBindingsCateg `seq` (True) ->
                               (case (_lhsIlev == cLevModule) of
                                { _isGlobal | _isGlobal `seq` (True) ->
                                (case (_isGlobal) of
                                 { _bindsOisGlobal | _bindsOisGlobal `seq` (True) ->
                                 (case (_evalCtx) of
                                  { _bindsOevalCtx | _bindsOevalCtx `seq` (True) ->
                                  (case (binds_ _bindsOevalCtx _bindsOisGlobal _bindsOletBindingsCateg _bindsOlev _bindsOopts) of
                                   { ( _bindsIcTrf) | True ->
                                       (case (CExpr_Let categ_ _bindsIcTrf _bodyIcTrf) of
                                        { _cTrf | _cTrf `seq` (True) ->
                                        (case (_cTrf) of
                                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                         (case (Nothing) of
                                          { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                          (case (Nothing) of
                                           { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                           (case (Nothing) of
                                            { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                            (case (Prop_None) of
                                             { _propUp | _propUp `seq` (True) ->
                                             (case (_propUp) of
                                              { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                              (case ([]) of
                                               { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                               (case (ExprIsOther) of
                                                { _whatBelow | _whatBelow `seq` (True) ->
                                                (case (_whatBelow) of
                                                 { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                 ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_App :: T_CExpr ->
                 T_CBound ->
                 T_CExpr
sem_CExpr_App func_ arg_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (maybe (ExprIsApp 1 ExprIsOther) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _lhsIwhatAbove) of
          { _whatAbove | _whatAbove `seq` (True) ->
          (case (_whatAbove) of
           { _funcOwhatAbove | _funcOwhatAbove `seq` (True) ->
           (case (Prop_None) of
            { _propDown | _propDown `seq` (True) ->
            (case (_propDown) of
             { _funcOpropDown | _funcOpropDown `seq` (True) ->
             (case (_lhsIopts) of
              { _funcOopts | _funcOopts `seq` (True) ->
              (case (_lhsIlev) of
               { _funcOlev | _funcOlev `seq` (True) ->
               (case (True) of
                { _isTopTup | _isTopTup `seq` (True) ->
                (case (_isTopTup) of
                 { _funcOisTopTup | _funcOisTopTup `seq` (True) ->
                 (case (_lhsIevalCtx) of
                  { _funcOevalCtx | _funcOevalCtx `seq` (True) ->
                  (case (False) of
                   { _funcOisTopApp | _funcOisTopApp `seq` (True) ->
                   (case (func_ _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlev _funcOopts _funcOpropDown _funcOwhatAbove) of
                    { ( _funcIappFunKind,_funcIargL,_funcIcTrf,_funcImbFunVar,_funcImbLam,_funcImbVar,_funcIpropUp,_funcIpropUpL,_funcIwhatBelow) | True ->
                        (case (_funcIappFunKind) of
                         { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
                         (case (_lhsIopts) of
                          { _argOopts | _argOopts `seq` (True) ->
                          (case (True) of
                           { _argOisTopApp | _argOisTopApp `seq` (True) ->
                           (case (_propDown) of
                            { _argOpropDown | _argOpropDown `seq` (True) ->
                            (case (_lhsIlev) of
                             { _argOlev | _argOlev `seq` (True) ->
                             (case (acoreBindcategPlain) of
                              { _letBindingsCateg | _letBindingsCateg `seq` (True) ->
                              (case (_letBindingsCateg) of
                               { _argOletBindingsCateg | _argOletBindingsCateg `seq` (True) ->
                               (case (_isTopTup) of
                                { _argOisTopTup | _argOisTopTup `seq` (True) ->
                                (case (False) of
                                 { _isGlobal | _isGlobal `seq` (True) ->
                                 (case (_isGlobal) of
                                  { _argOisGlobal | _argOisGlobal `seq` (True) ->
                                  (case (EvalCtx_Thunk) of
                                   { _argOevalCtx | _argOevalCtx `seq` (True) ->
                                   (case (hsnUnknown) of
                                    { _argOnm | _argOnm `seq` (True) ->
                                    (case (arg_ _argOevalCtx _argOisGlobal _argOisTopApp _argOisTopTup _argOletBindingsCateg _argOlev _argOnm _argOopts _argOpropDown) of
                                     { ( _argIcTrf,_argIpropUp) | True ->
                                         (case (_argIcTrf : _funcIargL) of
                                          { _argL | _argL `seq` (True) ->
                                          (case (_argL) of
                                           { _lhsOargL | _lhsOargL `seq` (True) ->
                                           (case (CExpr_App _funcIcTrf _argIcTrf) of
                                            { _cTrf | _cTrf `seq` (True) ->
                                            (case (_argIpropUp : _funcIpropUpL) of
                                             { _propUpL | _propUpL `seq` (True) ->
                                             (case (if _lhsIisTopApp
                                                    then case (_funcImbFunVar,reverse (zip (map acoreUnBoundVal _argL) _propUpL),_lhsIpropDown) of
                                                           (Just f,[(CExpr_String s,_)],_)
                                                             |    f == (ehcOptBuiltin _lhsIopts ehbnPackedStringToInteger)
                                                             -> Prop_IsIntegerConst $ read s
                                                           (Just f,[_,(e,Prop_IsIntegerConst i)],Prop_HasTy t)
                                                             |    f == (ehcOptBuiltin _lhsIopts ehbnFromInteger)
                                                             -> if t == tyInt
                                                                then
                                                                     Prop_IsIntConst $ fromInteger i
                                                                else if t == tyInteger
                                                                then
                                                                     if signedFitsInBits 30 i
                                                                     then Prop_IsInteger $ acoreApp (acoreVar $ ehcOptBuiltin _lhsIopts ehbnPrimIntToInteger) [acoreInt2 _lhsIopts i]
                                                                     else Prop_IsInteger e
                                                                else Prop_None
                                                           _ -> Prop_None
                                                    else Prop_None) of
                                              { _propUp | _propUp `seq` (True) ->
                                              (case (case _propUp of
                                                       Prop_IsIntConst i
                                                         -> acoreInt _lhsIopts i
                                                       Prop_IsInteger e
                                                         -> e
                                                       _ -> _cTrf) of
                                               { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                               (case (_funcImbFunVar) of
                                                { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                                (case (Nothing) of
                                                 { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                                 (case (Nothing) of
                                                  { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                                  (case (_propUp) of
                                                   { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                                   (case (_propUpL) of
                                                    { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                                    (case (maybe (ExprIsApp 1 _funcIwhatBelow) (\(a,w) -> ExprIsApp (a + 1) w) $ whatExprMbApp _funcIwhatBelow) of
                                                     { _whatBelow | _whatBelow `seq` (True) ->
                                                     (case (_whatBelow) of
                                                      { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                      ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Lam :: T_CBind ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Lam bind_ body_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _bodyOpropDown | _bodyOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _bodyOopts | _bodyOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _bodyOisTopApp | _bodyOisTopApp `seq` (True) ->
               (case (_lhsIopts) of
                { _bindOopts | _bindOopts `seq` (True) ->
                (case (maybe (ExprIsLam 1) (\a -> ExprIsLam $ a + 1) $ whatExprMbLam _lhsIwhatAbove) of
                 { _whatAbove | _whatAbove `seq` (True) ->
                 (case (_whatAbove) of
                  { _bodyOwhatAbove | _bodyOwhatAbove `seq` (True) ->
                  (case (_lhsIlev + 1) of
                   { _lev | _lev `seq` (True) ->
                   (case (_lev) of
                    { _bodyOlev | _bodyOlev `seq` (True) ->
                    (case (True) of
                     { _isTopTup | _isTopTup `seq` (True) ->
                     (case (_isTopTup) of
                      { _bodyOisTopTup | _bodyOisTopTup `seq` (True) ->
                      (case (_lhsIevalCtx) of
                       { _bodyOevalCtx | _bodyOevalCtx `seq` (True) ->
                       (case (body_ _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOpropDown _bodyOwhatAbove) of
                        { ( _bodyIappFunKind,_bodyIargL,_bodyIcTrf,_bodyImbFunVar,_bodyImbLam,_bodyImbVar,_bodyIpropUp,_bodyIpropUpL,_bodyIwhatBelow) | True ->
                            (case (_lev) of
                             { _bindOlev | _bindOlev `seq` (True) ->
                             (case (acoreBindcategPlain) of
                              { _letBindingsCateg | _letBindingsCateg `seq` (True) ->
                              (case (_letBindingsCateg) of
                               { _bindOletBindingsCateg | _bindOletBindingsCateg `seq` (True) ->
                               (case (False) of
                                { _isGlobal | _isGlobal `seq` (True) ->
                                (case (_isGlobal) of
                                 { _bindOisGlobal | _bindOisGlobal `seq` (True) ->
                                 (case (_lhsIevalCtx) of
                                  { _bindOevalCtx | _bindOevalCtx `seq` (True) ->
                                  (case (bind_ _bindOevalCtx _bindOisGlobal _bindOletBindingsCateg _bindOlev _bindOopts) of
                                   { ( _bindIcTrf,_bindInm) | True ->
                                       (case (CExpr_Lam _bindIcTrf _bodyIcTrf) of
                                        { _cTrf | _cTrf `seq` (True) ->
                                        (case (_cTrf) of
                                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                         (case (Nothing) of
                                          { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                          (case (_bindInm) of
                                           { _argNm | _argNm `seq` (True) ->
                                           (case (Just $ maybe [_argNm] (_argNm:) _bodyImbLam) of
                                            { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                            (case (Nothing) of
                                             { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                             (case (Prop_None) of
                                              { _propUp | _propUp `seq` (True) ->
                                              (case (_propUp) of
                                               { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                               (case ([]) of
                                                { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                                (case (maybe (ExprIsLam 1) (\a -> ExprIsLam $ a + 1) $ whatExprMbLam _bodyIwhatBelow) of
                                                 { _whatBelow | _whatBelow `seq` (True) ->
                                                 (case (_whatBelow) of
                                                  { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                  ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Case :: T_CExpr ->
                  T_CAltL ->
                  T_CExpr ->
                  T_CExpr
sem_CExpr_Case expr_ alts_ dflt_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _dfltOpropDown | _dfltOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _dfltOopts | _dfltOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _dfltOisTopApp | _dfltOisTopApp `seq` (True) ->
               (case (_lhsIpropDown) of
                { _altsOpropDown | _altsOpropDown `seq` (True) ->
                (case (_lhsIopts) of
                 { _altsOopts | _altsOopts `seq` (True) ->
                 (case (_lhsIpropDown) of
                  { _exprOpropDown | _exprOpropDown `seq` (True) ->
                  (case (_lhsIopts) of
                   { _exprOopts | _exprOopts `seq` (True) ->
                   (case (_isTopApp) of
                    { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
                    (case (ExprIsOther) of
                     { _whatAbove | _whatAbove `seq` (True) ->
                     (case (_whatAbove) of
                      { _dfltOwhatAbove | _dfltOwhatAbove `seq` (True) ->
                      (case (_lhsIlev) of
                       { _dfltOlev | _dfltOlev `seq` (True) ->
                       (case (True) of
                        { _isTopTup | _isTopTup `seq` (True) ->
                        (case (_isTopTup) of
                         { _dfltOisTopTup | _dfltOisTopTup `seq` (True) ->
                         (case (_lhsIevalCtx) of
                          { _dfltOevalCtx | _dfltOevalCtx `seq` (True) ->
                          (case (dflt_ _dfltOevalCtx _dfltOisTopApp _dfltOisTopTup _dfltOlev _dfltOopts _dfltOpropDown _dfltOwhatAbove) of
                           { ( _dfltIappFunKind,_dfltIargL,_dfltIcTrf,_dfltImbFunVar,_dfltImbLam,_dfltImbVar,_dfltIpropUp,_dfltIpropUpL,_dfltIwhatBelow) | True ->
                               (case (_lhsIlev) of
                                { _altsOlev | _altsOlev `seq` (True) ->
                                (case (_lhsIevalCtx) of
                                 { _altsOevalCtx | _altsOevalCtx `seq` (True) ->
                                 (case (alts_ _altsOevalCtx _altsOlev _altsOopts _altsOpropDown) of
                                  { ( _altsIcTrf) | True ->
                                      (case (_whatAbove) of
                                       { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
                                       (case (_lhsIlev) of
                                        { _exprOlev | _exprOlev `seq` (True) ->
                                        (case (_isTopTup) of
                                         { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                                         (case (_lhsIevalCtx) of
                                          { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                                          (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                                           { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                                               (case (CExpr_Case _exprIcTrf _altsIcTrf _dfltIcTrf) of
                                                { _cTrf | _cTrf `seq` (True) ->
                                                (case (_cTrf) of
                                                 { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                                 (case (Nothing) of
                                                  { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                                  (case (Nothing) of
                                                   { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                                   (case (Nothing) of
                                                    { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                                    (case (Prop_None) of
                                                     { _propUp | _propUp `seq` (True) ->
                                                     (case (_propUp) of
                                                      { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                                      (case ([]) of
                                                       { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                                       (case (ExprIsOther) of
                                                        { _whatBelow | _whatBelow `seq` (True) ->
                                                        (case (_whatBelow) of
                                                         { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                         ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_CaseAltFail :: CaseAltFailReason ->
                         T_CExpr ->
                         T_CExpr
sem_CExpr_CaseAltFail failReason_ errorExpr_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (ExprIsOther) of
          { _whatAbove | _whatAbove `seq` (True) ->
          (case (_whatAbove) of
           { _errorExprOwhatAbove | _errorExprOwhatAbove `seq` (True) ->
           (case (_lhsIpropDown) of
            { _errorExprOpropDown | _errorExprOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _errorExprOopts | _errorExprOopts `seq` (True) ->
             (case (_lhsIlev) of
              { _errorExprOlev | _errorExprOlev `seq` (True) ->
              (case (True) of
               { _isTopTup | _isTopTup `seq` (True) ->
               (case (_isTopTup) of
                { _errorExprOisTopTup | _errorExprOisTopTup `seq` (True) ->
                (case (True) of
                 { _isTopApp | _isTopApp `seq` (True) ->
                 (case (_isTopApp) of
                  { _errorExprOisTopApp | _errorExprOisTopApp `seq` (True) ->
                  (case (_lhsIevalCtx) of
                   { _errorExprOevalCtx | _errorExprOevalCtx `seq` (True) ->
                   (case (errorExpr_ _errorExprOevalCtx _errorExprOisTopApp _errorExprOisTopTup _errorExprOlev _errorExprOopts _errorExprOpropDown _errorExprOwhatAbove) of
                    { ( _errorExprIappFunKind,_errorExprIargL,_errorExprIcTrf,_errorExprImbFunVar,_errorExprImbLam,_errorExprImbVar,_errorExprIpropUp,_errorExprIpropUpL,_errorExprIwhatBelow) | True ->
                        (case (_errorExprIappFunKind) of
                         { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
                         (case (_errorExprIargL) of
                          { _lhsOargL | _lhsOargL `seq` (True) ->
                          (case (CExpr_CaseAltFail failReason_ _errorExprIcTrf) of
                           { _cTrf | _cTrf `seq` (True) ->
                           (case (_cTrf) of
                            { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                            (case (_errorExprImbFunVar) of
                             { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                             (case (_errorExprImbLam) of
                              { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                              (case (_errorExprImbVar) of
                               { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                               (case (Prop_None) of
                                { _propUp | _propUp `seq` (True) ->
                                (case (_propUp) of
                                 { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                 (case ([]) of
                                  { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                  (case (_errorExprIwhatBelow) of
                                   { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                   ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupDel :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupDel expr_ tag_ nm_ offset_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _offsetOpropDown | _offsetOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _offsetOopts | _offsetOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _offsetOisTopApp | _offsetOisTopApp `seq` (True) ->
               (case (_lhsIpropDown) of
                { _exprOpropDown | _exprOpropDown `seq` (True) ->
                (case (_lhsIopts) of
                 { _exprOopts | _exprOopts `seq` (True) ->
                 (case (_isTopApp) of
                  { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
                  (case (ExprIsOther) of
                   { _whatAbove | _whatAbove `seq` (True) ->
                   (case (_whatAbove) of
                    { _offsetOwhatAbove | _offsetOwhatAbove `seq` (True) ->
                    (case (_lhsIlev) of
                     { _offsetOlev | _offsetOlev `seq` (True) ->
                     (case (True) of
                      { _isTopTup | _isTopTup `seq` (True) ->
                      (case (_isTopTup) of
                       { _offsetOisTopTup | _offsetOisTopTup `seq` (True) ->
                       (case (_lhsIevalCtx) of
                        { _offsetOevalCtx | _offsetOevalCtx `seq` (True) ->
                        (case (offset_ _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOpropDown _offsetOwhatAbove) of
                         { ( _offsetIappFunKind,_offsetIargL,_offsetIcTrf,_offsetImbFunVar,_offsetImbLam,_offsetImbVar,_offsetIpropUp,_offsetIpropUpL,_offsetIwhatBelow) | True ->
                             (case (_whatAbove) of
                              { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
                              (case (_lhsIlev) of
                               { _exprOlev | _exprOlev `seq` (True) ->
                               (case (_lhsIevalCtx) of
                                { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                                (case (False) of
                                 { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                                 (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                                  { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                                      (case (CExpr_TupDel _exprIcTrf tag_ nm_ _offsetIcTrf) of
                                       { _cTrf | _cTrf `seq` (True) ->
                                       (case (_cTrf) of
                                        { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                        (case (Nothing) of
                                         { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                         (case (Nothing) of
                                          { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                          (case (Nothing) of
                                           { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                           (case (Prop_None) of
                                            { _propUp | _propUp `seq` (True) ->
                                            (case (_propUp) of
                                             { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                             (case ([]) of
                                              { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                              (case (ExprIsOther) of
                                               { _whatBelow | _whatBelow `seq` (True) ->
                                               (case (_whatBelow) of
                                                { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupIns :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupIns expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _fldExprOpropDown | _fldExprOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _fldExprOopts | _fldExprOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _fldExprOisTopApp | _fldExprOisTopApp `seq` (True) ->
               (case (_lhsIpropDown) of
                { _offsetOpropDown | _offsetOpropDown `seq` (True) ->
                (case (_lhsIopts) of
                 { _offsetOopts | _offsetOopts `seq` (True) ->
                 (case (_isTopApp) of
                  { _offsetOisTopApp | _offsetOisTopApp `seq` (True) ->
                  (case (_lhsIpropDown) of
                   { _exprOpropDown | _exprOpropDown `seq` (True) ->
                   (case (_lhsIopts) of
                    { _exprOopts | _exprOopts `seq` (True) ->
                    (case (_isTopApp) of
                     { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
                     (case (ExprIsOther) of
                      { _whatAbove | _whatAbove `seq` (True) ->
                      (case (_whatAbove) of
                       { _fldExprOwhatAbove | _fldExprOwhatAbove `seq` (True) ->
                       (case (_lhsIlev) of
                        { _fldExprOlev | _fldExprOlev `seq` (True) ->
                        (case (True) of
                         { _isTopTup | _isTopTup `seq` (True) ->
                         (case (_isTopTup) of
                          { _fldExprOisTopTup | _fldExprOisTopTup `seq` (True) ->
                          (case (_lhsIevalCtx) of
                           { _fldExprOevalCtx | _fldExprOevalCtx `seq` (True) ->
                           (case (fldExpr_ _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlev _fldExprOopts _fldExprOpropDown _fldExprOwhatAbove) of
                            { ( _fldExprIappFunKind,_fldExprIargL,_fldExprIcTrf,_fldExprImbFunVar,_fldExprImbLam,_fldExprImbVar,_fldExprIpropUp,_fldExprIpropUpL,_fldExprIwhatBelow) | True ->
                                (case (_whatAbove) of
                                 { _offsetOwhatAbove | _offsetOwhatAbove `seq` (True) ->
                                 (case (_lhsIlev) of
                                  { _offsetOlev | _offsetOlev `seq` (True) ->
                                  (case (_isTopTup) of
                                   { _offsetOisTopTup | _offsetOisTopTup `seq` (True) ->
                                   (case (_lhsIevalCtx) of
                                    { _offsetOevalCtx | _offsetOevalCtx `seq` (True) ->
                                    (case (offset_ _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOpropDown _offsetOwhatAbove) of
                                     { ( _offsetIappFunKind,_offsetIargL,_offsetIcTrf,_offsetImbFunVar,_offsetImbLam,_offsetImbVar,_offsetIpropUp,_offsetIpropUpL,_offsetIwhatBelow) | True ->
                                         (case (_whatAbove) of
                                          { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
                                          (case (_lhsIlev) of
                                           { _exprOlev | _exprOlev `seq` (True) ->
                                           (case (_lhsIevalCtx) of
                                            { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                                            (case (False) of
                                             { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                                             (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                                              { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                                                  (case (CExpr_TupIns _exprIcTrf tag_ nm_ _offsetIcTrf _fldExprIcTrf) of
                                                   { _cTrf | _cTrf `seq` (True) ->
                                                   (case (_cTrf) of
                                                    { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                                       (case (Prop_None) of
                                                        { _propUp | _propUp `seq` (True) ->
                                                        (case (_propUp) of
                                                         { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                                         (case ([]) of
                                                          { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                                          (case (ExprIsOther) of
                                                           { _whatBelow | _whatBelow `seq` (True) ->
                                                           (case (_whatBelow) of
                                                            { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                            ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_TupUpd :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupUpd expr_ tag_ nm_ offset_ fldExpr_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _fldExprOpropDown | _fldExprOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _fldExprOopts | _fldExprOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _fldExprOisTopApp | _fldExprOisTopApp `seq` (True) ->
               (case (_lhsIpropDown) of
                { _offsetOpropDown | _offsetOpropDown `seq` (True) ->
                (case (_lhsIopts) of
                 { _offsetOopts | _offsetOopts `seq` (True) ->
                 (case (_isTopApp) of
                  { _offsetOisTopApp | _offsetOisTopApp `seq` (True) ->
                  (case (_lhsIpropDown) of
                   { _exprOpropDown | _exprOpropDown `seq` (True) ->
                   (case (_lhsIopts) of
                    { _exprOopts | _exprOopts `seq` (True) ->
                    (case (_isTopApp) of
                     { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
                     (case (ExprIsOther) of
                      { _whatAbove | _whatAbove `seq` (True) ->
                      (case (_whatAbove) of
                       { _fldExprOwhatAbove | _fldExprOwhatAbove `seq` (True) ->
                       (case (_lhsIlev) of
                        { _fldExprOlev | _fldExprOlev `seq` (True) ->
                        (case (True) of
                         { _isTopTup | _isTopTup `seq` (True) ->
                         (case (_isTopTup) of
                          { _fldExprOisTopTup | _fldExprOisTopTup `seq` (True) ->
                          (case (_lhsIevalCtx) of
                           { _fldExprOevalCtx | _fldExprOevalCtx `seq` (True) ->
                           (case (fldExpr_ _fldExprOevalCtx _fldExprOisTopApp _fldExprOisTopTup _fldExprOlev _fldExprOopts _fldExprOpropDown _fldExprOwhatAbove) of
                            { ( _fldExprIappFunKind,_fldExprIargL,_fldExprIcTrf,_fldExprImbFunVar,_fldExprImbLam,_fldExprImbVar,_fldExprIpropUp,_fldExprIpropUpL,_fldExprIwhatBelow) | True ->
                                (case (_whatAbove) of
                                 { _offsetOwhatAbove | _offsetOwhatAbove `seq` (True) ->
                                 (case (_lhsIlev) of
                                  { _offsetOlev | _offsetOlev `seq` (True) ->
                                  (case (_isTopTup) of
                                   { _offsetOisTopTup | _offsetOisTopTup `seq` (True) ->
                                   (case (_lhsIevalCtx) of
                                    { _offsetOevalCtx | _offsetOevalCtx `seq` (True) ->
                                    (case (offset_ _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOpropDown _offsetOwhatAbove) of
                                     { ( _offsetIappFunKind,_offsetIargL,_offsetIcTrf,_offsetImbFunVar,_offsetImbLam,_offsetImbVar,_offsetIpropUp,_offsetIpropUpL,_offsetIwhatBelow) | True ->
                                         (case (_whatAbove) of
                                          { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
                                          (case (_lhsIlev) of
                                           { _exprOlev | _exprOlev `seq` (True) ->
                                           (case (_lhsIevalCtx) of
                                            { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                                            (case (False) of
                                             { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                                             (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                                              { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                                                  (case (CExpr_TupUpd _exprIcTrf tag_ nm_ _offsetIcTrf _fldExprIcTrf) of
                                                   { _cTrf | _cTrf `seq` (True) ->
                                                   (case (_cTrf) of
                                                    { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                                    (case (Nothing) of
                                                     { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                                     (case (Nothing) of
                                                      { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                                      (case (Nothing) of
                                                       { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                                       (case (Prop_None) of
                                                        { _propUp | _propUp `seq` (True) ->
                                                        (case (_propUp) of
                                                         { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                                         (case ([]) of
                                                          { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                                          (case (ExprIsOther) of
                                                           { _whatBelow | _whatBelow `seq` (True) ->
                                                           (case (_whatBelow) of
                                                            { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                                            ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_FFI :: FFIWay ->
                 String ->
                 ForeignEnt ->
                 Ty ->
                 T_CExpr
sem_CExpr_FFI callconv_ safety_ impEnt_ ty_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_FFI) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_FFI callconv_ safety_ impEnt_ ty_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsFFI) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Dbg :: String ->
                 T_CExpr
sem_CExpr_Dbg info_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Dbg info_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOther) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Hole :: UID ->
                  T_CExpr
sem_CExpr_Hole uid_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_Hole uid_) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOther) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_HoleLet :: UID ->
                     T_CExpr ->
                     T_CExpr
sem_CExpr_HoleLet bindsUid_ body_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _bodyOpropDown | _bodyOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _bodyOopts | _bodyOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _bodyOisTopApp | _bodyOisTopApp `seq` (True) ->
               (case (ExprIsOther) of
                { _whatAbove | _whatAbove `seq` (True) ->
                (case (_whatAbove) of
                 { _bodyOwhatAbove | _bodyOwhatAbove `seq` (True) ->
                 (case (_lhsIlev) of
                  { _bodyOlev | _bodyOlev `seq` (True) ->
                  (case (True) of
                   { _isTopTup | _isTopTup `seq` (True) ->
                   (case (_isTopTup) of
                    { _bodyOisTopTup | _bodyOisTopTup `seq` (True) ->
                    (case (_lhsIevalCtx) of
                     { _bodyOevalCtx | _bodyOevalCtx `seq` (True) ->
                     (case (body_ _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOpropDown _bodyOwhatAbove) of
                      { ( _bodyIappFunKind,_bodyIargL,_bodyIcTrf,_bodyImbFunVar,_bodyImbLam,_bodyImbVar,_bodyIpropUp,_bodyIpropUpL,_bodyIwhatBelow) | True ->
                          (case (CExpr_HoleLet bindsUid_ _bodyIcTrf) of
                           { _cTrf | _cTrf `seq` (True) ->
                           (case (_cTrf) of
                            { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                            (case (Nothing) of
                             { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                             (case (Nothing) of
                              { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                              (case (Nothing) of
                               { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                               (case (Prop_None) of
                                { _propUp | _propUp `seq` (True) ->
                                (case (_propUp) of
                                 { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                 (case ([]) of
                                  { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                  (case (ExprIsOther) of
                                   { _whatBelow | _whatBelow `seq` (True) ->
                                   (case (_whatBelow) of
                                    { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                    ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_CoeArg :: T_CExpr
sem_CExpr_CoeArg =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (CExpr_CoeArg) of
            { _cTrf | _cTrf `seq` (True) ->
            (case (_cTrf) of
             { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
             (case (Nothing) of
              { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
              (case (Nothing) of
               { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
               (case (Nothing) of
                { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                (case (Prop_None) of
                 { _propUp | _propUp `seq` (True) ->
                 (case (_propUp) of
                  { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                  (case ([]) of
                   { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                   (case (ExprIsOther) of
                    { _whatBelow | _whatBelow `seq` (True) ->
                    (case (_whatBelow) of
                     { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                     ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_ImplsApp :: T_CExpr ->
                      ImplsVarId ->
                      T_CExpr
sem_CExpr_ImplsApp func_ uid_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _funcOpropDown | _funcOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _funcOopts | _funcOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _funcOisTopApp | _funcOisTopApp `seq` (True) ->
               (case (ExprIsOther) of
                { _whatAbove | _whatAbove `seq` (True) ->
                (case (_whatAbove) of
                 { _funcOwhatAbove | _funcOwhatAbove `seq` (True) ->
                 (case (_lhsIlev) of
                  { _funcOlev | _funcOlev `seq` (True) ->
                  (case (True) of
                   { _isTopTup | _isTopTup `seq` (True) ->
                   (case (_isTopTup) of
                    { _funcOisTopTup | _funcOisTopTup `seq` (True) ->
                    (case (_lhsIevalCtx) of
                     { _funcOevalCtx | _funcOevalCtx `seq` (True) ->
                     (case (func_ _funcOevalCtx _funcOisTopApp _funcOisTopTup _funcOlev _funcOopts _funcOpropDown _funcOwhatAbove) of
                      { ( _funcIappFunKind,_funcIargL,_funcIcTrf,_funcImbFunVar,_funcImbLam,_funcImbVar,_funcIpropUp,_funcIpropUpL,_funcIwhatBelow) | True ->
                          (case (CExpr_ImplsApp _funcIcTrf uid_) of
                           { _cTrf | _cTrf `seq` (True) ->
                           (case (_cTrf) of
                            { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                            (case (Nothing) of
                             { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                             (case (Nothing) of
                              { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                              (case (Nothing) of
                               { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                               (case (Prop_None) of
                                { _propUp | _propUp `seq` (True) ->
                                (case (_propUp) of
                                 { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                 (case ([]) of
                                  { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                  (case (ExprIsOther) of
                                   { _whatBelow | _whatBelow `seq` (True) ->
                                   (case (_whatBelow) of
                                    { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                    ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_ImplsLam :: ImplsVarId ->
                      T_CExpr ->
                      T_CExpr
sem_CExpr_ImplsLam uid_ body_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (AppFunKind_NoApp) of
          { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
          (case ([]) of
           { _lhsOargL | _lhsOargL `seq` (True) ->
           (case (_lhsIpropDown) of
            { _bodyOpropDown | _bodyOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _bodyOopts | _bodyOopts `seq` (True) ->
             (case (True) of
              { _isTopApp | _isTopApp `seq` (True) ->
              (case (_isTopApp) of
               { _bodyOisTopApp | _bodyOisTopApp `seq` (True) ->
               (case (ExprIsOther) of
                { _whatAbove | _whatAbove `seq` (True) ->
                (case (_whatAbove) of
                 { _bodyOwhatAbove | _bodyOwhatAbove `seq` (True) ->
                 (case (_lhsIlev) of
                  { _bodyOlev | _bodyOlev `seq` (True) ->
                  (case (True) of
                   { _isTopTup | _isTopTup `seq` (True) ->
                   (case (_isTopTup) of
                    { _bodyOisTopTup | _bodyOisTopTup `seq` (True) ->
                    (case (_lhsIevalCtx) of
                     { _bodyOevalCtx | _bodyOevalCtx `seq` (True) ->
                     (case (body_ _bodyOevalCtx _bodyOisTopApp _bodyOisTopTup _bodyOlev _bodyOopts _bodyOpropDown _bodyOwhatAbove) of
                      { ( _bodyIappFunKind,_bodyIargL,_bodyIcTrf,_bodyImbFunVar,_bodyImbLam,_bodyImbVar,_bodyIpropUp,_bodyIpropUpL,_bodyIwhatBelow) | True ->
                          (case (CExpr_ImplsLam uid_ _bodyIcTrf) of
                           { _cTrf | _cTrf `seq` (True) ->
                           (case (_cTrf) of
                            { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                            (case (Nothing) of
                             { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                             (case (Nothing) of
                              { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                              (case (Nothing) of
                               { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                               (case (Prop_None) of
                                { _propUp | _propUp `seq` (True) ->
                                (case (_propUp) of
                                 { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                 (case ([]) of
                                  { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                  (case (ExprIsOther) of
                                   { _whatBelow | _whatBelow `seq` (True) ->
                                   (case (_whatBelow) of
                                    { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                    ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
sem_CExpr_Ann :: T_CExprAnn ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Ann ann_ expr_ =
    (\ _lhsIevalCtx
       _lhsIisTopApp
       _lhsIisTopTup
       _lhsIlev
       _lhsIopts
       _lhsIpropDown
       _lhsIwhatAbove ->
         (case (_lhsIwhatAbove) of
          { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
          (case (_lhsIopts) of
           { _exprOopts | _exprOopts `seq` (True) ->
           (case (_lhsIlev) of
            { _exprOlev | _exprOlev `seq` (True) ->
            (case (_lhsIisTopTup) of
             { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
             (case (_lhsIisTopApp) of
              { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
              (case (_lhsIevalCtx) of
               { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
               (case (_lhsIopts) of
                { _annOopts | _annOopts `seq` (True) ->
                (case (_lhsIlev) of
                 { _annOlev | _annOlev `seq` (True) ->
                 (case (ann_ _annOlev _annOopts) of
                  { ( _annIcTrf,_annIprop) | True ->
                      (case (_annIprop) of
                       { _exprOpropDown | _exprOpropDown `seq` (True) ->
                       (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                        { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                            (case (_exprIappFunKind) of
                             { _lhsOappFunKind | _lhsOappFunKind `seq` (True) ->
                             (case (_exprIargL) of
                              { _lhsOargL | _lhsOargL `seq` (True) ->
                              (case (CExpr_Ann _annIcTrf _exprIcTrf) of
                               { _cTrf | _cTrf `seq` (True) ->
                               (case (_cTrf) of
                                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                (case (_exprImbFunVar) of
                                 { _lhsOmbFunVar | _lhsOmbFunVar `seq` (True) ->
                                 (case (_exprImbLam) of
                                  { _lhsOmbLam | _lhsOmbLam `seq` (True) ->
                                  (case (_exprImbVar) of
                                   { _lhsOmbVar | _lhsOmbVar `seq` (True) ->
                                   (case (Prop_None) of
                                    { _propUp | _propUp `seq` (True) ->
                                    (case (_propUp) of
                                     { _lhsOpropUp | _lhsOpropUp `seq` (True) ->
                                     (case (_exprIpropUpL) of
                                      { _lhsOpropUpL | _lhsOpropUpL `seq` (True) ->
                                      (case (_exprIwhatBelow) of
                                       { _lhsOwhatBelow | _lhsOwhatBelow `seq` (True) ->
                                       ( _lhsOappFunKind,_lhsOargL,_lhsOcTrf,_lhsOmbFunVar,_lhsOmbLam,_lhsOmbVar,_lhsOpropUp,_lhsOpropUpL,_lhsOwhatBelow) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CExprAnn ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CExprAnn 
         prop                 : Prop
   alternatives:
      alternative Ty:
         child ty             : {Ty}
         visit 0:
            local cTrf        : _
            local prop        : _
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local cTrf        : _
            local prop        : _
      alternative Debug:
         child info           : {String}
         visit 0:
            local cTrf        : _
            local prop        : _
-}
-- 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 = Int ->
                  EHCOpts ->
                  ( CExprAnn,Prop)
sem_CExprAnn_Ty :: Ty ->
                   T_CExprAnn
sem_CExprAnn_Ty ty_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CExprAnn_Ty ty_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case (Prop_HasTy ty_) of
            { _prop | _prop `seq` (True) ->
            (case (_prop) of
             { _lhsOprop | _lhsOprop `seq` (True) ->
             ( _lhsOcTrf,_lhsOprop) }) }) }) }))
sem_CExprAnn_Coe :: RelevCoe ->
                    T_CExprAnn
sem_CExprAnn_Coe coe_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CExprAnn_Coe coe_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case (Prop_None) of
            { _prop | _prop `seq` (True) ->
            (case (_prop) of
             { _lhsOprop | _lhsOprop `seq` (True) ->
             ( _lhsOcTrf,_lhsOprop) }) }) }) }))
sem_CExprAnn_Debug :: String ->
                      T_CExprAnn
sem_CExprAnn_Debug info_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CExprAnn_Debug info_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case (Prop_None) of
            { _prop | _prop `seq` (True) ->
            (case (_prop) of
             { _lhsOprop | _lhsOprop `seq` (True) ->
             ( _lhsOcTrf,_lhsOprop) }) }) }) }))
-- CImport -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CImport 
   alternatives:
      alternative Import:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CImport :: CImport ->
               T_CImport
sem_CImport (CImport_Import _nm) =
    (sem_CImport_Import _nm)
-- semantic domain
type T_CImport = ( CImport)
sem_CImport_Import :: HsName ->
                      T_CImport
sem_CImport_Import nm_ =
    (case (CImport_Import nm_) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CImportL ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         cTrf                 : CImportL 
   alternatives:
      alternative Cons:
         child hd             : CImport 
         child tl             : CImportL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CImportL :: CImportL ->
                T_CImportL
sem_CImportL list =
    (Prelude.foldr sem_CImportL_Cons sem_CImportL_Nil (Prelude.map sem_CImport list))
-- semantic domain
type T_CImportL = ( CImportL)
sem_CImportL_Cons :: T_CImport ->
                     T_CImportL ->
                     T_CImportL
sem_CImportL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIcTrf) | True ->
         (case (hd_) of
          { ( _hdIcTrf) | True ->
              (case ((:) _hdIcTrf _tlIcTrf) of
               { _cTrf | _cTrf `seq` (True) ->
               (case (_cTrf) of
                { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                ( _lhsOcTrf) }) }) }) })
sem_CImportL_Nil :: T_CImportL
sem_CImportL_Nil =
    (case ([]) of
     { _cTrf | _cTrf `seq` (True) ->
     (case (_cTrf) of
      { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
      ( _lhsOcTrf) }) })
-- CMetaBind ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetaBind 
   alternatives:
      alternative Plain:
         visit 0:
            local cTrf        : _
      alternative Function0:
         visit 0:
            local cTrf        : _
      alternative Function1:
         visit 0:
            local cTrf        : _
      alternative Apply0:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetaBind :: CMetaBind ->
                 T_CMetaBind
sem_CMetaBind (CMetaBind_Plain) =
    (sem_CMetaBind_Plain)
sem_CMetaBind (CMetaBind_Function0) =
    (sem_CMetaBind_Function0)
sem_CMetaBind (CMetaBind_Function1) =
    (sem_CMetaBind_Function1)
sem_CMetaBind (CMetaBind_Apply0) =
    (sem_CMetaBind_Apply0)
-- semantic domain
type T_CMetaBind = Int ->
                   EHCOpts ->
                   ( CMetaBind)
sem_CMetaBind_Plain :: T_CMetaBind
sem_CMetaBind_Plain =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaBind_Plain) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaBind_Function0 :: T_CMetaBind
sem_CMetaBind_Function0 =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaBind_Function0) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaBind_Function1 :: T_CMetaBind
sem_CMetaBind_Function1 =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaBind_Function1) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaBind_Apply0 :: T_CMetaBind
sem_CMetaBind_Apply0 =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaBind_Apply0) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CMetaVal ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetaVal 
   alternatives:
      alternative Val:
         visit 0:
            local cTrf        : _
      alternative Dict:
         visit 0:
            local cTrf        : _
      alternative DictClass:
         child tracks         : {[Track]}
         visit 0:
            local cTrf        : _
      alternative DictInstance:
         child tracks         : {[Track]}
         visit 0:
            local cTrf        : _
      alternative Track:
         child track          : {Track}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetaVal :: CMetaVal ->
                T_CMetaVal
sem_CMetaVal (CMetaVal_Val) =
    (sem_CMetaVal_Val)
sem_CMetaVal (CMetaVal_Dict) =
    (sem_CMetaVal_Dict)
sem_CMetaVal (CMetaVal_DictClass _tracks) =
    (sem_CMetaVal_DictClass _tracks)
sem_CMetaVal (CMetaVal_DictInstance _tracks) =
    (sem_CMetaVal_DictInstance _tracks)
sem_CMetaVal (CMetaVal_Track _track) =
    (sem_CMetaVal_Track _track)
-- semantic domain
type T_CMetaVal = Int ->
                  EHCOpts ->
                  ( CMetaVal)
sem_CMetaVal_Val :: T_CMetaVal
sem_CMetaVal_Val =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaVal_Val) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaVal_Dict :: T_CMetaVal
sem_CMetaVal_Dict =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaVal_Dict) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaVal_DictClass :: ([Track]) ->
                          T_CMetaVal
sem_CMetaVal_DictClass tracks_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaVal_DictClass tracks_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaVal_DictInstance :: ([Track]) ->
                             T_CMetaVal
sem_CMetaVal_DictInstance tracks_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaVal_DictInstance tracks_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CMetaVal_Track :: Track ->
                      T_CMetaVal
sem_CMetaVal_Track track_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CMetaVal_Track track_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CMetas ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CMetas 
   alternatives:
      alternative Tuple:
         child x1             : CMetaBind 
         child x2             : CMetaVal 
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CMetas :: CMetas ->
              T_CMetas
sem_CMetas ( x1,x2) =
    (sem_CMetas_Tuple (sem_CMetaBind x1) (sem_CMetaVal x2))
-- semantic domain
type T_CMetas = Int ->
                EHCOpts ->
                ( CMetas)
sem_CMetas_Tuple :: T_CMetaBind ->
                    T_CMetaVal ->
                    T_CMetas
sem_CMetas_Tuple x1_ x2_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _x2Oopts | _x2Oopts `seq` (True) ->
          (case (_lhsIlev) of
           { _x2Olev | _x2Olev `seq` (True) ->
           (case (x2_ _x2Olev _x2Oopts) of
            { ( _x2IcTrf) | True ->
                (case (_lhsIopts) of
                 { _x1Oopts | _x1Oopts `seq` (True) ->
                 (case (_lhsIlev) of
                  { _x1Olev | _x1Olev `seq` (True) ->
                  (case (x1_ _x1Olev _x1Oopts) of
                   { ( _x1IcTrf) | True ->
                       (case ((_x1IcTrf,_x2IcTrf)) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         ( _lhsOcTrf) }) }) }) }) }) }) }) }))
-- CModule -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CModule 
   alternatives:
      alternative Mod:
         child moduleNm       : {HsName}
         child exports        : CExportL 
         child imports        : CImportL 
         child declMetas      : CDeclMetaL 
         child expr           : CExpr 
         visit 0:
            local whatAbove   : {WhatExpr}
            local cTrf        : _
-}
-- cata
sem_CModule :: CModule ->
               T_CModule
sem_CModule (CModule_Mod _moduleNm _exports _imports _declMetas _expr) =
    (sem_CModule_Mod _moduleNm (sem_CExportL _exports) (sem_CImportL _imports) (sem_CDeclMetaL _declMetas) (sem_CExpr _expr))
-- semantic domain
type T_CModule = Int ->
                 EHCOpts ->
                 ( CModule)
sem_CModule_Mod :: HsName ->
                   T_CExportL ->
                   T_CImportL ->
                   T_CDeclMetaL ->
                   T_CExpr ->
                   T_CModule
sem_CModule_Mod moduleNm_ exports_ imports_ declMetas_ expr_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _exprOopts | _exprOopts `seq` (True) ->
          (case (Prop_None) of
           { _exprOpropDown | _exprOpropDown `seq` (True) ->
           (case (True) of
            { _exprOisTopApp | _exprOisTopApp `seq` (True) ->
            (case (ExprIsOther) of
             { _whatAbove | _whatAbove `seq` (True) ->
             (case (_whatAbove) of
              { _exprOwhatAbove | _exprOwhatAbove `seq` (True) ->
              (case (_lhsIlev) of
               { _exprOlev | _exprOlev `seq` (True) ->
               (case (EvalCtx_Eval) of
                { _exprOevalCtx | _exprOevalCtx `seq` (True) ->
                (case (True) of
                 { _exprOisTopTup | _exprOisTopTup `seq` (True) ->
                 (case (expr_ _exprOevalCtx _exprOisTopApp _exprOisTopTup _exprOlev _exprOopts _exprOpropDown _exprOwhatAbove) of
                  { ( _exprIappFunKind,_exprIargL,_exprIcTrf,_exprImbFunVar,_exprImbLam,_exprImbVar,_exprIpropUp,_exprIpropUpL,_exprIwhatBelow) | True ->
                      (case (declMetas_) of
                       { ( _declMetasIcTrf) | True ->
                           (case (imports_) of
                            { ( _importsIcTrf) | True ->
                                (case (exports_) of
                                 { ( _exportsIcTrf) | True ->
                                     (case (CModule_Mod moduleNm_ _exportsIcTrf _importsIcTrf _declMetasIcTrf _exprIcTrf) of
                                      { _cTrf | _cTrf `seq` (True) ->
                                      (case (_cTrf) of
                                       { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                       ( _lhsOcTrf) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CPat --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPat 
         fldNmL               : [HsName]
         mbCTag               : Maybe CTag
   alternatives:
      alternative Var:
         child pnm            : {HsName}
         visit 0:
            local cTrf        : _
      alternative Con:
         child tag            : {CTag}
         child rest           : CPatRest 
         child binds          : CPatFldL 
         visit 0:
            local cTrf        : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local cTrf        : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local cTrf        : _
      alternative BoolExpr:
         child cexpr          : {CExpr}
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPat :: CPat ->
            T_CPat
sem_CPat (CPat_Var _pnm) =
    (sem_CPat_Var _pnm)
sem_CPat (CPat_Con _tag _rest _binds) =
    (sem_CPat_Con _tag (sem_CPatRest _rest) (sem_CPatFldL _binds))
sem_CPat (CPat_Int _int) =
    (sem_CPat_Int _int)
sem_CPat (CPat_Char _char) =
    (sem_CPat_Char _char)
sem_CPat (CPat_BoolExpr _cexpr) =
    (sem_CPat_BoolExpr _cexpr)
-- semantic domain
type T_CPat = Int ->
              EHCOpts ->
              ( CPat,([HsName]),(Maybe CTag))
sem_CPat_Var :: HsName ->
                T_CPat
sem_CPat_Var pnm_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPat_Var pnm_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case ([]) of
            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
            (case (Nothing) of
             { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
             ( _lhsOcTrf,_lhsOfldNmL,_lhsOmbCTag) }) }) }) }))
sem_CPat_Con :: CTag ->
                T_CPatRest ->
                T_CPatFldL ->
                T_CPat
sem_CPat_Con tag_ rest_ binds_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _bindsOopts | _bindsOopts `seq` (True) ->
          (case (_lhsIlev) of
           { _bindsOlev | _bindsOlev `seq` (True) ->
           (case (binds_ _bindsOlev _bindsOopts) of
            { ( _bindsIcTrf,_bindsIfldNmL) | True ->
                (case (_lhsIopts) of
                 { _restOopts | _restOopts `seq` (True) ->
                 (case (_lhsIlev) of
                  { _restOlev | _restOlev `seq` (True) ->
                  (case (rest_ _restOlev _restOopts) of
                   { ( _restIcTrf) | True ->
                       (case (CPat_Con tag_ _restIcTrf _bindsIcTrf) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         (case (_bindsIfldNmL) of
                          { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
                          (case (Just tag_) of
                           { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
                           ( _lhsOcTrf,_lhsOfldNmL,_lhsOmbCTag) }) }) }) }) }) }) }) }) }) }))
sem_CPat_Int :: Int ->
                T_CPat
sem_CPat_Int int_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPat_Int int_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case ([]) of
            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
            (case (Nothing) of
             { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
             ( _lhsOcTrf,_lhsOfldNmL,_lhsOmbCTag) }) }) }) }))
sem_CPat_Char :: Char ->
                 T_CPat
sem_CPat_Char char_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPat_Char char_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case ([]) of
            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
            (case (Nothing) of
             { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
             ( _lhsOcTrf,_lhsOfldNmL,_lhsOmbCTag) }) }) }) }))
sem_CPat_BoolExpr :: CExpr ->
                     T_CPat
sem_CPat_BoolExpr cexpr_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPat_BoolExpr cexpr_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case ([]) of
            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
            (case (Nothing) of
             { _lhsOmbCTag | _lhsOmbCTag `seq` (True) ->
             ( _lhsOcTrf,_lhsOfldNmL,_lhsOmbCTag) }) }) }) }))
-- CPatFld -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPatFld 
         fldNmL               : [HsName]
   alternatives:
      alternative Fld:
         child lbl            : {HsName}
         child offset         : CExpr 
         child bind           : CBind 
         child fldAnns        : CBindAnnL 
         visit 0:
            local propDown    : _
            local whatAbove   : {WhatExpr}
            local cTrf        : _
            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 = Int ->
                 EHCOpts ->
                 ( CPatFld,([HsName]))
sem_CPatFld_Fld :: HsName ->
                   T_CExpr ->
                   T_CBind ->
                   T_CBindAnnL ->
                   T_CPatFld
sem_CPatFld_Fld lbl_ offset_ bind_ fldAnns_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _bindOopts | _bindOopts `seq` (True) ->
          (case (Prop_None) of
           { _propDown | _propDown `seq` (True) ->
           (case (_propDown) of
            { _offsetOpropDown | _offsetOpropDown `seq` (True) ->
            (case (_lhsIopts) of
             { _offsetOopts | _offsetOopts `seq` (True) ->
             (case (True) of
              { _offsetOisTopApp | _offsetOisTopApp `seq` (True) ->
              (case (_lhsIopts) of
               { _fldAnnsOopts | _fldAnnsOopts `seq` (True) ->
               (case (_lhsIlev) of
                { _fldAnnsOlev | _fldAnnsOlev `seq` (True) ->
                (case (fldAnns_ _fldAnnsOlev _fldAnnsOopts) of
                 { ( _fldAnnsIcTrf) | True ->
                     (case (_lhsIlev) of
                      { _bindOlev | _bindOlev `seq` (True) ->
                      (case (False) of
                       { _bindOisGlobal | _bindOisGlobal `seq` (True) ->
                       (case (EvalCtx_None) of
                        { _bindOevalCtx | _bindOevalCtx `seq` (True) ->
                        (case (acoreBindcategPlain) of
                         { _bindOletBindingsCateg | _bindOletBindingsCateg `seq` (True) ->
                         (case (bind_ _bindOevalCtx _bindOisGlobal _bindOletBindingsCateg _bindOlev _bindOopts) of
                          { ( _bindIcTrf,_bindInm) | True ->
                              (case (ExprIsOther) of
                               { _whatAbove | _whatAbove `seq` (True) ->
                               (case (_whatAbove) of
                                { _offsetOwhatAbove | _offsetOwhatAbove `seq` (True) ->
                                (case (_lhsIlev) of
                                 { _offsetOlev | _offsetOlev `seq` (True) ->
                                 (case (EvalCtx_Eval) of
                                  { _offsetOevalCtx | _offsetOevalCtx `seq` (True) ->
                                  (case (True) of
                                   { _offsetOisTopTup | _offsetOisTopTup `seq` (True) ->
                                   (case (offset_ _offsetOevalCtx _offsetOisTopApp _offsetOisTopTup _offsetOlev _offsetOopts _offsetOpropDown _offsetOwhatAbove) of
                                    { ( _offsetIappFunKind,_offsetIargL,_offsetIcTrf,_offsetImbFunVar,_offsetImbLam,_offsetImbVar,_offsetIpropUp,_offsetIpropUpL,_offsetIwhatBelow) | True ->
                                        (case (CPatFld_Fld lbl_ _offsetIcTrf _bindIcTrf _fldAnnsIcTrf) of
                                         { _cTrf | _cTrf `seq` (True) ->
                                         (case (_cTrf) of
                                          { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                                          (case (_bindInm) of
                                           { _fldNm | _fldNm `seq` (True) ->
                                           (case ([_fldNm]) of
                                            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
                                            ( _lhsOcTrf,_lhsOfldNmL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))
-- CPatFldL ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attributes:
         cTrf                 : CPatFldL 
         fldNmL               : [HsName]
   alternatives:
      alternative Cons:
         child hd             : CPatFld 
         child tl             : CPatFldL 
         visit 0:
            local cTrf        : _
      alternative Nil:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPatFldL :: CPatFldL ->
                T_CPatFldL
sem_CPatFldL list =
    (Prelude.foldr sem_CPatFldL_Cons sem_CPatFldL_Nil (Prelude.map sem_CPatFld list))
-- semantic domain
type T_CPatFldL = Int ->
                  EHCOpts ->
                  ( CPatFldL,([HsName]))
sem_CPatFldL_Cons :: T_CPatFld ->
                     T_CPatFldL ->
                     T_CPatFldL
sem_CPatFldL_Cons hd_ tl_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (_lhsIopts) of
          { _tlOopts | _tlOopts `seq` (True) ->
          (case (_lhsIopts) of
           { _hdOopts | _hdOopts `seq` (True) ->
           (case (_lhsIlev) of
            { _tlOlev | _tlOlev `seq` (True) ->
            (case (tl_ _tlOlev _tlOopts) of
             { ( _tlIcTrf,_tlIfldNmL) | True ->
                 (case (_lhsIlev) of
                  { _hdOlev | _hdOlev `seq` (True) ->
                  (case (hd_ _hdOlev _hdOopts) of
                   { ( _hdIcTrf,_hdIfldNmL) | True ->
                       (case ((:) _hdIcTrf _tlIcTrf) of
                        { _cTrf | _cTrf `seq` (True) ->
                        (case (_cTrf) of
                         { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                         (case (_hdIfldNmL ++ _tlIfldNmL) of
                          { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
                          ( _lhsOcTrf,_lhsOfldNmL) }) }) }) }) }) }) }) }) }))
sem_CPatFldL_Nil :: T_CPatFldL
sem_CPatFldL_Nil =
    (\ _lhsIlev
       _lhsIopts ->
         (case ([]) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           (case ([]) of
            { _lhsOfldNmL | _lhsOfldNmL `seq` (True) ->
            ( _lhsOcTrf,_lhsOfldNmL) }) }) }))
-- CPatRest ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         lev                  : Int
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CPatRest 
   alternatives:
      alternative Var:
         child nm             : {HsName}
         visit 0:
            local cTrf        : _
      alternative Empty:
         visit 0:
            local cTrf        : _
-}
-- cata
sem_CPatRest :: CPatRest ->
                T_CPatRest
sem_CPatRest (CPatRest_Var _nm) =
    (sem_CPatRest_Var _nm)
sem_CPatRest (CPatRest_Empty) =
    (sem_CPatRest_Empty)
-- semantic domain
type T_CPatRest = Int ->
                  EHCOpts ->
                  ( CPatRest)
sem_CPatRest_Var :: HsName ->
                    T_CPatRest
sem_CPatRest_Var nm_ =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPatRest_Var nm_) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
sem_CPatRest_Empty :: T_CPatRest
sem_CPatRest_Empty =
    (\ _lhsIlev
       _lhsIopts ->
         (case (CPatRest_Empty) of
          { _cTrf | _cTrf `seq` (True) ->
          (case (_cTrf) of
           { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
           ( _lhsOcTrf) }) }))
-- CodeAGItf ---------------------------------------------------
{-
   visit 0:
      inherited attribute:
         opts                 : EHCOpts
      synthesized attribute:
         cTrf                 : CModule 
   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 = EHCOpts ->
                   ( CModule)
data Inh_CodeAGItf = Inh_CodeAGItf {opts_Inh_CodeAGItf :: !(EHCOpts)}
data Syn_CodeAGItf = Syn_CodeAGItf {cTrf_Syn_CodeAGItf :: !(CModule)}
wrap_CodeAGItf :: T_CodeAGItf ->
                  Inh_CodeAGItf ->
                  Syn_CodeAGItf
wrap_CodeAGItf sem (Inh_CodeAGItf _lhsIopts) =
    (let ( _lhsOcTrf) | True = sem _lhsIopts
     in  (Syn_CodeAGItf _lhsOcTrf))
sem_CodeAGItf_AGItf :: T_CModule ->
                       T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
    (\ _lhsIopts ->
         (case (_lhsIopts) of
          { _moduleOopts | _moduleOopts `seq` (True) ->
          (case (cLevModule) of
           { _moduleOlev | _moduleOlev `seq` (True) ->
           (case (module_ _moduleOlev _moduleOopts) of
            { ( _moduleIcTrf) | True ->
                (case (_moduleIcTrf) of
                 { _lhsOcTrf | _lhsOcTrf `seq` (True) ->
                 ( _lhsOcTrf) }) }) }) }))