packages feed

uhc-light-1.1.7.0: src/UHC/Light/Compiler/EH/MainAG_AGItf.hs



module UHC.Light.Compiler.EH.MainAG_AGItf 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.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

-- AGItf -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         chrStore             : ScopedPredStore
         clDfGam              : ClassDefaultGam
         clGam                : ClGam
         dataGam              : DataGam
         idQualGam            : IdQualGam
         isMainMod            : Bool
         kiGam                : KiGam
         moduleNm             : HsName
         opts                 : EHCOpts
         polGam               : PolGam
         tyGam                : TyGam
         tyKiGam              : TyKiGam
         valGam               : ValGam
      chained attribute:
         gUniq                : UID
      synthesized attributes:
         allErrSq             : ErrSq
         cmodule              : CModule
         gathChrStore         : ScopedPredStore
         gathClDfGam          : ClassDefaultGam
         gathClGam            : ClGam
         gathDataGam          : DataGam
         gathHiddenExports    : Seq.Seq (HsName,IdOccKind)
         gathKiGam            : KiGam
         gathLamMp            : LamMp
         gathMentrelFilterMp  : ModEntRelFilterMp
         gathPolGam           : PolGam
         gathTyGam            : TyGam
         gathTyKiGam          : TyKiGam
         gathValGam           : ValGam
         mbOrphan             : Maybe (Set.Set HsName)
         pp                   : PP_Doc
         topTyPP              : PP_Doc
   alternatives:
      alternative AGItf:
         child expr           : Expr 
         visit 0:
            local valGam      : _
            local tyKiGam     : _
            local tyGam       : _
            local clGam       : _
            local sysfEnv     : _
            local predScope   : {PredScope}
            local predSameScopeCounter : {Int}
            local polGam      : _
            local lexLev      : {Int}
            local _tup8       : _
            local kiGam       : _
            local kiVarMp     : _
            local clDfGam     : _
            local lUniq       : {UID}
            local chrFIIn     : {FIIn}
            local _tup4       : _
            local instsOuter  : _
            local initChrStore : _
            local _tup5       : _
            local chrStoreOuterScope : _
            local instsInner  : _
            local _tup6       : _
            local chrStore    : _
            local rangeMp     : _
            local finValGam   : {ValGam}
            local lUniq_9_simplify : {UID}
            local toProveCnstrMp : _
            local toProveHereCnstrMp : _
            local chrProveFIIn : {FIIn}
            local _tup1       : _
            local chrSolveSimpTyVarMp : _
            local finTyVarMp  : _
            local lUniq_98_fitsIn_ty : {UID}
            local lUniq_98_IO_tvar : {UID}
            local chrSolveMainScopeBindMp : _
            local _tup3       : _
            local chrScopeBindMp : _
            local chrSolveMainEvidBindMp : _
            local chrEvidBindMp : _
            local cSubst      : _
            local fe          : {FIEnv}
            local _tup7       : _
            local nmErrs      : {ErrL}
            local foMain      : _
            local chrSolveMainRemCnstrMp : _
            local cannotProveCnstrMp : _
            local predNotPrfErrs : _
            local chrSolveMainErrs : _
            local lErrSq      : _
            local chrScopeMainBindL : _
            local extraCBindL : _
            local mainDefExists : _
            local insertMainDef : _
            local mainUseExists : _
            local insertMainUse : _
            local gathChrStore : _
            local chrSimplifyResult : _
            local gathMentrelFilterMp : _
            local errTopPP    : _
            local extraPP     : _
-}
sem_AGItf_AGItf :: T_Expr ->
                   T_AGItf

