-- UUAGC 0.9.50.2 (build/103/lib-ehc/UHC/Light/Compiler/Core/BindExtra)
module UHC.Light.Compiler.Core.BindExtract(BoundSel (..), noBoundSel, emptyBoundSel
, boundSelVal, boundSelMetaLev0, boundSelMetaLev01
, SelVal
, cbindExtract, cboundExtract
, cbindExtractVal', cbindExtractVal, cboundExtractVal', cboundExtractVal) where

import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Ty







-- | Selection predicates, an algebra for CBound fixed to yield Bool
data BoundSel
  = BoundSel
      { selBind         :: Bool
      , selMeta         :: ACoreBindAspectKeyS -> Bool
      , selRelevTy      :: ACoreBindAspectKeyS -> RelevTy -> Bool
      , selVal          :: ACoreBindAspectKeyS -> MetaLev -> CLbl -> Bool
      , selTy           :: ACoreBindAspectKeyS -> Bool
      , selFFE          :: Bool
      }


-- | Default selection
noBoundSel, emptyBoundSel :: BoundSel
noBoundSel
  = BoundSel
      { selBind			= False
      , selMeta			= const False
      , selRelevTy		= \_ _ -> False
      , selVal			= \_ _ _ -> False
      , selTy			= const False
      , selFFE			= False
      }

emptyBoundSel = noBoundSel



-- | Predefined selection: Val
boundSelVal :: BoundSel
boundSelVal
  = noBoundSel
      { selVal 			= \_ _ _ -> True
      }

-- | Predefined selection: same MetaLev (i.e. 0)
boundSelMetaLev0 :: BoundSel
boundSelMetaLev0
  = noBoundSel
      { selBind			= True
      , selVal 			= \_ mlev _ -> mlev == 0
      , selFFE 			= True
      }

-- | Predefined selection: same MetaLev (i.e. 0), + 1 higher (i.e. has signature)
boundSelMetaLev01 :: BoundSel
boundSelMetaLev01
  = boundSelMetaLev0
      { selVal 			= \_ mlev _ -> mlev <= 1
      , selTy			= const True
      }



type SelVal = CBound



-- | Extract CBounds for a binding, partitioned according to selection
cbindExtract :: BoundSel -> CBind -> ([SelVal],[SelVal])
cbindExtract sel b
  = (selvalYesL_Syn_CBind t, selvalNoL_Syn_CBind t)
  where t = wrap_CBind (sem_CBind b)
              (Inh_CBind
                { boundsel_Inh_CBind = sel
                })

-- | Extract CBounds for a bound, partitioned according to selection
cboundExtract :: BoundSel -> CBound -> ([SelVal],[SelVal])
cboundExtract sel b
  = (selvalYesL_Syn_CBound t, selvalNoL_Syn_CBound t)
  where t = wrap_CBound (sem_CBound b)
              (Inh_CBound
                { boundsel_Inh_CBound = sel
                })



extractVal' :: (BoundSel -> b -> ([SelVal],[SelVal])) -> b -> (ACoreBindAspectKeyS,MetaLev,CExpr)
extractVal' extr b
  = (a,ml,e)
  where (CBound_Val a ml _ e:_, _) = extr boundSelVal b

extractVal :: (BoundSel -> b -> ([SelVal],[SelVal])) -> b -> CExpr
extractVal extr b
  = e
  where (_,_,e) = extractVal' extr b

cbindExtractVal' :: CBind -> (ACoreBindAspectKeyS,MetaLev,CExpr)
cbindExtractVal' = extractVal' cbindExtract

cbindExtractVal :: CBind -> CExpr
cbindExtractVal = extractVal cbindExtract

cboundExtractVal' :: CBound -> (ACoreBindAspectKeyS,MetaLev,CExpr)
cboundExtractVal' = extractVal' cboundExtract

cboundExtractVal :: CBound -> CExpr
cboundExtractVal = extractVal cboundExtract

-- CAlt --------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CAlt 
   alternatives:
      alternative Alt:
         child pat            : CPat 
         child expr           : CExpr 
         visit 0:
            local boundval    : _
-}
-- 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 = ( CAlt)
sem_CAlt_Alt :: T_CPat ->
                T_CExpr ->
                T_CAlt
