module UHC.Light.Compiler.Core.BindExtract(BoundSel (..), noBoundSel, emptyBoundSel
, boundSelVal, boundSelExpr, boundSelMetaLev0, boundSelMetaLev01
, SelVal
, cbindExtractMk, cbindExtract, cboundExtract
, cbindExtractExprMk
, cbindExtractVal', cbindExtractVal, cboundExtractVal', cboundExtractVal) where
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Ty
import Control.Monad.State
type StateSel = State ([SelVal],[SelVal]) ()
mkSel :: Bool -> SelVal -> ([SelVal], [SelVal], [StateSel])
mkSel isSelected boundval
| isSelected = ([boundval], [] , [modify (\(s:sel, acc) -> (sel, s :acc))])
| otherwise = ([] , [boundval], [modify (\( sel, acc) -> (sel, boundval:acc))])
data BoundSel
= BoundSel
{ selBind :: Bool
, selMeta :: ACoreBindAspectKeyS -> Bool
, selVal :: ACoreBindAspectKeyS -> MetaLev -> CLbl -> Bool
, selTy :: ACoreBindAspectKeyS -> Bool
, selFFE :: Bool
}
noBoundSel, emptyBoundSel :: BoundSel
noBoundSel
= BoundSel
{ selBind = False
, selMeta = const False
, selVal = \_ _ _ -> False
, selTy = const False
, selFFE = False
}
emptyBoundSel = noBoundSel
boundSelVal :: BoundSel
boundSelVal
= noBoundSel
{ selVal = \_ _ _ -> True
}
boundSelExpr :: BoundSel
boundSelExpr
= boundSelMetaLev0
{ selBind = True
}
boundSelMetaLev0 :: BoundSel
boundSelMetaLev0
= noBoundSel
{ selBind = True
, selVal = \_ mlev _ -> mlev == 0
, selFFE = True
}
boundSelMetaLev01 :: BoundSel
boundSelMetaLev01
= boundSelMetaLev0
{ selVal = \_ mlev _ -> mlev <= 1
, selTy = const True
}
type SelVal = CBound
cbindExtractMk :: BoundSel -> CBind -> ([SelVal],[SelVal],[SelVal] -> CBind)
cbindExtractMk sel b
= ( selvalYesL_Syn_CBind t
, selvalNoL_Syn_CBind t
, \yessel -> b {bindAspects_CBind_Bind = selvalInsertYes_Syn_CBind t yessel}
)
where t = wrap_CBind (sem_CBind b)
(Inh_CBind
{ boundsel_Inh_CBind = sel
})
cbindExtract :: BoundSel -> CBind -> ([SelVal],[SelVal])
cbindExtract sel b
= (yessel,nosel)
where (yessel,nosel,_) = cbindExtractMk sel b
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
})
cbindExtractExprMk :: CBind -> (CExpr, CExpr -> CBind)
cbindExtractExprMk bi
= case bo of
CBound_Val {expr_CBound_Val =e} -> (e, mkbi $ \e' -> bo {expr_CBound_Val =e'})
CBound_Bind {expr_CBound_Bind=e} -> (e, mkbi $ \e' -> bo {expr_CBound_Bind=e'})
CBound_FFE {expr_CBound_FFE =e} -> (e, mkbi $ \e' -> bo {expr_CBound_FFE =e'})
where mkbi mke = \e' -> mks (mke e' : bos)
(bo : bos, _, mks) = cbindExtractMk boundSelExpr bi
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
sem_CAlt :: CAlt ->
T_CAlt
sem_CAlt (CAlt_Alt _pat _expr) =
(sem_CAlt_Alt (sem_CPat _pat) (sem_CExpr _expr))
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) }) }) }) })
sem_CAltL :: CAltL ->
T_CAltL
sem_CAltL list =
(Prelude.foldr sem_CAltL_Cons sem_CAltL_Nil (Prelude.map sem_CAlt list))
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) }) })
sem_CBind :: CBind ->
T_CBind
sem_CBind (CBind_Bind _nm _bindAspects) =
(sem_CBind_Bind _nm (sem_CBoundL _bindAspects))
type T_CBind = BoundSel ->
( CBind,([SelVal] -> [SelVal]),([SelVal]),([SelVal]))
data Inh_CBind = Inh_CBind {boundsel_Inh_CBind :: !(BoundSel)}
data Syn_CBind = Syn_CBind {boundval_Syn_CBind :: !(CBind),selvalInsertYes_Syn_CBind :: !(([SelVal] -> [SelVal])),selvalNoL_Syn_CBind :: !(([SelVal])),selvalYesL_Syn_CBind :: !(([SelVal]))}
wrap_CBind :: T_CBind ->
Inh_CBind ->
Syn_CBind
wrap_CBind sem (Inh_CBind _lhsIboundsel) =
(let ( _lhsOboundval,_lhsOselvalInsertYes,_lhsOselvalNoL,_lhsOselvalYesL) = sem _lhsIboundsel
in (Syn_CBind _lhsOboundval _lhsOselvalInsertYes _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,_bindAspectsIselvalInsertYesM,_bindAspectsIselvalNoL,_bindAspectsIselvalYesL) ->
(case (CBind_Bind nm_ _bindAspectsIboundval) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
(case (\sel -> reverse $ snd $ execState (sequence_ _bindAspectsIselvalInsertYesM) (sel,[])) of
{ _lhsOselvalInsertYes ->
(case (_bindAspectsIselvalNoL) of
{ _lhsOselvalNoL ->
(case (_bindAspectsIselvalYesL) of
{ _lhsOselvalYesL ->
( _lhsOboundval,_lhsOselvalInsertYes,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }))
sem_CBindAnn :: CBindAnn ->
T_CBindAnn
sem_CBindAnn (CBindAnn_Coe _coe) =
(sem_CBindAnn_Coe _coe)
type T_CBindAnn = ( CBindAnn)
sem_CBindAnn_Coe :: (()) ->
T_CBindAnn
sem_CBindAnn_Coe coe_ =
(case (CBindAnn_Coe coe_) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
( _lhsOboundval) }) })
sem_CBindAnnL :: CBindAnnL ->
T_CBindAnnL
sem_CBindAnnL list =
(Prelude.foldr sem_CBindAnnL_Cons sem_CBindAnnL_Nil (Prelude.map sem_CBindAnn list))
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) }) })
sem_CBindL :: CBindL ->
T_CBindL
sem_CBindL list =
(Prelude.foldr sem_CBindL_Cons sem_CBindL_Nil (Prelude.map sem_CBind list))
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,_hdIselvalInsertYes,_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) }) }))
sem_CBound :: CBound ->
T_CBound
sem_CBound (CBound_Bind _bindMeta _expr) =
(sem_CBound_Bind (sem_CMetas _bindMeta) (sem_CExpr _expr))
sem_CBound (CBound_Meta _aspectKeyS _cmetas) =
(sem_CBound_Meta _aspectKeyS (sem_CMetas _cmetas))
sem_CBound (CBound_Val _aspectKeyS _mlev _lbl _expr) =
(sem_CBound_Val _aspectKeyS _mlev _lbl (sem_CExpr _expr))
sem_CBound (CBound_Ty _aspectKeyS _ty) =
(sem_CBound_Ty _aspectKeyS _ty)
sem_CBound (CBound_FFE _callconv _expEnt _expr _ty) =
(sem_CBound_FFE _callconv _expEnt (sem_CExpr _expr) _ty)
type T_CBound = BoundSel ->
( CBound,([StateSel]),([SelVal]),([SelVal]))
data Inh_CBound = Inh_CBound {boundsel_Inh_CBound :: !(BoundSel)}
data Syn_CBound = Syn_CBound {boundval_Syn_CBound :: !(CBound),selvalInsertYesM_Syn_CBound :: !(([StateSel])),selvalNoL_Syn_CBound :: !(([SelVal])),selvalYesL_Syn_CBound :: !(([SelVal]))}
wrap_CBound :: T_CBound ->
Inh_CBound ->
Syn_CBound
wrap_CBound sem (Inh_CBound _lhsIboundsel) =
(let ( _lhsOboundval,_lhsOselvalInsertYesM,_lhsOselvalNoL,_lhsOselvalYesL) = sem _lhsIboundsel
in (Syn_CBound _lhsOboundval _lhsOselvalInsertYesM _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 (mkSel _isSelected _boundval) of
{ __tup1 ->
(case (__tup1) of
{ (_,_,_lhsOselvalInsertYesM) ->
(case (__tup1) of
{ (_,_lhsOselvalNoL,_) ->
(case (__tup1) of
{ (_lhsOselvalYesL,_,_) ->
( _lhsOboundval,_lhsOselvalInsertYesM,_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 (mkSel _isSelected _boundval) of
{ __tup2 ->
(case (__tup2) of
{ (_,_,_lhsOselvalInsertYesM) ->
(case (__tup2) of
{ (_,_lhsOselvalNoL,_) ->
(case (__tup2) of
{ (_lhsOselvalYesL,_,_) ->
( _lhsOboundval,_lhsOselvalInsertYesM,_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 (mkSel _isSelected _boundval) of
{ __tup3 ->
(case (__tup3) of
{ (_,_,_lhsOselvalInsertYesM) ->
(case (__tup3) of
{ (_,_lhsOselvalNoL,_) ->
(case (__tup3) of
{ (_lhsOselvalYesL,_,_) ->
( _lhsOboundval,_lhsOselvalInsertYesM,_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 (mkSel _isSelected _boundval) of
{ __tup4 ->
(case (__tup4) of
{ (_,_,_lhsOselvalInsertYesM) ->
(case (__tup4) of
{ (_,_lhsOselvalNoL,_) ->
(case (__tup4) of
{ (_lhsOselvalYesL,_,_) ->
( _lhsOboundval,_lhsOselvalInsertYesM,_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 (mkSel _isSelected _boundval) of
{ __tup5 ->
(case (__tup5) of
{ (_,_,_lhsOselvalInsertYesM) ->
(case (__tup5) of
{ (_,_lhsOselvalNoL,_) ->
(case (__tup5) of
{ (_lhsOselvalYesL,_,_) ->
( _lhsOboundval,_lhsOselvalInsertYesM,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }) }))
sem_CBoundL :: CBoundL ->
T_CBoundL
sem_CBoundL list =
(Prelude.foldr sem_CBoundL_Cons sem_CBoundL_Nil (Prelude.map sem_CBound list))
type T_CBoundL = BoundSel ->
( CBoundL,([StateSel]),([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,_tlIselvalInsertYesM,_tlIselvalNoL,_tlIselvalYesL) ->
(case (_lhsIboundsel) of
{ _hdOboundsel ->
(case (hd_ _hdOboundsel) of
{ ( _hdIboundval,_hdIselvalInsertYesM,_hdIselvalNoL,_hdIselvalYesL) ->
(case ((:) _hdIboundval _tlIboundval) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
(case (_hdIselvalInsertYesM ++ _tlIselvalInsertYesM) of
{ _lhsOselvalInsertYesM ->
(case (_hdIselvalNoL ++ _tlIselvalNoL) of
{ _lhsOselvalNoL ->
(case (_hdIselvalYesL ++ _tlIselvalYesL) of
{ _lhsOselvalYesL ->
( _lhsOboundval,_lhsOselvalInsertYesM,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }) }) }) }) }))
sem_CBoundL_Nil :: T_CBoundL
sem_CBoundL_Nil =
(\ _lhsIboundsel ->
(case ([]) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
(case ([]) of
{ _lhsOselvalInsertYesM ->
(case ([]) of
{ _lhsOselvalNoL ->
(case ([]) of
{ _lhsOselvalYesL ->
( _lhsOboundval,_lhsOselvalInsertYesM,_lhsOselvalNoL,_lhsOselvalYesL) }) }) }) }) }))
sem_CDataCon :: CDataCon ->
T_CDataCon
sem_CDataCon (CDataCon_Con _conNm _tagNr _arity) =
(sem_CDataCon_Con _conNm _tagNr _arity)
type T_CDataCon = ( )
sem_CDataCon_Con :: HsName ->
Int ->
Int ->
T_CDataCon
sem_CDataCon_Con conNm_ tagNr_ arity_ =
( )
sem_CDataConL :: CDataConL ->
T_CDataConL
sem_CDataConL list =
(Prelude.foldr sem_CDataConL_Cons sem_CDataConL_Nil (Prelude.map sem_CDataCon list))
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 =
( )
sem_CDeclMeta :: CDeclMeta ->
T_CDeclMeta
sem_CDeclMeta (CDeclMeta_Data _tyNm _dataCons) =
(sem_CDeclMeta_Data _tyNm (sem_CDataConL _dataCons))
type T_CDeclMeta = ( )
sem_CDeclMeta_Data :: HsName ->
T_CDataConL ->
T_CDeclMeta
sem_CDeclMeta_Data tyNm_ dataCons_ =
( )
sem_CDeclMetaL :: CDeclMetaL ->
T_CDeclMetaL
sem_CDeclMetaL list =
(Prelude.foldr sem_CDeclMetaL_Cons sem_CDeclMetaL_Nil (Prelude.map sem_CDeclMeta list))
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 =
( )
sem_CExport :: CExport ->
T_CExport
sem_CExport (CExport_Export _nm) =
(sem_CExport_Export _nm)
sem_CExport (CExport_ExportData _nm _mbConNmL) =
(sem_CExport_ExportData _nm _mbConNmL)
type T_CExport = ( )
sem_CExport_Export :: HsName ->
T_CExport
sem_CExport_Export nm_ =
( )
sem_CExport_ExportData :: HsName ->
(Maybe [HsName]) ->
T_CExport
sem_CExport_ExportData nm_ mbConNmL_ =
( )
sem_CExportL :: CExportL ->
T_CExportL
sem_CExportL list =
(Prelude.foldr sem_CExportL_Cons sem_CExportL_Nil (Prelude.map sem_CExport list))
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 =
( )
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))
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,_argIselvalInsertYesM,_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,_bindIselvalInsertYes,_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) }) }) }) })
sem_CExprAnn :: CExprAnn ->
T_CExprAnn
sem_CExprAnn (CExprAnn_Ty _ty) =
(sem_CExprAnn_Ty _ty)
sem_CExprAnn (CExprAnn_Debug _info) =
(sem_CExprAnn_Debug _info)
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_Debug :: String ->
T_CExprAnn
sem_CExprAnn_Debug info_ =
(case (CExprAnn_Debug info_) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
( _lhsOboundval) }) })
sem_CImport :: CImport ->
T_CImport
sem_CImport (CImport_Import _nm) =
(sem_CImport_Import _nm)
type T_CImport = ( )
sem_CImport_Import :: HsName ->
T_CImport
sem_CImport_Import nm_ =
( )
sem_CImportL :: CImportL ->
T_CImportL
sem_CImportL list =
(Prelude.foldr sem_CImportL_Cons sem_CImportL_Nil (Prelude.map sem_CImport list))
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 =
( )
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)
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) }) })
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)
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) }) })
sem_CMetas :: CMetas ->
T_CMetas
sem_CMetas ( x1,x2) =
(sem_CMetas_Tuple (sem_CMetaBind x1) (sem_CMetaVal x2))
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) }) }) }) })
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))
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_ =
( )
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)
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) }) })
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))
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,_bindIselvalInsertYes,_bindIselvalNoL,_bindIselvalYesL) ->
(case (offset_) of
{ ( _offsetIboundval) ->
(case (CPatFld_Fld lbl_ _offsetIboundval _bindIboundval _fldAnnsIboundval) of
{ _boundval ->
(case (_boundval) of
{ _lhsOboundval ->
( _lhsOboundval) }) }) }) }) }) }) })
sem_CPatFldL :: CPatFldL ->
T_CPatFldL
sem_CPatFldL list =
(Prelude.foldr sem_CPatFldL_Cons sem_CPatFldL_Nil (Prelude.map sem_CPatFld list))
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) }) })
sem_CPatRest :: CPatRest ->
T_CPatRest
sem_CPatRest (CPatRest_Var _nm) =
(sem_CPatRest_Var _nm)
sem_CPatRest (CPatRest_Empty) =
(sem_CPatRest_Empty)
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) }) })
sem_CodeAGItf :: CodeAGItf ->
T_CodeAGItf
sem_CodeAGItf (CodeAGItf_AGItf _module) =
(sem_CodeAGItf_AGItf (sem_CModule _module))
type T_CodeAGItf = ( )
sem_CodeAGItf_AGItf :: T_CModule ->
T_CodeAGItf
sem_CodeAGItf_AGItf module_ =
( )