sem_AGItf_AGItf expr_ | expr_ `seq` (True) =
    (\ _lhsIchrStore
       _lhsIclDfGam
       _lhsIclGam
       _lhsIdataGam
       _lhsIgUniq
       _lhsIidQualGam
       _lhsIisMainMod
       _lhsIkiGam
       _lhsImoduleNm
       _lhsIopts
       _lhsIpolGam
       _lhsItyGam
       _lhsItyKiGam
       _lhsIvalGam ->
         _lhsIchrStore `seq`
         (_lhsIclDfGam `seq`
          (_lhsIclGam `seq`
           (_lhsIdataGam `seq`
            (_lhsIgUniq `seq`
             (_lhsIidQualGam `seq`
              (_lhsIisMainMod `seq`
               (_lhsIkiGam `seq`
                (_lhsImoduleNm `seq`
                 (_lhsIopts `seq`
                  (_lhsIpolGam `seq`
                   (_lhsItyGam `seq`
                    (_lhsItyKiGam `seq`
                     (_lhsIvalGam `seq`
                      ((case (_lhsIvalGam) of
                        { _valGam | _valGam `seq` (True) ->
                        (case (_valGam) of
                         { _exprOvalGam | _exprOvalGam `seq` (True) ->
                         (case (_lhsItyKiGam) of
                          { _tyKiGam | _tyKiGam `seq` (True) ->
                          (case (_tyKiGam) of
                           { _exprOtyKiGam | _exprOtyKiGam `seq` (True) ->
                           (case (_lhsItyGam) of
                            { _tyGam | _tyGam `seq` (True) ->
                            (case (_tyGam) of
                             { _exprOtyGam | _exprOtyGam `seq` (True) ->
                             (case (_lhsIclGam) of
                              { _clGam | _clGam `seq` (True) ->
                              (case (emptyToSysfEnv
                                         { sysfenvTyKiGam    = _tyKiGam
                                         , sysfenvClGam      = _clGam
                                         }) of
                               { _sysfEnv | _sysfEnv `seq` (True) ->
                               (case (_sysfEnv) of
                                { _exprOsysfEnv | _exprOsysfEnv `seq` (True) ->
                                (case (initPredScope) of
                                 { _predScope | _predScope `seq` (True) ->
                                 (case (_predScope) of
                                  { _exprOpredScope | _exprOpredScope `seq` (True) ->
                                  (case (0) of
                                   { _predSameScopeCounter | _predSameScopeCounter `seq` (True) ->
                                   (case (_predSameScopeCounter) of
                                    { _exprOpredSameScopeCounter | _exprOpredSameScopeCounter `seq` (True) ->
                                    (case (_lhsIpolGam) of
                                     { _polGam | _polGam `seq` (True) ->
                                     (case (_polGam) of
                                      { _exprOpolGam | _exprOpolGam `seq` (True) ->
                                      (case (-1) of
                                       { _lexLev | _lexLev `seq` (True) ->
                                       (case (_lexLev) of
                                        { _exprOlexLev | _exprOlexLev `seq` (True) ->
                                        (case (let __cont = _lhsIgUniq in seq __cont ( case nextUnique __cont of { (__cont, lUniq) -> case nextUnique __cont of { (__cont, lUniq_98_IO_tvar) -> case nextUnique __cont of { (__cont, lUniq_98_fitsIn_ty) -> case nextUnique __cont of { (__cont, lUniq_9_simplify) -> (__cont,lUniq,lUniq_98_IO_tvar,lUniq_98_fitsIn_ty,lUniq_9_simplify)}}}} )) of
                                         { __tup8 | __tup8 `seq` (True) ->
                                         (case (expr_) of
                                          { ( _exprIrange,expr_1) | True ->
                                              (case (__tup8) of
                                               { (_exprOgUniq,_,_,_,_) | _exprOgUniq `seq` (True) ->
                                               (case (_lhsIkiGam) of
                                                { _kiGam | _kiGam `seq` (True) ->
                                                (case (expr_1 _exprOgUniq) of
                                                 { ( _exprIgUniq,_exprIhasInstDecl,expr_2) | True ->
                                                     (case (_kiGam) of
                                                      { _exprOkiGam | _exprOkiGam `seq` (True) ->
                                                      (case (True) of
                                                       { _exprOisFirstLet | _exprOisFirstLet `seq` (True) ->
                                                       (case (expr_2 _exprOisFirstLet _exprOkiGam _exprOlexLev _exprOpredSameScopeCounter) of
                                                        { ( _exprIpredSameScopeCounter,expr_3) | True ->
                                                            (case (_lhsIopts) of
                                                             { _exprOopts | _exprOopts `seq` (True) ->
                                                             (case (emptyVarMp) of
                                                              { _kiVarMp | _kiVarMp `seq` (True) ->
                                                              (case (_kiVarMp) of
                                                               { _exprOkiVarMp | _exprOkiVarMp `seq` (True) ->
                                                               (case (_clGam) of
                                                                { _exprOclGam | _exprOclGam `seq` (True) ->
                                                                (case (Set.empty) of
                                                                 { _exprOtyKiGlobFreeTvarS | _exprOtyKiGlobFreeTvarS `seq` (True) ->
                                                                 (case (emptyVarMp) of
                                                                  { _exprOpolVarMp | _exprOpolVarMp `seq` (True) ->
                                                                  (case (expr_3 _exprOkiVarMp _exprOopts _exprOpolGam _exprOpolVarMp _exprOpredScope _exprOtyGam _exprOtyKiGam _exprOtyKiGlobFreeTvarS) of
                                                                   { ( _exprIkiVarMp,_exprIpolVarMp,expr_4) | True ->
                                                                       (case (emptyGam) of
                                                                        { _exprOfinTyKiGam | _exprOfinTyKiGam `seq` (True) ->
                                                                        (case (_exprIkiVarMp) of
                                                                         { _exprOfinKiVarMp | _exprOfinKiVarMp `seq` (True) ->
                                                                         (case (Set.empty) of
                                                                          { _exprOtyTyTySigFreeTvarS | _exprOtyTyTySigFreeTvarS `seq` (True) ->
                                                                          (case (emptyGam) of
                                                                           { _exprOgathDataGam | _exprOgathDataGam `seq` (True) ->
                                                                           (case (expr_4 _exprOclGam _exprOfinKiVarMp _exprOfinTyKiGam _exprOgathDataGam _exprOtyTyTySigFreeTvarS) of
                                                                            { ( _exprIgathDataGam,expr_5) | True ->
                                                                                (case (_exprIgathDataGam `gamUnion` _lhsIdataGam) of
                                                                                 { _exprOdataGam | _exprOdataGam `seq` (True) ->
                                                                                 (case (expr_5 _exprOdataGam) of
                                                                                  { ( _exprIchrClassDeclSq,_exprIchrFIIn,_exprIchrInstDeclSq,_exprIgathClDfGam,expr_6) | True ->
                                                                                      (case (_exprIgathClDfGam `gamUnion` _lhsIclDfGam) of
                                                                                       { _clDfGam | _clDfGam `seq` (True) ->
                                                                                       (case (_clDfGam) of
                                                                                        { _exprOclDfGam | _exprOclDfGam `seq` (True) ->
                                                                                        (case (__tup8) of
                                                                                         { (_,_lUniq,_,_,_) | _lUniq `seq` (True) ->
                                                                                         (case (_exprIchrFIIn {fiUniq = _lUniq}) of
                                                                                          { _chrFIIn | _chrFIIn `seq` (True) ->
                                                                                          (case (partition (\(_,_,_,sc) -> sc == initPredScope) $ Seq.toList _exprIchrInstDeclSq) of
                                                                                           { __tup4 | __tup4 `seq` (True) ->
                                                                                           (case (__tup4) of
                                                                                            { (_instsOuter,_) | _instsOuter `seq` (True) ->
                                                                                            (case (_lhsIchrStore) of
                                                                                             { _initChrStore | _initChrStore `seq` (True) ->
                                                                                             (case (mkScopedCHR2 _chrFIIn (Seq.toList _exprIchrClassDeclSq) _instsOuter _initChrStore) of
                                                                                              { __tup5 | __tup5 `seq` (True) ->
                                                                                              (case (__tup5) of
                                                                                               { (_chrStoreOuterScope,_) | _chrStoreOuterScope `seq` (True) ->
                                                                                               (case (__tup4) of
                                                                                                { (_,_instsInner) | _instsInner `seq` (True) ->
                                                                                                (case (mkScopedCHR2 _chrFIIn [] _instsInner _chrStoreOuterScope) of
                                                                                                 { __tup6 | __tup6 `seq` (True) ->
                                                                                                 (case (__tup6) of
                                                                                                  { (_chrStore,_) | _chrStore `seq` (True) ->
                                                                                                  (case (_chrStore) of
                                                                                                   { _exprOchrStore | _exprOchrStore `seq` (True) ->
                                                                                                   (case (emptyVarMp) of
                                                                                                    { _exprOtyVarMp | _exprOtyVarMp `seq` (True) ->
                                                                                                    (case (Ty_Any) of
                                                                                                     { _exprOknTy | _exprOknTy `seq` (True) ->
                                                                                                     (case (strongFIOpts) of
                                                                                                      { _exprOfiOpts | _exprOfiOpts `seq` (True) ->
                                                                                                      (case (_exprIkiVarMp) of
                                                                                                       { _exprOtvKiVarMp | _exprOtvKiVarMp `seq` (True) ->
                                                                                                       (case (Set.empty) of
                                                                                                        { _exprOtyTyGlobFreeTvarS | _exprOtyTyGlobFreeTvarS `seq` (True) ->
                                                                                                        (case (Set.empty) of
                                                                                                         { _exprOvalTyGlobFreeTvarS | _exprOvalTyGlobFreeTvarS `seq` (True) ->
                                                                                                         (case (expr_6 _exprOchrStore _exprOclDfGam _exprOfiOpts _exprOknTy _exprOtvKiVarMp _exprOtyTyGlobFreeTvarS _exprOtyVarMp _exprOvalGam _exprOvalTyGlobFreeTvarS) of
                                                                                                          { ( _exprIgathCnstrMp,_exprIgathRangeMp,_exprIgathValGam,_exprInoLetQuantTyVarIdS,_exprIty,_exprItyVarMp,expr_7) | True ->
                                                                                                              (case (Map.unionsWith (++)
                                                                                                                     $ map (\(c,r) -> Map.singleton (_exprItyVarMp `varUpd` c) r)
                                                                                                                     $ Map.toList
                                                                                                                     $ _exprIgathRangeMp
                                                                                                                       `Map.union` cnstrMpToRangeMp _exprIgathCnstrMp) of
                                                                                                               { _rangeMp | _rangeMp `seq` (True) ->
                                                                                                               (case (_rangeMp) of
                                                                                                                { _exprOrangeMp | _exprOrangeMp `seq` (True) ->
                                                                                                                (case (_exprIgathValGam `gamUnion` _lhsIvalGam) of
                                                                                                                 { _finValGam | _finValGam `seq` (True) ->
                                                                                                                 (case (_finValGam) of
                                                                                                                  { _exprOfinValGam | _exprOfinValGam `seq` (True) ->
                                                                                                                  (case (__tup8) of
                                                                                                                   { (_,_,_,_,_lUniq_9_simplify) | _lUniq_9_simplify `seq` (True) ->
                                                                                                                   (case (_exprItyVarMp `varUpd` _exprIgathCnstrMp) of
                                                                                                                    { _toProveCnstrMp | _toProveCnstrMp `seq` (True) ->
                                                                                                                    (case (_toProveCnstrMp) of
                                                                                                                     { _toProveHereCnstrMp | _toProveHereCnstrMp `seq` (True) ->
                                                                                                                     (case (_chrFIIn {fiVarMp = _exprItyVarMp}) of
                                                                                                                      { _chrProveFIIn | _chrProveFIIn `seq` (True) ->
                                                                                                                      (case (ehcOptTrace _lhsIopts "AGItf.simplify" $
                                                                                                                             simplify [SimplifyHow_Canonicalize] (_chrProveFIIn {fiUniq = _lUniq_9_simplify}) _chrStore _clDfGam (heurScopedEHC _chrProveFIIn) (\x -> (x,[])) Map.empty _toProveHereCnstrMp emptySimplifyResult) of
                                                                                                                       { __tup1 | __tup1 `seq` (True) ->
                                                                                                                       (case (__tup1) of
                                                                                                                        { (_,_,_,_chrSolveSimpTyVarMp,_,_,_,_,_,_) | _chrSolveSimpTyVarMp `seq` (True) ->
                                                                                                                        (case (_chrSolveSimpTyVarMp `varUpd`
                                                                                                                               _exprItyVarMp) of
                                                                                                                         { _finTyVarMp | _finTyVarMp `seq` (True) ->
                                                                                                                         (case (_finTyVarMp) of
                                                                                                                          { _exprOfinTyVarMp | _exprOfinTyVarMp `seq` (True) ->
                                                                                                                          (case (__tup8) of
                                                                                                                           { (_,_,_,_lUniq_98_fitsIn_ty,_) | _lUniq_98_fitsIn_ty `seq` (True) ->
                                                                                                                           (case (__tup8) of
                                                                                                                            { (_,_,_lUniq_98_IO_tvar,_,_) | _lUniq_98_IO_tvar `seq` (True) ->
                                                                                                                            (case (_lhsImoduleNm) of
                                                                                                                             { _exprOmoduleNm | _exprOmoduleNm `seq` (True) ->
                                                                                                                             (case (__tup1) of
                                                                                                                              { (_,_,_,_,_,_,_,_,_chrSolveMainScopeBindMp,_) | _chrSolveMainScopeBindMp `seq` (True) ->
                                                                                                                              (case (mkScopeBindings True _predScope _chrSolveMainScopeBindMp) of
                                                                                                                               { __tup3 | __tup3 `seq` (True) ->
                                                                                                                               (case (__tup3) of
                                                                                                                                { (_,_chrScopeBindMp) | _chrScopeBindMp `seq` (True) ->
                                                                                                                                (case (_chrScopeBindMp) of
                                                                                                                                 { _exprOchrScopeBindMp | _exprOchrScopeBindMp `seq` (True) ->
                                                                                                                                 (case (__tup1) of
                                                                                                                                  { (_,_,_,_,_,_,_,_chrSolveMainEvidBindMp,_,_) | _chrSolveMainEvidBindMp `seq` (True) ->
                                                                                                                                  (case (_chrSolveMainEvidBindMp) of
                                                                                                                                   { _chrEvidBindMp | _chrEvidBindMp `seq` (True) ->
                                                                                                                                   (case (_chrEvidBindMp) of
                                                                                                                                    { _exprOchrEvidBindMp | _exprOchrEvidBindMp `seq` (True) ->
                                                                                                                                    (case (emptyCSubst) of
                                                                                                                                     { _cSubst | _cSubst `seq` (True) ->
                                                                                                                                     (case (_cSubst) of
                                                                                                                                      { _exprOcSubst | _exprOcSubst `seq` (True) ->
                                                                                                                                      (case (ExprCtxt_Top) of
                                                                                                                                       { _exprOexprCtxt | _exprOexprCtxt `seq` (True) ->
                                                                                                                                       (case (expr_7 _exprOcSubst _exprOchrEvidBindMp _exprOchrScopeBindMp _exprOexprCtxt _exprOfinTyVarMp _exprOfinValGam _exprOmoduleNm _exprOrangeMp _exprOsysfEnv) of
                                                                                                                                        { ( _exprIallErrSq,_exprIappArgCoeL,_exprIappArgPPL,_exprIappFunCExpr,_exprIappFunNm,_exprIappFunPP,_exprIbackCBindL,_exprIcSubst,_exprIcaseFailS,_exprIcexpr,_exprIerrSq,_exprIfrontCBindL,_exprIfuCExprL,_exprIgathClGam,_exprIgathHiddenExports,_exprIgathKiGam,_exprIgathLamMp,_exprIgathMentrelFilterMp,_exprIgathPolGam,_exprIgathTvKiVarMp,_exprIgathTyGam,_exprIgathTyKiGam,_exprIisNewtype,_exprIlamArgPPL,_exprIlamBodyPP,_exprIletCBody,_exprIletTyCBindL,_exprIletValCBindL,_exprIorphanS,_exprIpp) | True ->
                                                                                                                                            (case (defaultFIEnv
                                                                                                                                                       { feEHCOpts = _lhsIopts
                                                                                                                                                       , fePredScope = _predScope
                                                                                                                                                       , feTyGam = _exprIgathTyGam
                                                                                                                                                       , fePolGam = _exprIgathPolGam
                                                                                                                                                       , feRange = emptyRange
                                                                                                                                                       }) of
                                                                                                                                             { _fe | _fe `seq` (True) ->
                                                                                                                                             (case (if _lhsIisMainMod
                                                                                                                                                    then let (t,e) = valGamLookupTy hsnMain _exprIgathValGam
                                                                                                                                                         in  (fitsIn strongFIOpts _fe _lUniq_98_fitsIn_ty _exprItyVarMp t (tyTopLevelMain _lhsIopts _lUniq_98_IO_tvar), e)
                                                                                                                                                    else (emptyFO,[])) of
                                                                                                                                              { __tup7 | __tup7 `seq` (True) ->
                                                                                                                                              (case (__tup7) of
                                                                                                                                               { (_,_nmErrs) | _nmErrs `seq` (True) ->
                                                                                                                                               (case (__tup7) of
                                                                                                                                                { (_foMain,_) | _foMain `seq` (True) ->
                                                                                                                                                (case (__tup1) of
                                                                                                                                                 { (_,_chrSolveMainRemCnstrMp,_,_,_,_,_,_,_,_) | _chrSolveMainRemCnstrMp `seq` (True) ->
                                                                                                                                                 (case (_chrSolveMainRemCnstrMp) of
                                                                                                                                                  { _cannotProveCnstrMp | _cannotProveCnstrMp `seq` (True) ->
                                                                                                                                                  (case (mkPrvErr _rangeMp emptyRange _cannotProveCnstrMp) of
                                                                                                                                                   { _predNotPrfErrs | _predNotPrfErrs `seq` (True) ->
                                                                                                                                                   (case (__tup1) of
                                                                                                                                                    { (_,_,_,_,_chrSolveMainErrs,_,_,_,_,_) | _chrSolveMainErrs `seq` (True) ->
                                                                                                                                                    (case (Seq.unions [ Seq.fromList _predNotPrfErrs
                                                                                                                                                                      , Seq.fromList _chrSolveMainErrs
                                                                                                                                                                      , Seq.fromList _nmErrs
                                                                                                                                                                      , foErrSq _foMain
                                                                                                                                                                      ]) of
                                                                                                                                                     { _lErrSq | _lErrSq `seq` (True) ->
                                                                                                                                                     (case (Seq.unions [_lErrSq, _exprIallErrSq]) of
                                                                                                                                                      { _lhsOallErrSq | _lhsOallErrSq `seq` (True) ->
                                                                                                                                                      (case (__tup3) of
                                                                                                                                                       { (_chrScopeMainBindL,_) | _chrScopeMainBindL `seq` (True) ->
                                                                                                                                                       (case ([(CBindCateg_Rec,_chrScopeMainBindL)]) of
                                                                                                                                                        { _extraCBindL | _extraCBindL `seq` (True) ->
                                                                                                                                                        (case (let ds = [ b | (_,g) <- _exprIletValCBindL, b <- g, cbindNm b == hsnMain ]
                                                                                                                                                               in  not (null ds)) of
                                                                                                                                                         { _mainDefExists | _mainDefExists `seq` (True) ->
                                                                                                                                                         (case (not _mainDefExists && _lhsIisMainMod) of
                                                                                                                                                          { _insertMainDef | _insertMainDef `seq` (True) ->
                                                                                                                                                          (case (case acoreExprMbVar _exprIletCBody of
                                                                                                                                                                   Just n | n == hsnMain -> True
                                                                                                                                                                   _                     -> False) of
                                                                                                                                                           { _mainUseExists | _mainUseExists `seq` (True) ->
                                                                                                                                                           (case (not _mainUseExists && _lhsIisMainMod) of
                                                                                                                                                            { _insertMainUse | _insertMainUse `seq` (True) ->
                                                                                                                                                            (case (let b = if _insertMainUse then acoreVar hsnMain else _exprIletCBody
                                                                                                                                                                       d = if _insertMainDef then acoreLet CBindCateg_Plain [acoreBind1Ty hsnMain (acoreTyErr $ "EH.ToCore.AGItf.main") _exprIletCBody] else id
                                                                                                                                                                   in  CModule_Mod _lhsImoduleNm
                                                                                                                                                                           []
                                                                                                                                                                           [ CDeclMeta_Data tn
                                                                                                                                                                               [ CDataCon_Con cn (ctagTag ctag) (ctagArity ctag)
                                                                                                                                                                               | (cn,dti) <- Map.toList $ dgiConstrTagMp dgi
                                                                                                                                                                               , let ctag = dtiCTag dti
                                                                                                                                                                               ]
                                                                                                                                                                           | (tn,dgi) <- gamToAssocL _exprIgathDataGam
                                                                                                                                                                           , not (dgiIsNewtype dgi)
                                                                                                                                                                           ]
                                                                                                                                                                           (
                                                                                                                                                                              cSubstAppExpr True _exprIcSubst
                                                                                                                                                                              (foldr (\(c,b) e -> acoreLet c b e)
                                                                                                                                                                                (d b)
                                                                                                                                                                                (_exprIletTyCBindL ++ _extraCBindL ++ _exprIfrontCBindL ++ _exprIletValCBindL
                                                                                                                                                                                ++ _exprIbackCBindL
                                                                                                                                                                                )
                                                                                                                                                                              )
                                                                                                                                                                              Nothing
                                                                                                                                                                           )) of
                                                                                                                                                             { _lhsOcmodule | _lhsOcmodule `seq` (True) ->
                                                                                                                                                             (case (_exprIgUniq) of
                                                                                                                                                              { _lhsOgUniq | _lhsOgUniq `seq` (True) ->
                                                                                                                                                              (case (__tup5) of
                                                                                                                                                               { (_,_gathChrStore) | _gathChrStore `seq` (True) ->
                                                                                                                                                               (case (_gathChrStore) of
                                                                                                                                                                { _lhsOgathChrStore | _lhsOgathChrStore `seq` (True) ->
                                                                                                                                                                (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathClDfGam" _exprIgathClDfGam) of
                                                                                                                                                                 { _lhsOgathClDfGam | _lhsOgathClDfGam `seq` (True) ->
                                                                                                                                                                 (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathClGam" _exprIgathClGam) of
                                                                                                                                                                  { _lhsOgathClGam | _lhsOgathClGam `seq` (True) ->
                                                                                                                                                                  (case (_exprIgathDataGam) of
                                                                                                                                                                   { _lhsOgathDataGam | _lhsOgathDataGam `seq` (True) ->
                                                                                                                                                                   (case (_exprIgathHiddenExports) of
                                                                                                                                                                    { _lhsOgathHiddenExports | _lhsOgathHiddenExports `seq` (True) ->
                                                                                                                                                                    (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathKiGam" _exprIgathKiGam) of
                                                                                                                                                                     { _lhsOgathKiGam | _lhsOgathKiGam `seq` (True) ->
                                                                                                                                                                     (case (_exprIgathLamMp) of
                                                                                                                                                                      { _lhsOgathLamMp | _lhsOgathLamMp `seq` (True) ->
                                                                                                                                                                      (case (__tup1) of
                                                                                                                                                                       { (_,_,_,_,_,_chrSimplifyResult,_,_,_,_) | _chrSimplifyResult `seq` (True) ->
                                                                                                                                                                       (case (mentrelFilterMpUnions
                                                                                                                                                                                [ _exprIgathMentrelFilterMp
                                                                                                                                                                                , gathMentrelFilterMpFromSimplifyResult _lhsImoduleNm _chrSimplifyResult
                                                                                                                                                                                ]) of
                                                                                                                                                                        { _gathMentrelFilterMp | _gathMentrelFilterMp `seq` (True) ->
                                                                                                                                                                        (case (_gathMentrelFilterMp) of
                                                                                                                                                                         { _lhsOgathMentrelFilterMp | _lhsOgathMentrelFilterMp `seq` (True) ->
                                                                                                                                                                         (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathPolGam" _exprIgathPolGam) of
                                                                                                                                                                          { _lhsOgathPolGam | _lhsOgathPolGam `seq` (True) ->
                                                                                                                                                                          (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathTyGam" _exprIgathTyGam) of
                                                                                                                                                                           { _lhsOgathTyGam | _lhsOgathTyGam `seq` (True) ->
                                                                                                                                                                           (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathTyKiGam" _exprIgathTyKiGam) of
                                                                                                                                                                            { _lhsOgathTyKiGam | _lhsOgathTyKiGam `seq` (True) ->
                                                                                                                                                                            (case (ehcOptTrace _lhsIopts "AGItf.lhs.gathValGam" $ _finTyVarMp `varUpd` _exprIgathValGam) of
                                                                                                                                                                             { _lhsOgathValGam | _lhsOgathValGam `seq` (True) ->
                                                                                                                                                                             (case (if Set.null _exprIorphanS then Nothing else Just _exprIorphanS) of
                                                                                                                                                                              { _lhsOmbOrphan | _lhsOmbOrphan `seq` (True) ->
                                                                                                                                                                              (case (ppErrsSq _lErrSq) of
                                                                                                                                                                               { _errTopPP | _errTopPP `seq` (True) ->
                                                                                                                                                                               (case (empty) of
                                                                                                                                                                                { _extraPP | _extraPP `seq` (True) ->
                                                                                                                                                                                (case (_extraPP >-< _exprIpp
                                                                                                                                                                                       >-< _errTopPP) of
                                                                                                                                                                                 { _lhsOpp | _lhsOpp `seq` (True) ->
                                                                                                                                                                                 (case (ppTy (tyQuantifyClosed _exprIty)) of
                                                                                                                                                                                  { _lhsOtopTyPP | _lhsOtopTyPP `seq` (True) ->
                                                                                                                                                                                  ( _lhsOallErrSq,_lhsOcmodule,_lhsOgUniq,_lhsOgathChrStore,_lhsOgathClDfGam,_lhsOgathClGam,_lhsOgathDataGam,_lhsOgathHiddenExports,_lhsOgathKiGam,_lhsOgathLamMp,_lhsOgathMentrelFilterMp,_lhsOgathPolGam,_lhsOgathTyGam,_lhsOgathTyKiGam,_lhsOgathValGam,_lhsOmbOrphan,_lhsOpp,_lhsOtopTyPP) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }) }))))))))))))))))