uhc-light-1.1.7.2: src/UHC/Light/Compiler/EH/MainAG_DataConstr.hs
module UHC.Light.Compiler.EH.MainAG_DataConstr where
import Data.Char
import Data.List as List
import UHC.Util.Pretty
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Base.TermLike
import UHC.Light.Compiler.Base.HsName.Builtin
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.Gam.Full
import UHC.Light.Compiler.Error
import UHC.Light.Compiler.Error.Pretty
import UHC.Light.Compiler.EH
import UHC.Light.Compiler.Ty.Pretty
import UHC.Light.Compiler.Ty.FitsInCommon
import UHC.Light.Compiler.Ty.FitsIn
import qualified UHC.Util.FastSeq as Seq
import UHC.Util.Utils
import UHC.Light.Compiler.VarMp
import UHC.Light.Compiler.Substitutable
import Data.Maybe
import UHC.Light.Compiler.Ty.Utils1
import UHC.Light.Compiler.Ty.Trf.Quantify
import UHC.Light.Compiler.Ty.Trf.Instantiate
import UHC.Light.Compiler.Ty
import UHC.Light.Compiler.Base.Debug as Debug
import Debug.Trace
import UHC.Light.Compiler.Ty.FitsInCommon2
import UHC.Light.Compiler.Ty.FIEnv2
import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Set (Set)
import Data.Map (Map)
import UHC.Light.Compiler.Ty.Trf.FreshVar
import UHC.Light.Compiler.Ty.Ftv
import UHC.Util.Utils (groupSortOn)
import Control.Applicative ((<|>))
import UHC.Light.Compiler.AbstractCore
import UHC.Light.Compiler.AbstractCore.Utils
import UHC.Light.Compiler.Core
import UHC.Light.Compiler.Core.FFI
import UHC.Light.Compiler.Core.Utils
import UHC.Light.Compiler.Core.Pretty
import UHC.Light.Compiler.Foreign.Extract
import UHC.Light.Compiler.LamInfo
import UHC.Light.Compiler.CodeGen.RefGenerator
import qualified UHC.Light.Compiler.Core.SysF.AsTy as SysF
import UHC.Light.Compiler.FinalEnv
import UHC.Light.Compiler.Core.Subst
import Control.Monad.State
import UHC.Light.Compiler.Ty.Utils2
import UHC.Light.Compiler.Base.Target
import UHC.Light.Compiler.Core.Coercion
import UHC.Light.Compiler.Ty.Trf.MergePreds
import UHC.Light.Compiler.Ty.Trf.Canonic
import UHC.Light.Compiler.Gam.ClGam
import UHC.Light.Compiler.Pred
import UHC.Light.Compiler.Pred.RedGraph (redPruneReductionsUntil)
import UHC.Light.Compiler.CHR
import UHC.Light.Compiler.CHR.Constraint
import UHC.Light.Compiler.Pred.CHR
import UHC.Light.Compiler.Pred.ToCHR
import UHC.Light.Compiler.Pred.Heuristics
import UHC.Light.Compiler.CHR.Solve
import UHC.Light.Compiler.Pred.EvidenceToCore
import UHC.Light.Compiler.Gam.ClassDefaultGam
import UHC.Light.Compiler.Ty.Trf.BetaReduce (tyBetaRedFull)
import UHC.Light.Compiler.Module.ImportExport
import UHC.Light.Compiler.Ty.UsedNames
import UHC.Light.Compiler.CodeGen.ImportUsedModules
import UHC.Light.Compiler.CodeGen.ModuleImportExportImpl
import UHC.Light.Compiler.CodeGen.BuiltinPrims
import UHC.Light.Compiler.Foreign
import UHC.Light.Compiler.Foreign
import UHC.Light.Compiler.Foreign.Pretty
import UHC.Light.Compiler.Deriving
import UHC.Light.Compiler.Generics
import UHC.Light.Compiler.VarMp.Utils
import UHC.Light.Compiler.EH.MainAG_common
-- DataConstr --------------------------------------------------
{-
visit 0:
synthesized attribute:
range : Range
visit 1:
chained attribute:
gUniq : UID
visit 2:
inherited attributes:
dataTy : Ty
knPolCtx : Polarity
polGam : PolGam
tyGam : TyGam
chained attribute:
polVarMp : VarMp
synthesized attributes:
dataAltTyL : AssocL HsName Ty
gathMaxArity : Int
visit 3:
inherited attributes:
dataAltTy : Ty
maxArity : Int
tyKiGam : TyKiGam
tyNm : HsName
chained attribute:
kiVarMp : VarMp
synthesized attributes:
dataAltForNewType : Ty
dataConstrNmL : [HsName]
dataConstrTagMp : DataConstrTagMp
intlTyKiGam : TyKiGam
visit 4:
inherited attributes:
finTyKiGam : TyKiGam
tvKiVarMp : VarMp
chained attributes:
patTyVarMp : VarMp
patValGam : ValGam
synthesized attributes:
fldSelGam : ValGam
fldUpdGam : ValGam
gathCnstrMp : CHRPredOccCnstrMp
gathRangeMp : RangeMp
visit 5:
inherited attributes:
chrEvidBindMp : EvidKeyToCBindMap
chrScopeBindMp : PredScopeToCBindMap
chrStore : ScopedPredStore
clDfGam : ClassDefaultGam
clGam : ClGam
finKiVarMp : VarMp
finTyVarMp : VarMp
isNewtype : Bool
kiGam : KiGam
lexLev : Int
moduleNm : HsName
opts : EHCOpts
predScope : PredScope
rangeMp : RangeMp
sysfEnv : ToSysfEnv
tyKiGlobFreeTvarS : TyVarIdS
tyTyGlobFreeTvarS : TyVarIdS
tyTyTySigFreeTvarS : TyVarIdS
valGam : ValGam
valTyGlobFreeTvarS : TyVarIdS
synthesized attributes:
allErrSq : ErrSq
errSq : ErrSq
ffeCBindL : CBindL
ffiCBindL : CBindL
gathMentrelFilterMp : ModEntRelFilterMp
gathTvKiVarMp : VarMp
pp : PP_Doc
tyCBindL : CBindL
valCBindL : CBindL
alternatives:
alternative Constr:
child hsrange : {Range}
child conNm : {HsName}
child mbFixityPrio : {Maybe (Int,Fixity)}
child fields : DataFields
child mbGadtTyExpr : MbTyExpr
visit 0:
local range : {Range}
visit 1:
local _tup10 : _
intra range : {Range}
visit 2:
local dataConFldTyL : _
local mbGadtFO : _
local gadtTyVarMp : _
local dataConGadtTyL : _
local dataConGadtFldTyL : _
local dataConProdTy2 : _
local dataConProdTy1 : _
local dataConProdTy : {Ty}
local dataAltTyL : _
local arity : {Int}
intra _tup10 : _
intra range : {Range}
visit 3:
local dataAltForNewType : _
local lUniq_con : {UID}
local tag : _
local ctag : _
local fldRefL : _
local fldMp : _
local dataConTyAsVar : {Ty}
local dataConGadtFldAnnL : _
local dti : _
local lUniq : {UID}
local fldsKiVarMp : _
local _tup9 : _
local fo_ : {FIOut}
intra dataConGadtFldTyL : _
intra _tup10 : _
intra arity : {Int}
intra dataConGadtTyL : _
intra dataConFldTyL : _
intra dataConProdTy : {Ty}
intra gadtTyVarMp : _
intra range : {Range}
intra mbGadtFO : _
visit 4:
local lUniq_uncon : {UID}
local dataConTyL : _
local dataConTy2 : _
local dataConTy1 : {Ty}
local dataConTy : {Ty}
local dataUnConTyVar : _
local dataConTyVar : _
local dataConProdTyFv : _
local dataConTyFv : {[TyVarId]}
local dataQuUnConTy : _
local dataConGadtTy : _
local dataUnConTyAsVar : _
intra _tup10 : _
intra dataConFldTyL : _
intra lUniq_con : {UID}
intra dataConProdTy : {Ty}
intra gadtTyVarMp : _
intra dataConTyAsVar : {Ty}
intra range : {Range}
intra dataConGadtFldTyL : _
intra mbGadtFO : _
intra fo_ : {FIOut}
visit 5:
local dupErrs : _
local pp : _
intra range : {Range}
intra dataConGadtFldTyL : _
intra mbGadtFO : _
intra fo_ : {FIOut}
-}
sem_DataConstr_Constr :: Range ->
HsName ->
(Maybe (Int,Fixity)) ->
T_DataFields ->
T_MbTyExpr ->
T_DataConstr
sem_DataConstr_Constr hsrange_ conNm_ mbFixityPrio_ fields_ mbGadtTyExpr_ | hsrange_ `seq` (conNm_ `seq` (mbFixityPrio_ `seq` (fields_ `seq` (mbGadtTyExpr_ `seq` (True))))) =
(case (mbGadtTyExpr_) of
{ ( _mbGadtTyExprIrange,mbGadtTyExpr_1) | True ->
(case (fields_) of
{ ( _fieldsIrange,fields_1) | True ->
(case (rangeUnions [hsrange_, _fieldsIrange , _mbGadtTyExprIrange
]) of
{ _range | _range `seq` (True) ->
(case (_range) of
{ _lhsOrange | _lhsOrange `seq` (True) ->
(case ((let sem_DataConstr_Constr_1 :: T_DataConstr_1
sem_DataConstr_Constr_1 =
(\ _lhsIgUniq ->
_lhsIgUniq `seq`
((case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> case nextUnique __cont of { (__cont, lUniq_con) -> case nextUnique __cont of { (__cont, lUniq_uncon) -> (__cont,lUniq,lUniq_con,lUniq_uncon)}}} )) of
{ __tup10 | __tup10 `seq` (True) ->
(case (__tup10) of
{ (_fieldsOgUniq,_,_,_) | _fieldsOgUniq `seq` (True) ->
(case (fields_1 _fieldsOgUniq) of
{ ( _fieldsIgUniq,fields_2) | True ->
(case (_fieldsIgUniq) of
{ _mbGadtTyExprOgUniq | _mbGadtTyExprOgUniq `seq` (True) ->
(case (mbGadtTyExpr_1 _mbGadtTyExprOgUniq) of
{ ( _mbGadtTyExprIgUniq,mbGadtTyExpr_2) | True ->
(case (_mbGadtTyExprIgUniq) of
{ _lhsOgUniq | _lhsOgUniq `seq` (True) ->
(case ((let sem_DataConstr_Constr_2 :: T_DataConstr_2
sem_DataConstr_Constr_2 =
(\ _lhsIdataTy
_lhsIknPolCtx
_lhsIpolGam
_lhsIpolVarMp
_lhsItyGam ->
_lhsIdataTy `seq`
(_lhsIknPolCtx `seq`
(_lhsIpolGam `seq`
(_lhsIpolVarMp `seq`
(_lhsItyGam `seq`
((case (_lhsItyGam) of
{ _fieldsOtyGam | _fieldsOtyGam `seq` (True) ->
(case (_lhsIpolVarMp) of
{ _fieldsOpolVarMp | _fieldsOpolVarMp `seq` (True) ->
(case (_lhsIpolGam) of
{ _fieldsOpolGam | _fieldsOpolGam `seq` (True) ->
(case (_lhsIknPolCtx) of
{ _fieldsOknPolCtx | _fieldsOknPolCtx `seq` (True) ->
(case (fields_2 _fieldsOknPolCtx _fieldsOpolGam _fieldsOpolVarMp _fieldsOtyGam) of
{ ( _fieldsIfldAnnL,_fieldsIfldTyL,_fieldsIpolVarMp,_fieldsItyGam,fields_3) | True ->
(case (_fieldsItyGam) of
{ _mbGadtTyExprOtyGam | _mbGadtTyExprOtyGam `seq` (True) ->
(case (_fieldsIfldTyL) of
{ _dataConFldTyL | _dataConFldTyL `seq` (True) ->
(case (_fieldsIpolVarMp) of
{ _mbGadtTyExprOpolVarMp | _mbGadtTyExprOpolVarMp `seq` (True) ->
(case (_lhsIpolGam) of
{ _mbGadtTyExprOpolGam | _mbGadtTyExprOpolGam `seq` (True) ->
(case (_lhsIknPolCtx) of
{ _mbGadtTyExprOknPolCtx | _mbGadtTyExprOknPolCtx `seq` (True) ->
(case (mbGadtTyExpr_2 _mbGadtTyExprOknPolCtx _mbGadtTyExprOpolGam _mbGadtTyExprOpolVarMp _mbGadtTyExprOtyGam) of
{ ( _mbGadtTyExprIpolVarMp,_mbGadtTyExprItyMb,mbGadtTyExpr_3) | True ->
(case (fmap (\ty -> fitsIn (unifyFIOpts {fioDontBind = varFreeSet ty}) defaultFIEnv uidStart (emptyVarMp::VarMp) _lhsIdataTy ty) _mbGadtTyExprItyMb) of
{ _mbGadtFO | _mbGadtFO `seq` (True) ->
(case (maybe emptyVarMp foVarMp _mbGadtFO) of
{ _gadtTyVarMp | _gadtTyVarMp `seq` (True) ->
(case ([ mkTyPr $ Pred_Eq (mkTyVar v) t | (v,t) <- varmpToAssocTyL _gadtTyVarMp ]) of
{ _dataConGadtTyL | _dataConGadtTyL `seq` (True) ->
(case (zip (repeat Nothing) _dataConGadtTyL ++ _dataConFldTyL) of
{ _dataConGadtFldTyL | _dataConGadtFldTyL `seq` (True) ->
(case (let lbls = zipWith (\p (ml,_) -> maybe p id ml) positionalFldNames _dataConGadtFldTyL
in recRec (zipWith (\l (_,t) -> (l,t)) lbls _dataConGadtFldTyL)) of
{ _dataConProdTy2 | _dataConProdTy2 `seq` (True) ->
(case (_dataConProdTy2) of
{ _dataConProdTy1 | _dataConProdTy1 `seq` (True) ->
(case (_dataConProdTy1) of
{ _dataConProdTy | _dataConProdTy `seq` (True) ->
(case ([(conNm_,_dataConProdTy)]) of
{ _dataAltTyL | _dataAltTyL `seq` (True) ->
(case (_dataAltTyL) of
{ _lhsOdataAltTyL | _lhsOdataAltTyL `seq` (True) ->
(case (length _dataConGadtFldTyL) of
{ _arity | _arity `seq` (True) ->
(case (_arity) of
{ _lhsOgathMaxArity | _lhsOgathMaxArity `seq` (True) ->
(case (_mbGadtTyExprIpolVarMp) of
{ _lhsOpolVarMp | _lhsOpolVarMp `seq` (True) ->
(case ((let sem_DataConstr_Constr_3 :: T_DataConstr_3
sem_DataConstr_Constr_3 =
(\ _lhsIdataAltTy
_lhsIkiVarMp
_lhsImaxArity
_lhsItyKiGam
_lhsItyNm ->
_lhsIdataAltTy `seq`
(_lhsIkiVarMp `seq`
(_lhsImaxArity `seq`
(_lhsItyKiGam `seq`
(_lhsItyNm `seq`
((case (maybeHd Ty_Any snd _dataConGadtFldTyL) of
{ _dataAltForNewType | _dataAltForNewType `seq` (True) ->
(case (_dataAltForNewType) of
{ _lhsOdataAltForNewType | _lhsOdataAltForNewType `seq` (True) ->
(case ([conNm_]) of
{ _lhsOdataConstrNmL | _lhsOdataConstrNmL `seq` (True) ->
(case (__tup10) of
{ (_,_,_lUniq_con,_) | _lUniq_con `seq` (True) ->
(case (tyRecOffset conNm_ _lhsIdataAltTy) of
{ _tag | _tag `seq` (True) ->
(case (patchTyInfoCTag _lhsItyNm _lhsImaxArity $ mkOnlyConInfoCTag conNm_ _tag _arity) of
{ _ctag | _ctag `seq` (True) ->
(case (refGen 0 1 $ zipWith (\pn (ml,_) -> maybe pn id ml) positionalFldNames _dataConGadtFldTyL) of
{ _fldRefL | _fldRefL `seq` (True) ->
(case (Map.fromList $ catMaybes $ zipWith (\(_,r) (ml,_) -> fmap (\l -> (l,emptyDataFldInfo {dfiOffset = r})) ml) _fldRefL _dataConGadtFldTyL) of
{ _fldMp | _fldMp `seq` (True) ->
(case (mkNewTyVar _lUniq_con) of
{ _dataConTyAsVar | _dataConTyAsVar `seq` (True) ->
(case (replicate (length _dataConGadtTyL)
(DataConFldAnnInfo
Strictness_NonStrict
)
++ _fieldsIfldAnnL) of
{ _dataConGadtFldAnnL | _dataConGadtFldAnnL `seq` (True) ->
(case (emptyDataTagInfo
{ dtiFldMp = _fldMp
, dtiFldTyL = _dataConGadtFldTyL
, dtiConFldAnnL = _dataConGadtFldAnnL
, dtiConNm = conNm_
, dtiConTy = _dataConTyAsVar
, dtiCTag = _ctag
, dtiFldRefL = assocLElts _fldRefL
, dtiMbFixityPrio = mbFixityPrio_
}) of
{ _dti | _dti `seq` (True) ->
(case (conNm_ `Map.singleton` _dti) of
{ _lhsOdataConstrTagMp | _lhsOdataConstrTagMp `seq` (True) ->
(case (_lhsItyKiGam) of
{ _fieldsOtyKiGam | _fieldsOtyKiGam `seq` (True) ->
(case (fields_3 _fieldsOtyKiGam) of
{ ( _fieldsIintlTyKiGam,_fieldsItyKiGam,fields_4) | True ->
(case (_fieldsItyKiGam) of
{ _mbGadtTyExprOtyKiGam | _mbGadtTyExprOtyKiGam `seq` (True) ->
(case (_lhsIkiVarMp) of
{ _fieldsOkiVarMp | _fieldsOkiVarMp `seq` (True) ->
(case (__tup10) of
{ (_,_lUniq,_,_) | _lUniq `seq` (True) ->
(case (_lhsIdataTy) of
{ _fieldsOdataTy | _fieldsOdataTy `seq` (True) ->
(case (fields_4 _fieldsOdataTy _fieldsOkiVarMp) of
{ ( _fieldsIfldSelGam,_fieldsIfldUpdGam,_fieldsIgathCnstrMp,_fieldsIgathRangeMp,_fieldsIkiL,_fieldsIkiVarMp,fields_5) | True ->
(case (_fieldsIkiVarMp) of
{ _fldsKiVarMp | _fldsKiVarMp `seq` (True) ->
(case (fitsInL weakFIOpts defaultFIEnv _lUniq _fldsKiVarMp
_fieldsIkiL (repeat kiStar)) of
{ __tup9 | __tup9 `seq` (True) ->
(case (__tup9) of
{ (_,_fo_) | _fo_ `seq` (True) ->
(case (foVarMp _fo_ `varUpd` _fldsKiVarMp) of
{ _mbGadtTyExprOkiVarMp | _mbGadtTyExprOkiVarMp `seq` (True) ->
(case (mbGadtTyExpr_3 _mbGadtTyExprOkiVarMp _mbGadtTyExprOtyKiGam) of
{ ( _mbGadtTyExprIintlTyKiGam,_mbGadtTyExprIkiVarMp,mbGadtTyExpr_4) | True ->
(case (_fieldsIintlTyKiGam `gamUnion` _mbGadtTyExprIintlTyKiGam) of
{ _lhsOintlTyKiGam | _lhsOintlTyKiGam `seq` (True) ->
(case (_mbGadtTyExprIkiVarMp) of
{ _lhsOkiVarMp | _lhsOkiVarMp `seq` (True) ->
(case ((let sem_DataConstr_Constr_4 :: T_DataConstr_4
sem_DataConstr_Constr_4 =
(\ _lhsIfinTyKiGam
_lhsIpatTyVarMp
_lhsIpatValGam
_lhsItvKiVarMp ->
_lhsIfinTyKiGam `seq`
(_lhsIpatTyVarMp `seq`
(_lhsIpatValGam `seq`
(_lhsItvKiVarMp `seq`
((case (_fieldsIfldSelGam) of
{ _lhsOfldSelGam | _lhsOfldSelGam `seq` (True) ->
(case (_fieldsIfldUpdGam) of
{ _lhsOfldUpdGam | _lhsOfldUpdGam `seq` (True) ->
(case (_fieldsIgathCnstrMp) of
{ _lhsOgathCnstrMp | _lhsOgathCnstrMp `seq` (True) ->
(case (_fieldsIgathRangeMp) of
{ _lhsOgathRangeMp | _lhsOgathRangeMp `seq` (True) ->
(case (__tup10) of
{ (_,_,_,_lUniq_uncon) | _lUniq_uncon `seq` (True) ->
(case (assocLElts _dataConFldTyL) of
{ _dataConTyL | _dataConTyL `seq` (True) ->
(case (_dataConTyL `appArr` _lhsIdataTy) of
{ _dataConTy2 | _dataConTy2 `seq` (True) ->
(case (_dataConTy2) of
{ _dataConTy1 | _dataConTy1 `seq` (True) ->
(case (_dataConTy1) of
{ _dataConTy | _dataConTy `seq` (True) ->
(case (_lUniq_uncon) of
{ _dataUnConTyVar | _dataUnConTyVar `seq` (True) ->
(case (_lUniq_con) of
{ _dataConTyVar | _dataConTyVar `seq` (True) ->
(case (varFree _dataConProdTy) of
{ _dataConProdTyFv | _dataConProdTyFv `seq` (True) ->
(case (varFree _lhsIdataTy) of
{ _dataConTyFv | _dataConTyFv `seq` (True) ->
(case (let fvD = _dataConTyFv
fvU = _dataConProdTyFv
tkg = gamUnion _lhsIfinTyKiGam _fieldsIintlTyKiGam
mkk tvs = [ (v,tvarKi tkg _lhsItvKiVarMp emptyVarMp v) | v <- tvs ]
in ( ([_lhsIdataTy] `appArr` mkTyQu tyQu_Exists (mkk (fvU \\ fvD)) _dataConProdTy))) of
{ _dataQuUnConTy | _dataQuUnConTy `seq` (True) ->
(case (_gadtTyVarMp `varUpd` _dataConTy) of
{ _dataConGadtTy | _dataConGadtTy `seq` (True) ->
(case (assocTyLToVarMp [(_dataConTyVar,_dataConGadtTy),(_dataUnConTyVar,_dataQuUnConTy)] `varUpd` _lhsIpatTyVarMp) of
{ _lhsOpatTyVarMp | _lhsOpatTyVarMp `seq` (True) ->
(case (mkNewTyVar _lUniq_uncon) of
{ _dataUnConTyAsVar | _dataUnConTyAsVar `seq` (True) ->
(case (gamUnions
[ assocLToGam
[ (conNm_, ValGamInfo _dataConTyAsVar)
, (hsnUn conNm_, ValGamInfo _dataUnConTyAsVar)
]
, _lhsIpatValGam
]) of
{ _lhsOpatValGam | _lhsOpatValGam `seq` (True) ->
(case ((let sem_DataConstr_Constr_5 :: T_DataConstr_5
sem_DataConstr_Constr_5 =
(\ _lhsIchrEvidBindMp
_lhsIchrScopeBindMp
_lhsIchrStore
_lhsIclDfGam
_lhsIclGam
_lhsIfinKiVarMp
_lhsIfinTyVarMp
_lhsIisNewtype
_lhsIkiGam
_lhsIlexLev
_lhsImoduleNm
_lhsIopts
_lhsIpredScope
_lhsIrangeMp
_lhsIsysfEnv
_lhsItyKiGlobFreeTvarS
_lhsItyTyGlobFreeTvarS
_lhsItyTyTySigFreeTvarS
_lhsIvalGam
_lhsIvalTyGlobFreeTvarS ->
_lhsIchrEvidBindMp `seq`
(_lhsIchrScopeBindMp `seq`
(_lhsIchrStore `seq`
(_lhsIclDfGam `seq`
(_lhsIclGam `seq`
(_lhsIfinKiVarMp `seq`
(_lhsIfinTyVarMp `seq`
(_lhsIisNewtype `seq`
(_lhsIkiGam `seq`
(_lhsIlexLev `seq`
(_lhsImoduleNm `seq`
(_lhsIopts `seq`
(_lhsIpredScope `seq`
(_lhsIrangeMp `seq`
(_lhsIsysfEnv `seq`
(_lhsItyKiGlobFreeTvarS `seq`
(_lhsItyTyGlobFreeTvarS `seq`
(_lhsItyTyTySigFreeTvarS `seq`
(_lhsIvalGam `seq`
(_lhsIvalTyGlobFreeTvarS `seq`
((case (_lhsIvalTyGlobFreeTvarS) of
{ _mbGadtTyExprOvalTyGlobFreeTvarS | _mbGadtTyExprOvalTyGlobFreeTvarS `seq` (True) ->
(case (_lhsItyTyTySigFreeTvarS) of
{ _mbGadtTyExprOtyTyTySigFreeTvarS | _mbGadtTyExprOtyTyTySigFreeTvarS `seq` (True) ->
(case (_lhsItyTyGlobFreeTvarS) of
{ _mbGadtTyExprOtyTyGlobFreeTvarS | _mbGadtTyExprOtyTyGlobFreeTvarS `seq` (True) ->
(case (_lhsItyKiGlobFreeTvarS) of
{ _mbGadtTyExprOtyKiGlobFreeTvarS | _mbGadtTyExprOtyKiGlobFreeTvarS `seq` (True) ->
(case (_lhsIsysfEnv) of
{ _mbGadtTyExprOsysfEnv | _mbGadtTyExprOsysfEnv `seq` (True) ->
(case (_lhsIopts) of
{ _mbGadtTyExprOopts | _mbGadtTyExprOopts `seq` (True) ->
(case (_lhsImoduleNm) of
{ _mbGadtTyExprOmoduleNm | _mbGadtTyExprOmoduleNm `seq` (True) ->
(case (_lhsIkiGam) of
{ _mbGadtTyExprOkiGam | _mbGadtTyExprOkiGam `seq` (True) ->
(case (_lhsIfinTyVarMp) of
{ _mbGadtTyExprOfinTyVarMp | _mbGadtTyExprOfinTyVarMp `seq` (True) ->
(case (_lhsIfinTyKiGam) of
{ _mbGadtTyExprOfinTyKiGam | _mbGadtTyExprOfinTyKiGam `seq` (True) ->
(case (_lhsIfinKiVarMp) of
{ _mbGadtTyExprOfinKiVarMp | _mbGadtTyExprOfinKiVarMp `seq` (True) ->
(case (_lhsIclGam) of
{ _mbGadtTyExprOclGam | _mbGadtTyExprOclGam `seq` (True) ->
(case (mbGadtTyExpr_4 _mbGadtTyExprOclGam _mbGadtTyExprOfinKiVarMp _mbGadtTyExprOfinTyKiGam _mbGadtTyExprOfinTyVarMp _mbGadtTyExprOkiGam _mbGadtTyExprOmoduleNm _mbGadtTyExprOopts _mbGadtTyExprOsysfEnv _mbGadtTyExprOtyKiGlobFreeTvarS _mbGadtTyExprOtyTyGlobFreeTvarS _mbGadtTyExprOtyTyTySigFreeTvarS _mbGadtTyExprOvalTyGlobFreeTvarS) of
{ ( _mbGadtTyExprIallErrSq,_mbGadtTyExprIclMissNmS,_mbGadtTyExprIclNmS,_mbGadtTyExprIerrSq,_mbGadtTyExprIgathMentrelFilterMp,_mbGadtTyExprIpp,_mbGadtTyExprIppMb,_mbGadtTyExprItyGam,_mbGadtTyExprItyKiGam,_mbGadtTyExprItyVarWildMp) | True ->
(case (_lhsIvalTyGlobFreeTvarS) of
{ _fieldsOvalTyGlobFreeTvarS | _fieldsOvalTyGlobFreeTvarS `seq` (True) ->
(case (_lhsItyTyTySigFreeTvarS) of
{ _fieldsOtyTyTySigFreeTvarS | _fieldsOtyTyTySigFreeTvarS `seq` (True) ->
(case (_lhsItyTyGlobFreeTvarS) of
{ _fieldsOtyTyGlobFreeTvarS | _fieldsOtyTyGlobFreeTvarS `seq` (True) ->
(case (_lhsItyKiGlobFreeTvarS) of
{ _fieldsOtyKiGlobFreeTvarS | _fieldsOtyKiGlobFreeTvarS `seq` (True) ->
(case (_lhsItvKiVarMp) of
{ _fieldsOtvKiVarMp | _fieldsOtvKiVarMp `seq` (True) ->
(case (_lhsIsysfEnv) of
{ _fieldsOsysfEnv | _fieldsOsysfEnv `seq` (True) ->
(case (_lhsIrangeMp) of
{ _fieldsOrangeMp | _fieldsOrangeMp `seq` (True) ->
(case (_lhsIpredScope) of
{ _fieldsOpredScope | _fieldsOpredScope `seq` (True) ->
(case (_lhsIpatTyVarMp) of
{ _fieldsOpatTyVarMp | _fieldsOpatTyVarMp `seq` (True) ->
(case (_lhsIopts) of
{ _fieldsOopts | _fieldsOopts `seq` (True) ->
(case (_lhsImoduleNm) of
{ _fieldsOmoduleNm | _fieldsOmoduleNm `seq` (True) ->
(case (_lhsIlexLev) of
{ _fieldsOlexLev | _fieldsOlexLev `seq` (True) ->
(case (_lhsIkiGam) of
{ _fieldsOkiGam | _fieldsOkiGam `seq` (True) ->
(case (_lhsIfinTyVarMp) of
{ _fieldsOfinTyVarMp | _fieldsOfinTyVarMp `seq` (True) ->
(case (_lhsIfinTyKiGam) of
{ _fieldsOfinTyKiGam | _fieldsOfinTyKiGam `seq` (True) ->
(case (_lhsIfinKiVarMp) of
{ _fieldsOfinKiVarMp | _fieldsOfinKiVarMp `seq` (True) ->
(case (_lhsIclGam) of
{ _fieldsOclGam | _fieldsOclGam `seq` (True) ->
(case (_lhsIclDfGam) of
{ _fieldsOclDfGam | _fieldsOclDfGam `seq` (True) ->
(case (_lhsIchrStore) of
{ _fieldsOchrStore | _fieldsOchrStore `seq` (True) ->
(case (_lhsIchrScopeBindMp) of
{ _fieldsOchrScopeBindMp | _fieldsOchrScopeBindMp `seq` (True) ->
(case (_lhsIchrEvidBindMp) of
{ _fieldsOchrEvidBindMp | _fieldsOchrEvidBindMp `seq` (True) ->
(case (fields_5 _fieldsOchrEvidBindMp _fieldsOchrScopeBindMp _fieldsOchrStore _fieldsOclDfGam _fieldsOclGam _fieldsOfinKiVarMp _fieldsOfinTyKiGam _fieldsOfinTyVarMp _fieldsOkiGam _fieldsOlexLev _fieldsOmoduleNm _fieldsOopts _fieldsOpatTyVarMp _fieldsOpredScope _fieldsOrangeMp _fieldsOsysfEnv _fieldsOtvKiVarMp _fieldsOtyKiGlobFreeTvarS _fieldsOtyTyGlobFreeTvarS _fieldsOtyTyTySigFreeTvarS _fieldsOvalTyGlobFreeTvarS) of
{ ( _fieldsIallErrSq,_fieldsIerrSq,_fieldsIgathMentrelFilterMp,_fieldsIgathTvKiVarMp,_fieldsIpatTyVarMp,_fieldsIpp,_fieldsIppL) | True ->
(case (_fieldsIallErrSq `Seq.union` _mbGadtTyExprIallErrSq) of
{ _lhsOallErrSq | _lhsOallErrSq `seq` (True) ->
(case (let nms = assocLKeys $ gamToOnlyDups _fieldsIfldSelGam
in if null nms then [] else [rngLift _range Err_NamesDupIntrod "data field" (zip nms (repeat Nothing))]) of
{ _dupErrs | _dupErrs `seq` (True) ->
(case (pp conNm_
>#< (if null $ catMaybes $ assocLKeys $ _dataConGadtFldTyL
then ppSpaced _fieldsIppL
else ppCurlysCommas' _fieldsIppL
)
>|< maybe empty (\t -> " ->" >#< t) _mbGadtTyExprIppMb) of
{ _pp | _pp `seq` (True) ->
(case (rngLift _range mkNestErr' _pp [ _fieldsIerrSq
, _mbGadtTyExprIerrSq
, Seq.fromList _dupErrs
, foErrSq _fo_
, maybe Seq.empty foErrSq _mbGadtFO
]) of
{ _lhsOerrSq | _lhsOerrSq `seq` (True) ->
(case ([]) of
{ _lhsOffeCBindL | _lhsOffeCBindL `seq` (True) ->
(case ([]) of
{ _lhsOffiCBindL | _lhsOffiCBindL `seq` (True) ->
(case (_fieldsIgathMentrelFilterMp `mentrelFilterMpUnion` _mbGadtTyExprIgathMentrelFilterMp) of
{ _lhsOgathMentrelFilterMp | _lhsOgathMentrelFilterMp `seq` (True) ->
(case (_fieldsIgathTvKiVarMp) of
{ _lhsOgathTvKiVarMp | _lhsOgathTvKiVarMp `seq` (True) ->
(case (_pp) of
{ _lhsOpp | _lhsOpp `seq` (True) ->
(case ([]) of
{ _lhsOtyCBindL | _lhsOtyCBindL `seq` (True) ->
(case ([]) of
{ _lhsOvalCBindL | _lhsOvalCBindL `seq` (True) ->
( _lhsOallErrSq,_lhsOerrSq,_lhsOffeCBindL,_lhsOffiCBindL,_lhsOgathMentrelFilterMp,_lhsOgathTvKiVarMp,_lhsOpp,_lhsOtyCBindL,_lhsOvalCBindL) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))))))))))))))))))))))
in sem_DataConstr_Constr_5)) of
{ ( sem_DataConstr_5) | True ->
( _lhsOfldSelGam,_lhsOfldUpdGam,_lhsOgathCnstrMp,_lhsOgathRangeMp,_lhsOpatTyVarMp,_lhsOpatValGam,sem_DataConstr_5) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))))))
in sem_DataConstr_Constr_4)) of
{ ( sem_DataConstr_4) | True ->
( _lhsOdataAltForNewType,_lhsOdataConstrNmL,_lhsOdataConstrTagMp,_lhsOintlTyKiGam,_lhsOkiVarMp,sem_DataConstr_4) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) })))))))
in sem_DataConstr_Constr_3)) of
{ ( sem_DataConstr_3) | True ->
( _lhsOdataAltTyL,_lhsOgathMaxArity,_lhsOpolVarMp,sem_DataConstr_3) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) })))))))
in sem_DataConstr_Constr_2)) of
{ ( sem_DataConstr_2) | True ->
( _lhsOgUniq,sem_DataConstr_2) }) }) }) }) }) }) })))
in sem_DataConstr_Constr_1)) of
{ ( sem_DataConstr_1) | True ->
( _lhsOrange,sem_DataConstr_1) }) }) }) }) })