sem_CAlt_Alt pat_ expr_ =
    (case (expr_) of
     { ( _exprIboundval) ->
         (case (pat_) of
          { ( _patIboundval) ->
              (case (CAlt_Alt _patIboundval _exprIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
-- CAltL -------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CAltL 
   alternatives:
      alternative Cons:
         child hd             : CAlt 
         child tl             : CAltL 
         visit 0:
            local boundval    : _
      alternative Nil:
         visit 0:
            local boundval    : _
-}
-- 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 = ( CAltL)
sem_CAltL_Cons :: T_CAlt ->
                  T_CAltL ->
                  T_CAltL
sem_CAltL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIboundval) ->
         (case (hd_) of
          { ( _hdIboundval) ->
              (case ((:) _hdIboundval _tlIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
sem_CAltL_Nil :: T_CAltL
sem_CAltL_Nil =
    (case ([]) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CBind -------------------------------------------------------
{-
   visit 0:
      inherited attribute:
         boundsel             : BoundSel
      synthesized attributes:
         boundval             : CBind 
         selvalNoL            : [SelVal]
         selvalYesL           : [SelVal]
   alternatives:
      alternative Bind:
         child nm             : {HsName}
         child bindAspects    : CBoundL 
         visit 0:
            local boundval    : _
-}
-- cata
sem_CBind :: CBind ->
             T_CBind
sem_CBind (CBind_Bind _nm _bindAspects) =
    (sem_CBind_Bind _nm (sem_CBoundL _bindAspects))
-- semantic domain
type T_CBind = BoundSel ->
               ( CBind,([SelVal]),([SelVal]))
data Inh_CBind = Inh_CBind {boundsel_Inh_CBind :: !(BoundSel)}
data Syn_CBind = Syn_CBind {boundval_Syn_CBind :: !(CBind),selvalNoL_Syn_CBind :: !(([SelVal])),selvalYesL_Syn_CBind :: !(([SelVal]))}
wrap_CBind :: T_CBind ->
              Inh_CBind ->
              Syn_CBind
wrap_CBind sem (Inh_CBind _lhsIboundsel) =
    (let ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) = sem _lhsIboundsel
     in  (Syn_CBind _lhsOboundval _lhsOselvalNoL _lhsOselvalYesL))
sem_CBind_Bind :: HsName ->
                  T_CBoundL ->
                  T_CBind
sem_CBind_Bind nm_ bindAspects_ =
    (\ _lhsIboundsel ->
         (case (_lhsIboundsel) of
          { _bindAspectsOboundsel ->
          (case (bindAspects_ _bindAspectsOboundsel) of
           { ( _bindAspectsIboundval,_bindAspectsIselvalNoL,_bindAspectsIselvalYesL) ->
               (case (CBind_Bind nm_ _bindAspectsIboundval) of
                { _boundval ->
                (case (_boundval) of
                 { _lhsOboundval ->
                 (case (_bindAspectsIselvalNoL) of
                  { _lhsOselvalNoL ->
                  (case (_bindAspectsIselvalYesL) of
                   { _lhsOselvalYesL ->
                   ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }))
-- CBindAnn ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CBindAnn 
   alternatives:
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local boundval    : _
-}
-- cata
sem_CBindAnn :: CBindAnn ->
                T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
    (sem_CBindAnn_Coe _coe)
-- semantic domain
type T_CBindAnn = ( CBindAnn)
sem_CBindAnn_Coe :: RelevCoe ->
                    T_CBindAnn
sem_CBindAnn_Coe coe_ =
    (case (CBindAnn_Coe coe_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CBindAnnL ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CBindAnnL 
   alternatives:
      alternative Cons:
         child hd             : CBindAnn 
         child tl             : CBindAnnL 
         visit 0:
            local boundval    : _
      alternative Nil:
         visit 0:
            local boundval    : _
-}
-- 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 = ( CBindAnnL)
sem_CBindAnnL_Cons :: T_CBindAnn ->
                      T_CBindAnnL ->
                      T_CBindAnnL
sem_CBindAnnL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIboundval) ->
         (case (hd_) of
          { ( _hdIboundval) ->
              (case ((:) _hdIboundval _tlIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
sem_CBindAnnL_Nil :: T_CBindAnnL
sem_CBindAnnL_Nil =
    (case ([]) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CBindL ------------------------------------------------------
{-
   visit 0:
      inherited attribute:
         boundsel             : BoundSel
      synthesized attribute:
         boundval             : CBindL 
   alternatives:
      alternative Cons:
         child hd             : CBind 
         child tl             : CBindL 
         visit 0:
            local boundval    : _
      alternative Nil:
         visit 0:
            local boundval    : _
-}
-- 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 = BoundSel ->
                ( CBindL)
sem_CBindL_Cons :: T_CBind ->
                   T_CBindL ->
                   T_CBindL
sem_CBindL_Cons hd_ tl_ =
    (\ _lhsIboundsel ->
         (case (_lhsIboundsel) of
          { _tlOboundsel ->
          (case (tl_ _tlOboundsel) of
           { ( _tlIboundval) ->
               (case (_lhsIboundsel) of
                { _hdOboundsel ->
                (case (hd_ _hdOboundsel) of
                 { ( _hdIboundval,_hdIselvalNoL,_hdIselvalYesL) ->
                     (case ((:) _hdIboundval _tlIboundval) of
                      { _boundval ->
                      (case (_boundval) of
                       { _lhsOboundval ->
                       ( _lhsOboundval) }) }) }) }) }) }))
sem_CBindL_Nil :: T_CBindL
sem_CBindL_Nil =
    (\ _lhsIboundsel ->
         (case ([]) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           ( _lhsOboundval) }) }))
-- CBound ------------------------------------------------------
{-
   visit 0:
      inherited attribute:
         boundsel             : BoundSel
      synthesized attributes:
         boundval             : CBound 
         selvalNoL            : [SelVal]
         selvalYesL           : [SelVal]
   alternatives:
      alternative Bind:
         child bindMeta       : CMetas 
         child expr           : CExpr 
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup1       : _
      alternative Meta:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child cmetas         : CMetas 
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup2       : _
      alternative RelevTy:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child relevTy        : {RelevTy}
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup3       : _
      alternative Val:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child mlev           : {MetaLev}
         child lbl            : {CLbl}
         child expr           : CExpr 
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup4       : _
      alternative Ty:
         child aspectKeyS     : {ACoreBindAspectKeyS}
         child ty             : {Ty}
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup5       : _
      alternative FFE:
         child callconv       : {FFIWay}
         child expEnt         : {ForeignEnt}
         child expr           : CExpr 
         child ty             : {Ty}
         visit 0:
            local boundval    : _
            local isSelected  : _
            local _tup6       : _
-}
-- 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 = BoundSel ->
                ( CBound,([SelVal]),([SelVal]))
data Inh_CBound = Inh_CBound {boundsel_Inh_CBound :: !(BoundSel)}
data Syn_CBound = Syn_CBound {boundval_Syn_CBound :: !(CBound),selvalNoL_Syn_CBound :: !(([SelVal])),selvalYesL_Syn_CBound :: !(([SelVal]))}
wrap_CBound :: T_CBound ->
               Inh_CBound ->
               Syn_CBound
wrap_CBound sem (Inh_CBound _lhsIboundsel) =
    (let ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) = sem _lhsIboundsel
     in  (Syn_CBound _lhsOboundval _lhsOselvalNoL _lhsOselvalYesL))
sem_CBound_Bind :: T_CMetas ->
                   T_CExpr ->
                   T_CBound
sem_CBound_Bind bindMeta_ expr_ =
    (\ _lhsIboundsel ->
         (case (expr_) of
          { ( _exprIboundval) ->
              (case (bindMeta_) of
               { ( _bindMetaIboundval) ->
                   (case (CBound_Bind _bindMetaIboundval _exprIboundval) of
                    { _boundval ->
                    (case (_boundval) of
                     { _lhsOboundval ->
                     (case (selBind    _lhsIboundsel) of
                      { _isSelected ->
                      (case (if _isSelected
                             then ([_boundval],[])
                             else ([],[_boundval])) of
                       { __tup1 ->
                       (case (__tup1) of
                        { (_,_lhsOselvalNoL) ->
                        (case (__tup1) of
                         { (_lhsOselvalYesL,_) ->
                         ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }) }))
sem_CBound_Meta :: ACoreBindAspectKeyS ->
                   T_CMetas ->
                   T_CBound
sem_CBound_Meta aspectKeyS_ cmetas_ =
    (\ _lhsIboundsel ->
         (case (cmetas_) of
          { ( _cmetasIboundval) ->
              (case (CBound_Meta aspectKeyS_ _cmetasIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                (case (selMeta    _lhsIboundsel aspectKeyS_) of
                 { _isSelected ->
                 (case (if _isSelected
                        then ([_boundval],[])
                        else ([],[_boundval])) of
                  { __tup2 ->
                  (case (__tup2) of
                   { (_,_lhsOselvalNoL) ->
                   (case (__tup2) of
                    { (_lhsOselvalYesL,_) ->
                    ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }))
sem_CBound_RelevTy :: ACoreBindAspectKeyS ->
                      RelevTy ->
                      T_CBound
sem_CBound_RelevTy aspectKeyS_ relevTy_ =
    (\ _lhsIboundsel ->
         (case (CBound_RelevTy aspectKeyS_ relevTy_) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           (case (selRelevTy _lhsIboundsel aspectKeyS_ relevTy_) of
            { _isSelected ->
            (case (if _isSelected
                   then ([_boundval],[])
                   else ([],[_boundval])) of
             { __tup3 ->
             (case (__tup3) of
              { (_,_lhsOselvalNoL) ->
              (case (__tup3) of
               { (_lhsOselvalYesL,_) ->
               ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }))
sem_CBound_Val :: ACoreBindAspectKeyS ->
                  MetaLev ->
                  CLbl ->
                  T_CExpr ->
                  T_CBound
sem_CBound_Val aspectKeyS_ mlev_ lbl_ expr_ =
    (\ _lhsIboundsel ->
         (case (expr_) of
          { ( _exprIboundval) ->
              (case (CBound_Val aspectKeyS_ mlev_ lbl_ _exprIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                (case (selVal     _lhsIboundsel aspectKeyS_ mlev_ lbl_) of
                 { _isSelected ->
                 (case (if _isSelected
                        then ([_boundval],[])
                        else ([],[_boundval])) of
                  { __tup4 ->
                  (case (__tup4) of
                   { (_,_lhsOselvalNoL) ->
                   (case (__tup4) of
                    { (_lhsOselvalYesL,_) ->
                    ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }))
sem_CBound_Ty :: ACoreBindAspectKeyS ->
                 Ty ->
                 T_CBound
sem_CBound_Ty aspectKeyS_ ty_ =
    (\ _lhsIboundsel ->
         (case (CBound_Ty aspectKeyS_ ty_) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           (case (selTy      _lhsIboundsel aspectKeyS_) of
            { _isSelected ->
            (case (if _isSelected
                   then ([_boundval],[])
                   else ([],[_boundval])) of
             { __tup5 ->
             (case (__tup5) of
              { (_,_lhsOselvalNoL) ->
              (case (__tup5) of
               { (_lhsOselvalYesL,_) ->
               ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }))
sem_CBound_FFE :: FFIWay ->
                  ForeignEnt ->
                  T_CExpr ->
                  Ty ->
                  T_CBound
sem_CBound_FFE callconv_ expEnt_ expr_ ty_ =
    (\ _lhsIboundsel ->
         (case (expr_) of
          { ( _exprIboundval) ->
              (case (CBound_FFE callconv_ expEnt_ _exprIboundval ty_) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                (case (selFFE     _lhsIboundsel) of
                 { _isSelected ->
                 (case (if _isSelected
                        then ([_boundval],[])
                        else ([],[_boundval])) of
                  { __tup6 ->
                  (case (__tup6) of
                   { (_,_lhsOselvalNoL) ->
                   (case (__tup6) of
                    { (_lhsOselvalYesL,_) ->
                    ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }))
-- CBoundL -----------------------------------------------------
{-
   visit 0:
      inherited attribute:
         boundsel             : BoundSel
      synthesized attributes:
         boundval             : CBoundL 
         selvalNoL            : [SelVal]
         selvalYesL           : [SelVal]
   alternatives:
      alternative Cons:
         child hd             : CBound 
         child tl             : CBoundL 
         visit 0:
            local boundval    : _
      alternative Nil:
         visit 0:
            local boundval    : _
-}
-- 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 = BoundSel ->
                 ( CBoundL,([SelVal]),([SelVal]))
sem_CBoundL_Cons :: T_CBound ->
                    T_CBoundL ->
                    T_CBoundL
sem_CBoundL_Cons hd_ tl_ =
    (\ _lhsIboundsel ->
         (case (_lhsIboundsel) of
          { _tlOboundsel ->
          (case (tl_ _tlOboundsel) of
           { ( _tlIboundval,_tlIselvalNoL,_tlIselvalYesL) ->
               (case (_lhsIboundsel) of
                { _hdOboundsel ->
                (case (hd_ _hdOboundsel) of
                 { ( _hdIboundval,_hdIselvalNoL,_hdIselvalYesL) ->
                     (case ((:) _hdIboundval _tlIboundval) of
                      { _boundval ->
                      (case (_boundval) of
                       { _lhsOboundval ->
                       (case (_hdIselvalNoL ++ _tlIselvalNoL) of
                        { _lhsOselvalNoL ->
                        (case (_hdIselvalYesL ++ _tlIselvalYesL) of
                         { _lhsOselvalYesL ->
                         ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }) }))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
    (\ _lhsIboundsel ->
         (case ([]) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           (case ([]) of
            { _lhsOselvalNoL ->
            (case ([]) of
             { _lhsOselvalYesL ->
             ( _lhsOboundval,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }))
-- CDataCon ----------------------------------------------------
{-
   alternatives:
      alternative Con:
         child conNm          : {HsName}
         child tagNr          : {Int}
         child arity          : {Int}
-}
-- cata
sem_CDataCon :: CDataCon ->
                T_CDataCon
sem_CDataCon (CDataCon_Con _conNm _tagNr _arity) =
    (sem_CDataCon_Con _conNm _tagNr _arity)
-- semantic domain
type T_CDataCon = ( )
sem_CDataCon_Con :: HsName ->
                    Int ->
                    Int ->
                    T_CDataCon
sem_CDataCon_Con conNm_ tagNr_ arity_ =
    ( )
-- CDataConL ---------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CDataCon 
         child tl             : CDataConL 
      alternative Nil:
-}
-- cata
sem_CDataConL :: CDataConL ->
                 T_CDataConL
sem_CDataConL list =
    (Prelude.foldr sem_CDataConL_Cons sem_CDataConL_Nil (Prelude.map sem_CDataCon list))
-- semantic domain
type T_CDataConL = ( )
sem_CDataConL_Cons :: T_CDataCon ->
                      T_CDataConL ->
                      T_CDataConL
sem_CDataConL_Cons hd_ tl_ =
    ( )
sem_CDataConL_Nil :: T_CDataConL
sem_CDataConL_Nil =
    ( )
-- CDeclMeta ---------------------------------------------------
{-
   alternatives:
      alternative Data:
         child tyNm           : {HsName}
         child dataCons       : CDataConL 
-}
-- cata
sem_CDeclMeta :: CDeclMeta ->
                 T_CDeclMeta
sem_CDeclMeta (CDeclMeta_Data _tyNm _dataCons) =
    (sem_CDeclMeta_Data _tyNm (sem_CDataConL _dataCons))
-- semantic domain
type T_CDeclMeta = ( )
sem_CDeclMeta_Data :: HsName ->
                      T_CDataConL ->
                      T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
    ( )
-- CDeclMetaL --------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CDeclMeta 
         child tl             : CDeclMetaL 
      alternative Nil:
-}
-- cata
sem_CDeclMetaL :: CDeclMetaL ->
                  T_CDeclMetaL
sem_CDeclMetaL list =
    (Prelude.foldr sem_CDeclMetaL_Cons sem_CDeclMetaL_Nil (Prelude.map sem_CDeclMeta list))
-- semantic domain
type T_CDeclMetaL = ( )
sem_CDeclMetaL_Cons :: T_CDeclMeta ->
                       T_CDeclMetaL ->
                       T_CDeclMetaL
sem_CDeclMetaL_Cons hd_ tl_ =
    ( )
sem_CDeclMetaL_Nil :: T_CDeclMetaL
sem_CDeclMetaL_Nil =
    ( )
-- CExport -----------------------------------------------------
{-
   alternatives:
      alternative Export:
         child nm             : {HsName}
-}
-- cata
sem_CExport :: CExport ->
               T_CExport
sem_CExport (CExport_Export _nm) =
    (sem_CExport_Export _nm)
-- semantic domain
type T_CExport = ( )
sem_CExport_Export :: HsName ->
                      T_CExport
sem_CExport_Export nm_ =
    ( )
-- CExportL ----------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CExport 
         child tl             : CExportL 
      alternative Nil:
-}
-- cata
sem_CExportL :: CExportL ->
                T_CExportL
sem_CExportL list =
    (Prelude.foldr sem_CExportL_Cons sem_CExportL_Nil (Prelude.map sem_CExport list))
-- semantic domain
type T_CExportL = ( )
sem_CExportL_Cons :: T_CExport ->
                     T_CExportL ->
                     T_CExportL
sem_CExportL_Cons hd_ tl_ =
    ( )
sem_CExportL_Nil :: T_CExportL
sem_CExportL_Nil =
    ( )
-- CExpr -------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CExpr 
   alternatives:
      alternative Var:
         child ref            : {ACoreBindRef}
         visit 0:
            local boundval    : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local boundval    : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local boundval    : _
      alternative String:
         child str            : {String}
         visit 0:
            local boundval    : _
      alternative Integer:
         child integer        : {Integer}
         visit 0:
            local boundval    : _
      alternative Tup:
         child tag            : {CTag}
         visit 0:
            local boundval    : _
      alternative Let:
         child categ          : {CBindCateg}
         child binds          : CBindL 
         child body           : CExpr 
         visit 0:
            local boundsel    : _
            local boundval    : _
      alternative App:
         child func           : CExpr 
         child arg            : CBound 
         visit 0:
            local boundsel    : _
            local boundval    : _
      alternative Lam:
         child bind           : CBind 
         child body           : CExpr 
         visit 0:
            local boundsel    : _
            local boundval    : _
      alternative Case:
         child expr           : CExpr 
         child alts           : CAltL 
         child dflt           : CExpr 
         visit 0:
            local boundval    : _
      alternative CaseAltFail:
         child failReason     : {CaseAltFailReason}
         child errorExpr      : CExpr 
         visit 0:
            local boundval    : _
      alternative TupDel:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         visit 0:
            local boundval    : _
      alternative TupIns:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local boundval    : _
      alternative TupUpd:
         child expr           : CExpr 
         child tag            : {CTag}
         child nm             : {HsName}
         child offset         : CExpr 
         child fldExpr        : CExpr 
         visit 0:
            local boundval    : _
      alternative FFI:
         child callconv       : {FFIWay}
         child safety         : {String}
         child impEnt         : {ForeignEnt}
         child ty             : {Ty}
         visit 0:
            local boundval    : _
      alternative Dbg:
         child info           : {String}
         visit 0:
            local boundval    : _
      alternative Hole:
         child uid            : {UID}
         visit 0:
            local boundval    : _
      alternative HoleLet:
         child bindsUid       : {UID}
         child body           : CExpr 
         visit 0:
            local boundval    : _
      alternative CoeArg:
         visit 0:
            local boundval    : _
      alternative ImplsApp:
         child func           : CExpr 
         child uid            : {ImplsVarId}
         visit 0:
            local boundval    : _
      alternative ImplsLam:
         child uid            : {ImplsVarId}
         child body           : CExpr 
         visit 0:
            local boundval    : _
      alternative Ann:
         child ann            : CExprAnn 
         child expr           : CExpr 
         visit 0:
            local boundval    : _
-}
-- 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 = ( CExpr)
sem_CExpr_Var :: ACoreBindRef ->
                 T_CExpr
sem_CExpr_Var ref_ =
    (case (CExpr_Var ref_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Int :: Int ->
                 T_CExpr
sem_CExpr_Int int_ =
    (case (CExpr_Int int_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Char :: Char ->
                  T_CExpr
sem_CExpr_Char char_ =
    (case (CExpr_Char char_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_String :: String ->
                    T_CExpr
sem_CExpr_String str_ =
    (case (CExpr_String str_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Integer :: Integer ->
                     T_CExpr
sem_CExpr_Integer integer_ =
    (case (CExpr_Integer integer_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Tup :: CTag ->
                 T_CExpr
sem_CExpr_Tup tag_ =
    (case (CExpr_Tup tag_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Let :: CBindCateg ->
                 T_CBindL ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Let categ_ binds_ body_ =
    (case (body_) of
     { ( _bodyIboundval) ->
         (case (noBoundSel) of
          { _boundsel ->
          (case (_boundsel) of
           { _bindsOboundsel ->
           (case (binds_ _bindsOboundsel) of
            { ( _bindsIboundval) ->
                (case (CExpr_Let categ_ _bindsIboundval _bodyIboundval) of
                 { _boundval ->
                 (case (_boundval) of
                  { _lhsOboundval ->
                  ( _lhsOboundval) }) }) }) }) }) })
sem_CExpr_App :: T_CExpr ->
                 T_CBound ->
                 T_CExpr
sem_CExpr_App func_ arg_ =
    (case (noBoundSel) of
     { _boundsel ->
     (case (_boundsel) of
      { _argOboundsel ->
      (case (arg_ _argOboundsel) of
       { ( _argIboundval,_argIselvalNoL,_argIselvalYesL) ->
           (case (func_) of
            { ( _funcIboundval) ->
                (case (CExpr_App _funcIboundval _argIboundval) of
                 { _boundval ->
                 (case (_boundval) of
                  { _lhsOboundval ->
                  ( _lhsOboundval) }) }) }) }) }) })
sem_CExpr_Lam :: T_CBind ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Lam bind_ body_ =
    (case (body_) of
     { ( _bodyIboundval) ->
         (case (noBoundSel) of
          { _boundsel ->
          (case (_boundsel) of
           { _bindOboundsel ->
           (case (bind_ _bindOboundsel) of
            { ( _bindIboundval,_bindIselvalNoL,_bindIselvalYesL) ->
                (case (CExpr_Lam _bindIboundval _bodyIboundval) of
                 { _boundval ->
                 (case (_boundval) of
                  { _lhsOboundval ->
                  ( _lhsOboundval) }) }) }) }) }) })
sem_CExpr_Case :: T_CExpr ->
                  T_CAltL ->
                  T_CExpr ->
                  T_CExpr
sem_CExpr_Case expr_ alts_ dflt_ =
    (case (dflt_) of
     { ( _dfltIboundval) ->
         (case (alts_) of
          { ( _altsIboundval) ->
              (case (expr_) of
               { ( _exprIboundval) ->
                   (case (CExpr_Case _exprIboundval _altsIboundval _dfltIboundval) of
                    { _boundval ->
                    (case (_boundval) of
                     { _lhsOboundval ->
                     ( _lhsOboundval) }) }) }) }) })
sem_CExpr_CaseAltFail :: CaseAltFailReason ->
                         T_CExpr ->
                         T_CExpr
sem_CExpr_CaseAltFail failReason_ errorExpr_ =
    (case (errorExpr_) of
     { ( _errorExprIboundval) ->
         (case (CExpr_CaseAltFail failReason_ _errorExprIboundval) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           ( _lhsOboundval) }) }) })
sem_CExpr_TupDel :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupDel expr_ tag_ nm_ offset_ =
    (case (offset_) of
     { ( _offsetIboundval) ->
         (case (expr_) of
          { ( _exprIboundval) ->
              (case (CExpr_TupDel _exprIboundval tag_ nm_ _offsetIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
sem_CExpr_TupIns :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupIns expr_ tag_ nm_ offset_ fldExpr_ =
    (case (fldExpr_) of
     { ( _fldExprIboundval) ->
         (case (offset_) of
          { ( _offsetIboundval) ->
              (case (expr_) of
               { ( _exprIboundval) ->
                   (case (CExpr_TupIns _exprIboundval tag_ nm_ _offsetIboundval _fldExprIboundval) of
                    { _boundval ->
                    (case (_boundval) of
                     { _lhsOboundval ->
                     ( _lhsOboundval) }) }) }) }) })
sem_CExpr_TupUpd :: T_CExpr ->
                    CTag ->
                    HsName ->
                    T_CExpr ->
                    T_CExpr ->
                    T_CExpr
sem_CExpr_TupUpd expr_ tag_ nm_ offset_ fldExpr_ =
    (case (fldExpr_) of
     { ( _fldExprIboundval) ->
         (case (offset_) of
          { ( _offsetIboundval) ->
              (case (expr_) of
               { ( _exprIboundval) ->
                   (case (CExpr_TupUpd _exprIboundval tag_ nm_ _offsetIboundval _fldExprIboundval) of
                    { _boundval ->
                    (case (_boundval) of
                     { _lhsOboundval ->
                     ( _lhsOboundval) }) }) }) }) })
sem_CExpr_FFI :: FFIWay ->
                 String ->
                 ForeignEnt ->
                 Ty ->
                 T_CExpr
sem_CExpr_FFI callconv_ safety_ impEnt_ ty_ =
    (case (CExpr_FFI callconv_ safety_ impEnt_ ty_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Dbg :: String ->
                 T_CExpr
sem_CExpr_Dbg info_ =
    (case (CExpr_Dbg info_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_Hole :: UID ->
                  T_CExpr
sem_CExpr_Hole uid_ =
    (case (CExpr_Hole uid_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_HoleLet :: UID ->
                     T_CExpr ->
                     T_CExpr
sem_CExpr_HoleLet bindsUid_ body_ =
    (case (body_) of
     { ( _bodyIboundval) ->
         (case (CExpr_HoleLet bindsUid_ _bodyIboundval) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           ( _lhsOboundval) }) }) })
sem_CExpr_CoeArg :: T_CExpr
sem_CExpr_CoeArg =
    (case (CExpr_CoeArg) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExpr_ImplsApp :: T_CExpr ->
                      ImplsVarId ->
                      T_CExpr
sem_CExpr_ImplsApp func_ uid_ =
    (case (func_) of
     { ( _funcIboundval) ->
         (case (CExpr_ImplsApp _funcIboundval uid_) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           ( _lhsOboundval) }) }) })
sem_CExpr_ImplsLam :: ImplsVarId ->
                      T_CExpr ->
                      T_CExpr
sem_CExpr_ImplsLam uid_ body_ =
    (case (body_) of
     { ( _bodyIboundval) ->
         (case (CExpr_ImplsLam uid_ _bodyIboundval) of
          { _boundval ->
          (case (_boundval) of
           { _lhsOboundval ->
           ( _lhsOboundval) }) }) })
sem_CExpr_Ann :: T_CExprAnn ->
                 T_CExpr ->
                 T_CExpr
sem_CExpr_Ann ann_ expr_ =
    (case (expr_) of
     { ( _exprIboundval) ->
         (case (ann_) of
          { ( _annIboundval) ->
              (case (CExpr_Ann _annIboundval _exprIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
-- CExprAnn ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CExprAnn 
   alternatives:
      alternative Ty:
         child ty             : {Ty}
         visit 0:
            local boundval    : _
      alternative Coe:
         child coe            : {RelevCoe}
         visit 0:
            local boundval    : _
      alternative Debug:
         child info           : {String}
         visit 0:
            local boundval    : _
-}
-- 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 = ( CExprAnn)
sem_CExprAnn_Ty :: Ty ->
                   T_CExprAnn
sem_CExprAnn_Ty ty_ =
    (case (CExprAnn_Ty ty_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExprAnn_Coe :: RelevCoe ->
                    T_CExprAnn
sem_CExprAnn_Coe coe_ =
    (case (CExprAnn_Coe coe_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CExprAnn_Debug :: String ->
                      T_CExprAnn
sem_CExprAnn_Debug info_ =
    (case (CExprAnn_Debug info_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CImport -----------------------------------------------------
{-
   alternatives:
      alternative Import:
         child nm             : {HsName}
-}
-- cata
sem_CImport :: CImport ->
               T_CImport
sem_CImport (CImport_Import _nm) =
    (sem_CImport_Import _nm)
-- semantic domain
type T_CImport = ( )
sem_CImport_Import :: HsName ->
                      T_CImport
sem_CImport_Import nm_ =
    ( )
-- CImportL ----------------------------------------------------
{-
   alternatives:
      alternative Cons:
         child hd             : CImport 
         child tl             : CImportL 
      alternative Nil:
-}
-- cata
sem_CImportL :: CImportL ->
                T_CImportL
sem_CImportL list =
    (Prelude.foldr sem_CImportL_Cons sem_CImportL_Nil (Prelude.map sem_CImport list))
-- semantic domain
type T_CImportL = ( )
sem_CImportL_Cons :: T_CImport ->
                     T_CImportL ->
                     T_CImportL
sem_CImportL_Cons hd_ tl_ =
    ( )
sem_CImportL_Nil :: T_CImportL
sem_CImportL_Nil =
    ( )
-- CMetaBind ---------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CMetaBind 
   alternatives:
      alternative Plain:
         visit 0:
            local boundval    : _
      alternative Function0:
         visit 0:
            local boundval    : _
      alternative Function1:
         visit 0:
            local boundval    : _
      alternative Apply0:
         visit 0:
            local boundval    : _
-}
-- 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 = ( CMetaBind)
sem_CMetaBind_Plain :: T_CMetaBind
sem_CMetaBind_Plain =
    (case (CMetaBind_Plain) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaBind_Function0 :: T_CMetaBind
sem_CMetaBind_Function0 =
    (case (CMetaBind_Function0) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaBind_Function1 :: T_CMetaBind
sem_CMetaBind_Function1 =
    (case (CMetaBind_Function1) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaBind_Apply0 :: T_CMetaBind
sem_CMetaBind_Apply0 =
    (case (CMetaBind_Apply0) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CMetaVal ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CMetaVal 
   alternatives:
      alternative Val:
         visit 0:
            local boundval    : _
      alternative Dict:
         visit 0:
            local boundval    : _
      alternative DictClass:
         child tracks         : {[Track]}
         visit 0:
            local boundval    : _
      alternative DictInstance:
         child tracks         : {[Track]}
         visit 0:
            local boundval    : _
      alternative Track:
         child track          : {Track}
         visit 0:
            local boundval    : _
-}
-- 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 = ( CMetaVal)
sem_CMetaVal_Val :: T_CMetaVal
sem_CMetaVal_Val =
    (case (CMetaVal_Val) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaVal_Dict :: T_CMetaVal
sem_CMetaVal_Dict =
    (case (CMetaVal_Dict) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaVal_DictClass :: ([Track]) ->
                          T_CMetaVal
sem_CMetaVal_DictClass tracks_ =
    (case (CMetaVal_DictClass tracks_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaVal_DictInstance :: ([Track]) ->
                             T_CMetaVal
sem_CMetaVal_DictInstance tracks_ =
    (case (CMetaVal_DictInstance tracks_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CMetaVal_Track :: Track ->
                      T_CMetaVal
sem_CMetaVal_Track track_ =
    (case (CMetaVal_Track track_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CMetas ------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CMetas 
   alternatives:
      alternative Tuple:
         child x1             : CMetaBind 
         child x2             : CMetaVal 
         visit 0:
            local boundval    : _
-}
-- cata
sem_CMetas :: CMetas ->
              T_CMetas
sem_CMetas ( x1,x2) =
    (sem_CMetas_Tuple (sem_CMetaBind x1) (sem_CMetaVal x2))
-- semantic domain
type T_CMetas = ( CMetas)
sem_CMetas_Tuple :: T_CMetaBind ->
                    T_CMetaVal ->
                    T_CMetas
sem_CMetas_Tuple x1_ x2_ =
    (case (x2_) of
     { ( _x2Iboundval) ->
         (case (x1_) of
          { ( _x1Iboundval) ->
              (case ((_x1Iboundval,_x2Iboundval)) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
-- CModule -----------------------------------------------------
{-
   alternatives:
      alternative Mod:
         child moduleNm       : {HsName}
         child exports        : CExportL 
         child imports        : CImportL 
         child declMetas      : CDeclMetaL 
         child expr           : CExpr 
-}
-- 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 = ( )
sem_CModule_Mod :: HsName ->
                   T_CExportL ->
                   T_CImportL ->
                   T_CDeclMetaL ->
                   T_CExpr ->
                   T_CModule
sem_CModule_Mod moduleNm_ exports_ imports_ declMetas_ expr_ =
    ( )
-- CPat --------------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CPat 
   alternatives:
      alternative Var:
         child pnm            : {HsName}
         visit 0:
            local boundval    : _
      alternative Con:
         child tag            : {CTag}
         child rest           : CPatRest 
         child binds          : CPatFldL 
         visit 0:
            local boundval    : _
      alternative Int:
         child int            : {Int}
         visit 0:
            local boundval    : _
      alternative Char:
         child char           : {Char}
         visit 0:
            local boundval    : _
      alternative BoolExpr:
         child cexpr          : {CExpr}
         visit 0:
            local boundval    : _
-}
-- 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 = ( CPat)
sem_CPat_Var :: HsName ->
                T_CPat
sem_CPat_Var pnm_ =
    (case (CPat_Var pnm_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CPat_Con :: CTag ->
                T_CPatRest ->
                T_CPatFldL ->
                T_CPat
sem_CPat_Con tag_ rest_ binds_ =
    (case (binds_) of
     { ( _bindsIboundval) ->
         (case (rest_) of
          { ( _restIboundval) ->
              (case (CPat_Con tag_ _restIboundval _bindsIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
sem_CPat_Int :: Int ->
                T_CPat
sem_CPat_Int int_ =
    (case (CPat_Int int_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CPat_Char :: Char ->
                 T_CPat
sem_CPat_Char char_ =
    (case (CPat_Char char_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CPat_BoolExpr :: CExpr ->
                     T_CPat
sem_CPat_BoolExpr cexpr_ =
    (case (CPat_BoolExpr cexpr_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CPatFld -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CPatFld 
   alternatives:
      alternative Fld:
         child lbl            : {HsName}
         child offset         : CExpr 
         child bind           : CBind 
         child fldAnns        : CBindAnnL 
         visit 0:
            local boundsel    : _
            local boundval    : _
-}
-- 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 = ( CPatFld)
sem_CPatFld_Fld :: HsName ->
                   T_CExpr ->
                   T_CBind ->
                   T_CBindAnnL ->
                   T_CPatFld
sem_CPatFld_Fld lbl_ offset_ bind_ fldAnns_ =
    (case (fldAnns_) of
     { ( _fldAnnsIboundval) ->
         (case (noBoundSel) of
          { _boundsel ->
          (case (_boundsel) of
           { _bindOboundsel ->
           (case (bind_ _bindOboundsel) of
            { ( _bindIboundval,_bindIselvalNoL,_bindIselvalYesL) ->
                (case (offset_) of
                 { ( _offsetIboundval) ->
                     (case (CPatFld_Fld lbl_ _offsetIboundval _bindIboundval _fldAnnsIboundval) of
                      { _boundval ->
                      (case (_boundval) of
                       { _lhsOboundval ->
                       ( _lhsOboundval) }) }) }) }) }) }) })
-- CPatFldL ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CPatFldL 
   alternatives:
      alternative Cons:
         child hd             : CPatFld 
         child tl             : CPatFldL 
         visit 0:
            local boundval    : _
      alternative Nil:
         visit 0:
            local boundval    : _
-}
-- 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 = ( CPatFldL)
sem_CPatFldL_Cons :: T_CPatFld ->
                     T_CPatFldL ->
                     T_CPatFldL
sem_CPatFldL_Cons hd_ tl_ =
    (case (tl_) of
     { ( _tlIboundval) ->
         (case (hd_) of
          { ( _hdIboundval) ->
              (case ((:) _hdIboundval _tlIboundval) of
               { _boundval ->
               (case (_boundval) of
                { _lhsOboundval ->
                ( _lhsOboundval) }) }) }) })
sem_CPatFldL_Nil :: T_CPatFldL
sem_CPatFldL_Nil =
    (case ([]) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CPatRest ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         boundval             : CPatRest 
   alternatives:
      alternative Var:
         child nm             : {HsName}
         visit 0:
            local boundval    : _
      alternative Empty:
         visit 0:
            local boundval    : _
-}
-- 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 = ( CPatRest)
sem_CPatRest_Var :: HsName ->
                    T_CPatRest
sem_CPatRest_Var nm_ =
    (case (CPatRest_Var nm_) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
sem_CPatRest_Empty :: T_CPatRest
sem_CPatRest_Empty =
    (case (CPatRest_Empty) of
     { _boundval ->
     (case (_boundval) of
      { _lhsOboundval ->
      ( _lhsOboundval) }) })
-- CodeAGItf ---------------------------------------------------
{-
   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 = ( )
sem_CodeAGItf_AGItf :: T_CModule ->
                       T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
    ( )