module UHC.Light.Compiler.Error(Err (..), ErrL
, ThingAndRange
, ErrSq
, mkThingAnd1Range
, module UHC.Light.Compiler.Base.Target
, errLIsFatal
, errIsFatal
, mkNestErr, mkNestErr'
, mkErr_NamesNotIntrod, mkErr_NamesNotIntrod') where
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Ty
import UHC.Util.Pretty
import qualified UHC.Util.FastSeq as Seq
import Control.Monad.Error.Class
import UHC.Light.Compiler.Base.Target (FFIWay)
import UHC.Util.FPath
type ThingAndRange x = (x,Maybe [(Range,Maybe PP_Doc)])
type ErrSq = Seq.FastSeq Err
instance Error Err where
strMsg m = rngLift emptyRange Err_Str m
errIsFatal :: Err -> Bool
errIsFatal (Err_MissingDataFields _ _ _ ) = False
errIsFatal (Err_TyCoreMatchClash _ _ _ _ _ ) = False
errIsFatal _ = True
errLIsFatal :: [Err] -> Bool
errLIsFatal es = not (null es) && any errIsFatal es
mkNestErr' :: Range -> PP_Doc -> [ErrSq] -> ErrSq
mkNestErr' r wher errs = Seq.fromList $ mkNestErr r wher $ Seq.toList $ Seq.unions errs
mkNestErr :: Range -> PP_Doc -> ErrL -> ErrL
mkNestErr r wher errL | null ( errL) = []
| otherwise = [Err_NestedIn r wher errL]
mkThingAnd1Range :: Range -> x -> ThingAndRange x
mkThingAnd1Range r x = (x,Just [(r,Nothing)])
mkErr_NamesNotIntrod' :: PP n => Range -> String -> [ThingAndRange n] -> Err
mkErr_NamesNotIntrod' r m ns = Err_NamesNotIntrod r m (assocLMapKey pp ns)
mkErr_NamesNotIntrod :: Range -> String -> [HsName] -> Err
mkErr_NamesNotIntrod r m ns = mkErr_NamesNotIntrod' r m (zip (map pp ns) (repeat Nothing))
data Err = Err_PP {range_Err_PP :: !(Range),pp_Err_PP :: !(PP_Doc)}
| Err_Str {range_Err_Str :: !(Range),str_Err_Str :: !(String)}
| Err_UnifyClash {range_Err_UnifyClash :: !(Range),ty1_Err_UnifyClash :: !(Ty),ty2_Err_UnifyClash :: !(Ty),fiMode_Err_UnifyClash :: !(FIMode),ty1detail_Err_UnifyClash :: !(Ty),ty2detail_Err_UnifyClash :: !(Ty),fiModeD_Err_UnifyClash :: !(FIMode)}
| Err_NamesNotIntrod {range_Err_NamesNotIntrod :: !(Range),kind_Err_NamesNotIntrod :: !(String),nmL_Err_NamesNotIntrod :: !(([ThingAndRange PP_Doc]))}
| Err_PatArity {range_Err_PatArity :: !(Range),ty_Err_PatArity :: !(Ty),arity_Err_PatArity :: !(Int)}
| Err_PatArity2 {range_Err_PatArity2 :: !(Range),kind_Err_PatArity2 :: !(String),what_Err_PatArity2 :: !(PP_Doc),arity_Err_PatArity2 :: !(Int)}
| Err_NamesDupIntrod {range_Err_NamesDupIntrod :: !(Range),kind_Err_NamesDupIntrod :: !(String),nmL_Err_NamesDupIntrod :: !(([ThingAndRange HsName]))}
| Err_NestedIn {range_Err_NestedIn :: !(Range),wher_Err_NestedIn :: !(PP_Doc),errL_Err_NestedIn :: !(ErrL)}
| Err_Fixity {range_Err_Fixity :: !(Range),op1_Err_Fixity :: !(PP_Doc),op2_Err_Fixity :: !(PP_Doc)}
| Err_UnifyOccurs {range_Err_UnifyOccurs :: !(Range),ty1_Err_UnifyOccurs :: !(Ty),ty2_Err_UnifyOccurs :: !(Ty),fiMode_Err_UnifyOccurs :: !(FIMode),tvar_Err_UnifyOccurs :: !(TyVarId),ty2detail_Err_UnifyOccurs :: !(Ty),fiModeD_Err_UnifyOccurs :: !(FIMode)}
| Err_OccurCycle {range_Err_OccurCycle :: !(Range),tvar_Err_OccurCycle :: !(TyVarId),ty_Err_OccurCycle :: !(Ty)}
| Err_Newtype {range_Err_Newtype :: !(Range),tyNm_Err_Newtype :: !(HsName)}
| Err_FunPatternLengths {range_Err_FunPatternLengths :: !(Range),funNm_Err_FunPatternLengths :: !(HsName)}
| Err_MissingRowLabels {range_Err_MissingRowLabels :: !(Range),nmL_Err_MissingRowLabels :: !(([HsName])),ty_Err_MissingRowLabels :: !(Ty)}
| Err_TooManyRowLabels {range_Err_TooManyRowLabels :: !(Range),nmL_Err_TooManyRowLabels :: !(([HsName])),ty_Err_TooManyRowLabels :: !(Ty)}
| Err_InconsistentIntros {range_Err_InconsistentIntros :: !(Range),kind_Err_InconsistentIntros :: !(String),nmL_Err_InconsistentIntros :: !(([HsName]))}
| Err_MissingDataFields {range_Err_MissingDataFields :: !(Range),nmL_Err_MissingDataFields :: !(([HsName])),con_Err_MissingDataFields :: !(HsName)}
| Err_MissingAnyDataField {range_Err_MissingAnyDataField :: !(Range),nmL_Err_MissingAnyDataField :: !(([HsName])),tyNm_Err_MissingAnyDataField :: !(HsName)}
| Err_DuplicateDataFields {range_Err_DuplicateDataFields :: !(Range),nmL_Err_DuplicateDataFields :: !(([HsName]))}
| Err_FileNotFound {range_Err_FileNotFound :: !(Range),fileName_Err_FileNotFound :: !(String),locations_Err_FileNotFound :: !(([String])),suffixes_Err_FileNotFound :: !(([FileSuffix]))}
| Err_AmbiguousExport {range_Err_AmbiguousExport :: !(Range),name_Err_AmbiguousExport :: !(HsName),entities_Err_AmbiguousExport :: !(([ThingAndRange HsName]))}
| Err_IllegalFFIWay {range_Err_IllegalFFIWay :: !(Range),ffiWay_Err_IllegalFFIWay :: !(FFIWay)}
| Err_TyCoreMatchClash {range_Err_TyCoreMatchClash :: !(Range),ty1_Err_TyCoreMatchClash :: !(PP_Doc),ty2_Err_TyCoreMatchClash :: !(PP_Doc),ty1detail_Err_TyCoreMatchClash :: !((Maybe PP_Doc)),ty2detail_Err_TyCoreMatchClash :: !((Maybe PP_Doc))}
| Err_TyCoreSeqLevels {range_Err_TyCoreSeqLevels :: !(Range),hereLev_Err_TyCoreSeqLevels :: !(Int),mustLev_Err_TyCoreSeqLevels :: !(Int),ty_Err_TyCoreSeqLevels :: !(PP_Doc)}
| Err_NoCoerceDerivation {range_Err_NoCoerceDerivation :: !(Range),ty1_Err_NoCoerceDerivation :: !(Ty),ty2_Err_NoCoerceDerivation :: !(Ty),fiMode_Err_NoCoerceDerivation :: !(FIMode),func_Err_NoCoerceDerivation :: !(Ty),arg_Err_NoCoerceDerivation :: !(Ty)}
| Err_PrfCutOffReached {range_Err_PrfCutOffReached :: !(Range),pred_Err_PrfCutOffReached :: !(PredOcc),depth_Err_PrfCutOffReached :: !(Int)}
| Err_NotProvenPreds {range_Err_NotProvenPreds :: !(Range),preds_Err_NotProvenPreds :: !(([((Pred,[Range]),PP_Doc)]))}
| Err_AmbigPreds {range_Err_AmbigPreds :: !(Range),preds_Err_AmbigPreds :: !(([(Pred,[Range])])),inQBinds_Err_AmbigPreds :: !((AssocL HsName PP_Doc)),inBinds_Err_AmbigPreds :: !((AssocL HsName PP_Doc))}
| Err_OverlapPreds {range_Err_OverlapPreds :: !(Range),overl_Err_OverlapPreds :: !((AssocL Pred [PP_Doc]))}
| Err_TyHasFreeTVars {range_Err_TyHasFreeTVars :: !(Range),ty_Err_TyHasFreeTVars :: !(Ty)}
| Err_DeclsNotAllowed {range_Err_DeclsNotAllowed :: !(Range),inside_Err_DeclsNotAllowed :: !(String),decls_Err_DeclsNotAllowed :: !((AssocL IdOccKind [HsName]))}
| Err_ValWithoutSig {range_Err_ValWithoutSig :: !(Range),nmL_Err_ValWithoutSig :: !(([HsName]))}
| Err_NoMostSpecificPred {range_Err_NoMostSpecificPred :: !(Range),pred1_Err_NoMostSpecificPred :: !(Pred),pred2_Err_NoMostSpecificPred :: !(Pred)}
| Err_EvidenceAltsLeft {range_Err_EvidenceAltsLeft :: !(Range)}
| Err_MalformedPred {range_Err_MalformedPred :: !(Range),pp_Err_MalformedPred :: !(PP_Doc)}
| Err_TyBetaRedLimit {range_Err_TyBetaRedLimit :: !(Range),ty_Err_TyBetaRedLimit :: !(Ty),tyTo_Err_TyBetaRedLimit :: !(Ty),limit_Err_TyBetaRedLimit :: !(Int)}
| Err_MayOnlyHaveNrMain {range_Err_MayOnlyHaveNrMain :: !(Range),nrAllowed_Err_MayOnlyHaveNrMain :: !(Int),prevModNmL_Err_MayOnlyHaveNrMain :: !(([HsName])),modNm_Err_MayOnlyHaveNrMain :: !(HsName)}
| Err_MayNotHaveMain {range_Err_MayNotHaveMain :: !(Range),modNm_Err_MayNotHaveMain :: !(HsName)}
| Err_MustHaveMain {range_Err_MustHaveMain :: !(Range)}
| Err_ModNameMismatch {range_Err_ModNameMismatch :: !(Range),nmOfFile_Err_ModNameMismatch :: !(HsName),nmFromSrc_Err_ModNameMismatch :: !(HsName)}
| Err_AmbiguousNameRef {range_Err_AmbiguousNameRef :: !(Range),kindName_Err_AmbiguousNameRef :: !(String),kind_Err_AmbiguousNameRef :: !(String),nm_Err_AmbiguousNameRef :: !(HsName),nmAlts_Err_AmbiguousNameRef :: !(([HsName]))}
| Err_MutRecModules {range_Err_MutRecModules :: !(Range),mutRecL_Err_MutRecModules :: !(([[HsName]]))}
| Err_MalformedTy {range_Err_MalformedTy :: !(Range),kind_Err_MalformedTy :: !(String),purpose_Err_MalformedTy :: !(String),ty_Err_MalformedTy :: !(Ty)}
| Err_NoDerivFor {range_Err_NoDerivFor :: !(Range),pred_Err_NoDerivFor :: !(PP_Doc)}
| Err_NoDerivForData {range_Err_NoDerivForData :: !(Range),ty_Err_NoDerivForData :: !(Ty),clNm_Err_NoDerivForData :: !(HsName),reason_Err_NoDerivForData :: !(String)}
| Err_FusionBuildInverse {range_Err_FusionBuildInverse :: !(Range),ty1_Err_FusionBuildInverse :: !(Ty),ty2_Err_FusionBuildInverse :: !(Ty)}
| Err_InconsistentHI {range_Err_InconsistentHI :: !(Range),modNm_Err_InconsistentHI :: !(String),file_Err_InconsistentHI :: !(String),expected_Err_InconsistentHI :: !(([String])),inHI_Err_InconsistentHI :: !(([String]))}
| Err_WrongMagic {range_Err_WrongMagic :: !(Range),modNm_Err_WrongMagic :: !(String),file_Err_WrongMagic :: !(String)}
deriving ( Show)
type ErrL = [Err]