{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE StandaloneKindSignatures #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilyDependencies #-} {-# LANGUAGE UndecidableInstances #-} -- | Defines diagnostic codes for the diagnostics emitted by GHC. -- -- A diagnostic code is a numeric unique identifier for a diagnostic. -- See Note [Diagnostic codes]. module GHC.Types.Error.Codes ( constructorCode ) where import GHC.Prelude import GHC.Types.Error ( DiagnosticCode(..), UnknownDiagnostic (..), diagnosticCode, NoDiagnosticOpts ) import GHC.Hs.Extension ( GhcRn ) import GHC.Core.InstEnv (LookupInstanceErrReason) import GHC.Iface.Errors.Types import GHC.Driver.Errors.Types ( DriverMessage, GhcMessageOpts, DriverMessageOpts ) import GHC.Parser.Errors.Types ( PsMessage, PsHeaderMessage ) import GHC.HsToCore.Errors.Types ( DsMessage ) import GHC.Tc.Errors.Types import GHC.Unit.Module.Warnings ( WarningTxt ) import GHC.Utils.Panic.Plain import Data.Kind ( Type, Constraint ) import GHC.Exts ( proxy# ) import GHC.Generics import GHC.TypeLits ( Symbol, TypeError, ErrorMessage(..) ) import GHC.TypeNats ( Nat, KnownNat, natVal' ) {- Note [Diagnostic codes] ~~~~~~~~~~~~~~~~~~~~~~~~~~ Every time a new diagnostic (error or warning) is introduced to GHC, it is assigned a new numeric code, which has never been used before. To ensure uniqueness across GHC versions, we proceed as follows: - all diagnostic codes are defined in a single module, GHC.Types.Error.Codes. - uniqueness of diagnostic codes is ensured by the use of an injective type family, GhcDiagnosticCode, - a diagnostic code never gets deleted from the GhcDiagnosticCode type family in GHC.Types.Error.Codes, even if it is no longer used. Older versions of GHC might still display the code, and we don't want that old code to get confused with the error code of a different, new, error message. [Instructions for adding a new diagnostic code] After adding a constructor to a diagnostic datatype, such as PsMessage, TcRnMessage, DsMessage or DriverMessage, you can add corresponding diagnostic codes as follows: a. To give a single diagnostic code to the constructor, simply add a type family equation to GHC.Error.Codes.GhcDiagnosticCode, e.g.: GhcDiagnosticCode "MyNewErrorConstructor" = 12345 You can obtain new randomly-generated error codes by using https://www.random.org/integers/?num=10&min=1&max=99999&col=1&base=10&format=plain. You will get a type error if you try to use an error code that is already used by another constructor. b. If you instead require more granular diagnostic codes, add a type family equation to GHC.Error.Codes.ConRecursInto, specifying which argument to recur into to obtain an diagnostic code. For example, the 'TcRnCannotDeriveInstance' constructor is associated with several diagnostic codes, depending on the value of the argument of type 'DeriveInstanceErrReason'. This is achieved as follows: - The equation ConRecursInto "TcRnCannotDeriveInstance" = 'Just DeriveInstanceErrReason says to recur into the argument of type 'DeriveInstanceErrReason' to get a diagnostic code. - The equations GhcDiagnosticCode "DerivErrNotWellKinded" = 62016 GhcDiagnosticCode "DerivErrSafeHaskellGenericInst" = 07214 GhcDiagnosticCode "DerivErrDerivingViaWrongKind" = 63174 ... give the diagnostic codes for the various constructors of DeriveInstanceErrReason. These are added following the procedure in (a). Never remove a return value from the 'GhcDiagnosticCode' type family! Outdated error messages must still be tracked to ensure uniqueness of diagnostic codes across GHC versions. -} {- ********************************************************************* * * The GhcDiagnosticCode type family * * ********************************************************************* -} -- | This function obtain a diagnostic code by looking up the constructor -- name using generics, and using the 'GhcDiagnosticCode' type family. constructorCode :: (Generic diag, GDiagnosticCode (Rep diag)) => diag -> Maybe DiagnosticCode constructorCode diag = gdiagnosticCode (from diag) -- | Type family computing the numeric diagnostic code for a given error message constructor. -- -- Its injectivity annotation ensures uniqueness of error codes. -- -- Never remove a return value from this type family! Outdated error messages must still -- be tracked here to ensure uniqueness of diagnostic codes across GHC versions. -- -- See Note [Diagnostic codes] in GHC.Types.Error. type GhcDiagnosticCode :: Symbol -> Nat type family GhcDiagnosticCode c = n | n -> c where -- Desugarer diagnostic codes GhcDiagnosticCode "DsEmptyEnumeration" = 10190 GhcDiagnosticCode "DsIdentitiesFound" = 04214 GhcDiagnosticCode "DsOverflowedLiterals" = 97441 GhcDiagnosticCode "DsRedundantBangPatterns" = 38520 GhcDiagnosticCode "DsOverlappingPatterns" = 53633 GhcDiagnosticCode "DsInaccessibleRhs" = 94210 GhcDiagnosticCode "DsMaxPmCheckModelsReached" = 61505 GhcDiagnosticCode "DsNonExhaustivePatterns" = 62161 GhcDiagnosticCode "DsTopLevelBindsNotAllowed" = 48099 GhcDiagnosticCode "DsUselessSpecialiseForClassMethodSelector" = 93315 GhcDiagnosticCode "DsUselessSpecialiseForNoInlineFunction" = 38524 GhcDiagnosticCode "DsMultiplicityCoercionsNotSupported" = 59840 GhcDiagnosticCode "DsOrphanRule" = 58181 GhcDiagnosticCode "DsRuleLhsTooComplicated" = 69441 GhcDiagnosticCode "DsRuleIgnoredDueToConstructor" = 00828 GhcDiagnosticCode "DsRuleBindersNotBound" = 40548 GhcDiagnosticCode "DsLazyPatCantBindVarsOfUnliftedType" = 17879 GhcDiagnosticCode "DsNotYetHandledByTH" = 65904 GhcDiagnosticCode "DsAggregatedViewExpressions" = 19551 GhcDiagnosticCode "DsUnbangedStrictPatterns" = 21030 GhcDiagnosticCode "DsCannotMixPolyAndUnliftedBindings" = 20036 GhcDiagnosticCode "DsWrongDoBind" = 08838 GhcDiagnosticCode "DsUnusedDoBind" = 81995 GhcDiagnosticCode "DsRecBindsNotAllowedForUnliftedTys" = 20185 GhcDiagnosticCode "DsRuleMightInlineFirst" = 95396 GhcDiagnosticCode "DsAnotherRuleMightFireFirst" = 87502 -- Parser diagnostic codes GhcDiagnosticCode "PsErrParseLanguagePragma" = 68686 GhcDiagnosticCode "PsErrUnsupportedExt" = 46537 GhcDiagnosticCode "PsErrParseOptionsPragma" = 24342 GhcDiagnosticCode "PsErrUnknownOptionsPragma" = 04924 GhcDiagnosticCode "PsWarnBidirectionalFormatChars" = 03272 GhcDiagnosticCode "PsWarnTab" = 94817 GhcDiagnosticCode "PsWarnTransitionalLayout" = 93617 GhcDiagnosticCode "PsWarnOperatorWhitespaceExtConflict" = 47082 GhcDiagnosticCode "PsWarnOperatorWhitespace" = 40798 GhcDiagnosticCode "PsWarnHaddockInvalidPos" = 94458 GhcDiagnosticCode "PsWarnHaddockIgnoreMulti" = 05641 GhcDiagnosticCode "PsWarnStarBinder" = 21887 GhcDiagnosticCode "PsWarnStarIsType" = 39567 GhcDiagnosticCode "PsWarnUnrecognisedPragma" = 42044 GhcDiagnosticCode "PsWarnMisplacedPragma" = 28007 GhcDiagnosticCode "PsWarnImportPreQualified" = 07924 GhcDiagnosticCode "PsErrLexer" = 21231 GhcDiagnosticCode "PsErrCmmLexer" = 75725 GhcDiagnosticCode "PsErrCmmParser" = 09848 GhcDiagnosticCode "PsErrParse" = 58481 GhcDiagnosticCode "PsErrTypeAppWithoutSpace" = 84077 GhcDiagnosticCode "PsErrLazyPatWithoutSpace" = 27207 GhcDiagnosticCode "PsErrBangPatWithoutSpace" = 95644 GhcDiagnosticCode "PsErrInvalidInfixHole" = 45106 GhcDiagnosticCode "PsErrExpectedHyphen" = 44524 GhcDiagnosticCode "PsErrSpaceInSCC" = 76176 GhcDiagnosticCode "PsErrEmptyDoubleQuotes" = 11861 GhcDiagnosticCode "PsErrLambdaCase" = 51179 GhcDiagnosticCode "PsErrEmptyLambda" = 71614 GhcDiagnosticCode "PsErrLinearFunction" = 31574 GhcDiagnosticCode "PsErrMultiWayIf" = 28985 GhcDiagnosticCode "PsErrOverloadedRecordUpdateNotEnabled" = 82135 GhcDiagnosticCode "PsErrNumUnderscores" = 62330 GhcDiagnosticCode "PsErrIllegalBangPattern" = 79767 GhcDiagnosticCode "PsErrOverloadedRecordDotInvalid" = 26832 GhcDiagnosticCode "PsErrIllegalPatSynExport" = 89515 GhcDiagnosticCode "PsErrOverloadedRecordUpdateNoQualifiedFields" = 94863 GhcDiagnosticCode "PsErrExplicitForall" = 25955 GhcDiagnosticCode "PsErrIllegalQualifiedDo" = 40280 GhcDiagnosticCode "PsErrQualifiedDoInCmd" = 54089 GhcDiagnosticCode "PsErrRecordSyntaxInPatSynDecl" = 28021 GhcDiagnosticCode "PsErrEmptyWhereInPatSynDecl" = 13248 GhcDiagnosticCode "PsErrInvalidWhereBindInPatSynDecl" = 24737 GhcDiagnosticCode "PsErrNoSingleWhereBindInPatSynDecl" = 65536 GhcDiagnosticCode "PsErrDeclSpliceNotAtTopLevel" = 08451 GhcDiagnosticCode "PsErrMultipleNamesInStandaloneKindSignature" = 42569 GhcDiagnosticCode "PsErrIllegalExplicitNamespace" = 47007 GhcDiagnosticCode "PsErrUnallowedPragma" = 85314 GhcDiagnosticCode "PsErrImportPostQualified" = 87491 GhcDiagnosticCode "PsErrImportQualifiedTwice" = 05661 GhcDiagnosticCode "PsErrIllegalImportBundleForm" = 81284 GhcDiagnosticCode "PsErrInvalidRuleActivationMarker" = 50396 GhcDiagnosticCode "PsErrMissingBlock" = 16849 GhcDiagnosticCode "PsErrUnsupportedBoxedSumExpr" = 09550 GhcDiagnosticCode "PsErrUnsupportedBoxedSumPat" = 16863 GhcDiagnosticCode "PsErrUnexpectedQualifiedConstructor" = 73413 GhcDiagnosticCode "PsErrTupleSectionInPat" = 09646 GhcDiagnosticCode "PsErrOpFewArgs" = 24180 GhcDiagnosticCode "PsErrVarForTyCon" = 18208 GhcDiagnosticCode "PsErrMalformedEntityString" = 26204 GhcDiagnosticCode "PsErrDotsInRecordUpdate" = 70712 GhcDiagnosticCode "PsErrInvalidDataCon" = 46574 GhcDiagnosticCode "PsErrInvalidInfixDataCon" = 30670 GhcDiagnosticCode "PsErrIllegalPromotionQuoteDataCon" = 80236 GhcDiagnosticCode "PsErrUnpackDataCon" = 40845 GhcDiagnosticCode "PsErrUnexpectedKindAppInDataCon" = 83653 GhcDiagnosticCode "PsErrInvalidRecordCon" = 08195 GhcDiagnosticCode "PsErrIllegalUnboxedStringInPat" = 69925 GhcDiagnosticCode "PsErrIllegalUnboxedFloatingLitInPat" = 76595 GhcDiagnosticCode "PsErrDoNotationInPat" = 06446 GhcDiagnosticCode "PsErrIfThenElseInPat" = 45696 GhcDiagnosticCode "PsErrLambdaCaseInPat" = 07636 GhcDiagnosticCode "PsErrCaseInPat" = 53786 GhcDiagnosticCode "PsErrLetInPat" = 78892 GhcDiagnosticCode "PsErrLambdaInPat" = 00482 GhcDiagnosticCode "PsErrArrowExprInPat" = 04584 GhcDiagnosticCode "PsErrArrowCmdInPat" = 98980 GhcDiagnosticCode "PsErrArrowCmdInExpr" = 66043 GhcDiagnosticCode "PsErrViewPatInExpr" = 66228 GhcDiagnosticCode "PsErrLambdaCmdInFunAppCmd" = 12178 GhcDiagnosticCode "PsErrCaseCmdInFunAppCmd" = 92971 GhcDiagnosticCode "PsErrLambdaCaseCmdInFunAppCmd" = 47171 GhcDiagnosticCode "PsErrIfCmdInFunAppCmd" = 97005 GhcDiagnosticCode "PsErrLetCmdInFunAppCmd" = 70526 GhcDiagnosticCode "PsErrDoCmdInFunAppCmd" = 77808 GhcDiagnosticCode "PsErrDoInFunAppExpr" = 52095 GhcDiagnosticCode "PsErrMDoInFunAppExpr" = 67630 GhcDiagnosticCode "PsErrLambdaInFunAppExpr" = 06074 GhcDiagnosticCode "PsErrCaseInFunAppExpr" = 25037 GhcDiagnosticCode "PsErrLambdaCaseInFunAppExpr" = 77182 GhcDiagnosticCode "PsErrLetInFunAppExpr" = 90355 GhcDiagnosticCode "PsErrIfInFunAppExpr" = 01239 GhcDiagnosticCode "PsErrProcInFunAppExpr" = 04807 GhcDiagnosticCode "PsErrMalformedTyOrClDecl" = 47568 GhcDiagnosticCode "PsErrIllegalWhereInDataDecl" = 36952 GhcDiagnosticCode "PsErrIllegalDataTypeContext" = 87429 GhcDiagnosticCode "PsErrPrimStringInvalidChar" = 43080 GhcDiagnosticCode "PsErrSuffixAT" = 33856 GhcDiagnosticCode "PsErrPrecedenceOutOfRange" = 25078 GhcDiagnosticCode "PsErrSemiColonsInCondExpr" = 75254 GhcDiagnosticCode "PsErrSemiColonsInCondCmd" = 18910 GhcDiagnosticCode "PsErrAtInPatPos" = 08382 GhcDiagnosticCode "PsErrParseErrorOnInput" = 66418 GhcDiagnosticCode "PsErrMalformedDecl" = 85316 GhcDiagnosticCode "PsErrNotADataCon" = 25742 GhcDiagnosticCode "PsErrInferredTypeVarNotAllowed" = 57342 GhcDiagnosticCode "PsErrIllegalTraditionalRecordSyntax" = 65719 GhcDiagnosticCode "PsErrParseErrorInCmd" = 03790 GhcDiagnosticCode "PsErrInPat" = 07626 GhcDiagnosticCode "PsErrIllegalRoleName" = 09009 GhcDiagnosticCode "PsErrInvalidTypeSignature" = 94426 GhcDiagnosticCode "PsErrUnexpectedTypeInDecl" = 77878 GhcDiagnosticCode "PsErrInvalidPackageName" = 21926 GhcDiagnosticCode "PsErrParseRightOpSectionInPat" = 72516 GhcDiagnosticCode "PsErrIllegalGadtRecordMultiplicity" = 37475 GhcDiagnosticCode "PsErrInvalidCApiImport" = 72744 GhcDiagnosticCode "PsErrMultipleConForNewtype" = 05380 GhcDiagnosticCode "PsErrUnicodeCharLooksLike" = 31623 -- Driver diagnostic codes GhcDiagnosticCode "DriverMissingHomeModules" = 32850 GhcDiagnosticCode "DriverUnknownHiddenModules" = 38189 GhcDiagnosticCode "DriverUnknownReexportedModules" = 68286 GhcDiagnosticCode "DriverUnusedPackages" = 42258 GhcDiagnosticCode "DriverUnnecessarySourceImports" = 88907 GhcDiagnosticCode "DriverDuplicatedModuleDeclaration" = 29235 GhcDiagnosticCode "DriverModuleNotFound" = 82272 GhcDiagnosticCode "DriverFileModuleNameMismatch" = 28623 GhcDiagnosticCode "DriverUnexpectedSignature" = 66004 GhcDiagnosticCode "DriverFileNotFound" = 49196 GhcDiagnosticCode "DriverStaticPointersNotSupported" = 77799 GhcDiagnosticCode "DriverBackpackModuleNotFound" = 19971 GhcDiagnosticCode "DriverUserDefinedRuleIgnored" = 56147 GhcDiagnosticCode "DriverMixedSafetyImport" = 70172 GhcDiagnosticCode "DriverCannotLoadInterfaceFile" = 37141 GhcDiagnosticCode "DriverInferredSafeModule" = 58656 GhcDiagnosticCode "DriverMarkedTrustworthyButInferredSafe" = 19244 GhcDiagnosticCode "DriverInferredSafeImport" = 82658 GhcDiagnosticCode "DriverCannotImportUnsafeModule" = 44360 GhcDiagnosticCode "DriverMissingSafeHaskellMode" = 29747 GhcDiagnosticCode "DriverPackageNotTrusted" = 08674 GhcDiagnosticCode "DriverCannotImportFromUntrustedPackage" = 75165 GhcDiagnosticCode "DriverRedirectedNoMain" = 95379 GhcDiagnosticCode "DriverHomePackagesNotClosed" = 03271 GhcDiagnosticCode "DriverInconsistentDynFlags" = 74335 GhcDiagnosticCode "DriverSafeHaskellIgnoredExtension" = 98887 GhcDiagnosticCode "DriverPackageTrustIgnored" = 83552 GhcDiagnosticCode "DriverUnrecognisedFlag" = 93741 GhcDiagnosticCode "DriverDeprecatedFlag" = 53692 -- Constraint solver diagnostic codes GhcDiagnosticCode "BadTelescope" = 97739 GhcDiagnosticCode "UserTypeError" = 64725 GhcDiagnosticCode "UnsatisfiableError" = 22250 GhcDiagnosticCode "ReportHoleError" = 88464 GhcDiagnosticCode "FixedRuntimeRepError" = 55287 GhcDiagnosticCode "BlockedEquality" = 06200 GhcDiagnosticCode "ExpectingMoreArguments" = 81325 GhcDiagnosticCode "UnboundImplicitParams" = 91416 GhcDiagnosticCode "AmbiguityPreventsSolvingCt" = 78125 GhcDiagnosticCode "CannotResolveInstance" = 39999 GhcDiagnosticCode "OverlappingInstances" = 43085 GhcDiagnosticCode "UnsafeOverlap" = 36705 -- Type mismatch errors GhcDiagnosticCode "BasicMismatch" = 18872 GhcDiagnosticCode "KindMismatch" = 89223 GhcDiagnosticCode "TypeEqMismatch" = 83865 GhcDiagnosticCode "CouldNotDeduce" = 05617 -- Variable unification errors GhcDiagnosticCode "CannotUnifyWithPolytype" = 91028 GhcDiagnosticCode "OccursCheck" = 27958 GhcDiagnosticCode "SkolemEscape" = 46956 GhcDiagnosticCode "DifferentTyVars" = 25897 GhcDiagnosticCode "RepresentationalEq" = 10283 -- Typechecker/renamer diagnostic codes GhcDiagnosticCode "TcRnSolverDepthError" = 40404 GhcDiagnosticCode "TcRnRedundantConstraints" = 30606 GhcDiagnosticCode "TcRnInaccessibleCode" = 40564 GhcDiagnosticCode "TcRnInaccessibleCoAxBranch" = 28129 GhcDiagnosticCode "TcRnTypeDoesNotHaveFixedRuntimeRep" = 18478 GhcDiagnosticCode "TcRnImplicitLift" = 00846 GhcDiagnosticCode "TcRnUnusedPatternBinds" = 61367 GhcDiagnosticCode "TcRnDodgyExports" = 75356 GhcDiagnosticCode "TcRnMissingImportList" = 77037 GhcDiagnosticCode "TcRnUnsafeDueToPlugin" = 01687 GhcDiagnosticCode "TcRnModMissingRealSrcSpan" = 84170 GhcDiagnosticCode "TcRnIdNotExportedFromModuleSig" = 44188 GhcDiagnosticCode "TcRnIdNotExportedFromLocalSig" = 50058 GhcDiagnosticCode "TcRnShadowedName" = 63397 GhcDiagnosticCode "TcRnInvalidWarningCategory" = 53573 GhcDiagnosticCode "TcRnDuplicateWarningDecls" = 00711 GhcDiagnosticCode "TcRnSimplifierTooManyIterations" = 95822 GhcDiagnosticCode "TcRnIllegalPatSynDecl" = 82077 GhcDiagnosticCode "TcRnLinearPatSyn" = 15172 GhcDiagnosticCode "TcRnEmptyRecordUpdate" = 20825 GhcDiagnosticCode "TcRnIllegalFieldPunning" = 44287 GhcDiagnosticCode "TcRnIllegalWildcardsInRecord" = 37132 GhcDiagnosticCode "TcRnIllegalWildcardInType" = 65507 GhcDiagnosticCode "TcRnDuplicateFieldName" = 85524 GhcDiagnosticCode "TcRnIllegalViewPattern" = 22406 GhcDiagnosticCode "TcRnCharLiteralOutOfRange" = 17268 GhcDiagnosticCode "TcRnIllegalWildcardsInConstructor" = 47217 GhcDiagnosticCode "TcRnIgnoringAnnotations" = 66649 GhcDiagnosticCode "TcRnAnnotationInSafeHaskell" = 68934 GhcDiagnosticCode "TcRnInvalidTypeApplication" = 95781 GhcDiagnosticCode "TcRnTagToEnumMissingValArg" = 36495 GhcDiagnosticCode "TcRnTagToEnumUnspecifiedResTy" = 08522 GhcDiagnosticCode "TcRnTagToEnumResTyNotAnEnum" = 49356 GhcDiagnosticCode "TcRnTagToEnumResTyTypeData" = 96189 GhcDiagnosticCode "TcRnArrowIfThenElsePredDependsOnResultTy" = 55868 GhcDiagnosticCode "TcRnIllegalHsBootOrSigDecl" = 58195 GhcDiagnosticCode "TcRnRecursivePatternSynonym" = 72489 GhcDiagnosticCode "TcRnPartialTypeSigTyVarMismatch" = 88793 GhcDiagnosticCode "TcRnPartialTypeSigBadQuantifier" = 94185 GhcDiagnosticCode "TcRnMissingSignature" = 38417 GhcDiagnosticCode "TcRnPolymorphicBinderMissingSig" = 64414 GhcDiagnosticCode "TcRnOverloadedSig" = 16675 GhcDiagnosticCode "TcRnTupleConstraintInst" = 69012 GhcDiagnosticCode "TcRnUserTypeError" = 47403 GhcDiagnosticCode "TcRnConstraintInKind" = 01259 GhcDiagnosticCode "TcRnUnboxedTupleOrSumTypeFuncArg" = 19590 GhcDiagnosticCode "TcRnLinearFuncInKind" = 13218 GhcDiagnosticCode "TcRnForAllEscapeError" = 31147 GhcDiagnosticCode "TcRnVDQInTermType" = 51580 GhcDiagnosticCode "TcRnBadQuantPredHead" = 02550 GhcDiagnosticCode "TcRnIllegalTupleConstraint" = 77539 GhcDiagnosticCode "TcRnNonTypeVarArgInConstraint" = 80003 GhcDiagnosticCode "TcRnIllegalImplicitParam" = 75863 GhcDiagnosticCode "TcRnIllegalConstraintSynonymOfKind" = 75844 GhcDiagnosticCode "TcRnOversaturatedVisibleKindArg" = 45474 GhcDiagnosticCode "TcRnForAllRankErr" = 91510 GhcDiagnosticCode "TcRnMonomorphicBindings" = 55524 GhcDiagnosticCode "TcRnOrphanInstance" = 90177 GhcDiagnosticCode "TcRnFunDepConflict" = 46208 GhcDiagnosticCode "TcRnDupInstanceDecls" = 59692 GhcDiagnosticCode "TcRnConflictingFamInstDecls" = 34447 GhcDiagnosticCode "TcRnFamInstNotInjective" = 05175 GhcDiagnosticCode "TcRnBangOnUnliftedType" = 55666 GhcDiagnosticCode "TcRnLazyBangOnUnliftedType" = 71444 GhcDiagnosticCode "TcRnMultipleDefaultDeclarations" = 99565 GhcDiagnosticCode "TcRnBadDefaultType" = 88933 GhcDiagnosticCode "TcRnPatSynBundledWithNonDataCon" = 66775 GhcDiagnosticCode "TcRnPatSynBundledWithWrongType" = 66025 GhcDiagnosticCode "TcRnDupeModuleExport" = 51876 GhcDiagnosticCode "TcRnExportedModNotImported" = 90973 GhcDiagnosticCode "TcRnNullExportedModule" = 64649 GhcDiagnosticCode "TcRnMissingExportList" = 85401 GhcDiagnosticCode "TcRnExportHiddenComponents" = 94558 GhcDiagnosticCode "TcRnDuplicateExport" = 47854 GhcDiagnosticCode "TcRnExportedParentChildMismatch" = 88993 GhcDiagnosticCode "TcRnConflictingExports" = 69158 GhcDiagnosticCode "TcRnDuplicateFieldExport" = 97219 GhcDiagnosticCode "TcRnAmbiguousFieldInUpdate" = 56428 GhcDiagnosticCode "TcRnAmbiguousRecordUpdate" = 02256 GhcDiagnosticCode "TcRnMissingFields" = 20125 GhcDiagnosticCode "TcRnFieldUpdateInvalidType" = 63055 GhcDiagnosticCode "TcRnMissingStrictFields" = 95909 GhcDiagnosticCode "TcRnStaticFormNotClosed" = 88431 GhcDiagnosticCode "TcRnIllegalStaticExpression" = 23800 GhcDiagnosticCode "TcRnUselessTypeable" = 90584 GhcDiagnosticCode "TcRnDerivingDefaults" = 20042 GhcDiagnosticCode "TcRnNonUnaryTypeclassConstraint" = 73993 GhcDiagnosticCode "TcRnPartialTypeSignatures" = 60661 GhcDiagnosticCode "TcRnLazyGADTPattern" = 87005 GhcDiagnosticCode "TcRnArrowProcGADTPattern" = 64525 GhcDiagnosticCode "TcRnForallIdentifier" = 64088 GhcDiagnosticCode "TcRnTypeEqualityOutOfScope" = 12003 GhcDiagnosticCode "TcRnTypeEqualityRequiresOperators" = 58520 GhcDiagnosticCode "TcRnIllegalTypeOperator" = 62547 GhcDiagnosticCode "TcRnGADTMonoLocalBinds" = 58008 GhcDiagnosticCode "TcRnIncorrectNameSpace" = 31891 GhcDiagnosticCode "TcRnNoRebindableSyntaxRecordDot" = 65945 GhcDiagnosticCode "TcRnNoFieldPunsRecordDot" = 57365 GhcDiagnosticCode "TcRnListComprehensionDuplicateBinding" = 81232 GhcDiagnosticCode "TcRnLastStmtNotExpr" = 55814 GhcDiagnosticCode "TcRnUnexpectedStatementInContext" = 42026 GhcDiagnosticCode "TcRnSectionWithoutParentheses" = 95880 GhcDiagnosticCode "TcRnIllegalImplicitParameterBindings" = 50730 GhcDiagnosticCode "TcRnIllegalTupleSection" = 59155 GhcDiagnosticCode "TcRnTermNameInType" = 37479 GhcDiagnosticCode "TcRnUnexpectedKindVar" = 12875 GhcDiagnosticCode "TcRnNegativeNumTypeLiteral" = 93632 GhcDiagnosticCode "TcRnUnusedQuantifiedTypeVar" = 54180 GhcDiagnosticCode "TcRnMissingRoleAnnotation" = 65490 GhcDiagnosticCode "TcRnUntickedPromotedThing" = 49957 GhcDiagnosticCode "TcRnIllegalBuiltinSyntax" = 39716 GhcDiagnosticCode "TcRnWarnDefaulting" = 18042 GhcDiagnosticCode "TcRnForeignImportPrimExtNotSet" = 49692 GhcDiagnosticCode "TcRnForeignImportPrimSafeAnn" = 26133 GhcDiagnosticCode "TcRnForeignFunctionImportAsValue" = 76251 GhcDiagnosticCode "TcRnFunPtrImportWithoutAmpersand" = 57989 GhcDiagnosticCode "TcRnIllegalForeignDeclBackend" = 03355 GhcDiagnosticCode "TcRnUnsupportedCallConv" = 01245 GhcDiagnosticCode "TcRnInvalidCIdentifier" = 95774 GhcDiagnosticCode "TcRnExpectedValueId" = 01570 GhcDiagnosticCode "TcRnRecSelectorEscapedTyVar" = 55876 GhcDiagnosticCode "TcRnPatSynNotBidirectional" = 16444 GhcDiagnosticCode "TcRnIllegalDerivingItem" = 11913 GhcDiagnosticCode "TcRnUnexpectedAnnotation" = 18932 GhcDiagnosticCode "TcRnIllegalRecordSyntax" = 89246 GhcDiagnosticCode "TcRnInvalidVisibleKindArgument" = 20967 GhcDiagnosticCode "TcRnTooManyBinders" = 05989 GhcDiagnosticCode "TcRnDifferentNamesForTyVar" = 17370 GhcDiagnosticCode "TcRnInvalidReturnKind" = 55233 GhcDiagnosticCode "TcRnClassKindNotConstraint" = 80768 GhcDiagnosticCode "TcRnMatchesHaveDiffNumArgs" = 91938 GhcDiagnosticCode "TcRnCannotBindScopedTyVarInPatSig" = 46131 GhcDiagnosticCode "TcRnCannotBindTyVarsInPatBind" = 48361 GhcDiagnosticCode "TcRnTooManyTyArgsInConPattern" = 01629 GhcDiagnosticCode "TcRnMultipleInlinePragmas" = 96665 GhcDiagnosticCode "TcRnUnexpectedPragmas" = 88293 GhcDiagnosticCode "TcRnNonOverloadedSpecialisePragma" = 35827 GhcDiagnosticCode "TcRnSpecialiseNotVisible" = 85337 GhcDiagnosticCode "TcRnDifferentExportWarnings" = 92878 GhcDiagnosticCode "TcRnIncompleteExportWarnings" = 94721 GhcDiagnosticCode "TcRnIllegalTypeOperatorDecl" = 50649 GhcDiagnosticCode "TcRnBindVarAlreadyInScope" = 69710 GhcDiagnosticCode "TcRnBindMultipleVariables" = 92957 GhcDiagnosticCode "TcRnIllegalKind" = 64861 GhcDiagnosticCode "TcRnUnexpectedPatSigType" = 74097 GhcDiagnosticCode "TcRnIllegalKindSignature" = 91382 GhcDiagnosticCode "TcRnDataKindsError" = 68567 GhcDiagnosticCode "TcRnIllegalHsigDefaultMethods" = 93006 GhcDiagnosticCode "TcRnHsigFixityMismatch" = 93007 GhcDiagnosticCode "TcRnHsigNoIface" = 93010 GhcDiagnosticCode "TcRnHsigMissingModuleExport" = 93011 GhcDiagnosticCode "TcRnBadGenericMethod" = 59794 GhcDiagnosticCode "TcRnWarningMinimalDefIncomplete" = 13511 GhcDiagnosticCode "TcRnDefaultMethodForPragmaLacksBinding" = 28587 GhcDiagnosticCode "TcRnIgnoreSpecialisePragmaOnDefMethod" = 72520 GhcDiagnosticCode "TcRnBadMethodErr" = 46284 GhcDiagnosticCode "TcRnIllegalTypeData" = 15013 GhcDiagnosticCode "TcRnTypeDataForbids" = 67297 GhcDiagnosticCode "TcRnInterfaceLookupError" = 52243 GhcDiagnosticCode "TcRnUnsatisfiedMinimalDef" = 06201 GhcDiagnosticCode "TcRnMisplacedInstSig" = 06202 GhcDiagnosticCode "TcRnCapturedTermName" = 54201 GhcDiagnosticCode "TcRnBindingOfExistingName" = 58805 GhcDiagnosticCode "TcRnMultipleFixityDecls" = 50419 GhcDiagnosticCode "TcRnIllegalPatternSynonymDecl" = 41507 GhcDiagnosticCode "TcRnIllegalClassBinding" = 69248 GhcDiagnosticCode "TcRnOrphanCompletePragma" = 93961 GhcDiagnosticCode "TcRnEmptyCase" = 48010 GhcDiagnosticCode "TcRnNonStdGuards" = 59119 GhcDiagnosticCode "TcRnDuplicateSigDecl" = 31744 GhcDiagnosticCode "TcRnMisplacedSigDecl" = 87866 GhcDiagnosticCode "TcRnUnexpectedDefaultSig" = 40700 GhcDiagnosticCode "TcRnDuplicateMinimalSig" = 85346 GhcDiagnosticCode "TcRnLoopySuperclassSolve" = 36038 GhcDiagnosticCode "TcRnUnexpectedStandaloneDerivingDecl" = 95159 GhcDiagnosticCode "TcRnUnusedVariableInRuleDecl" = 65669 GhcDiagnosticCode "TcRnUnexpectedStandaloneKindSig" = 45906 GhcDiagnosticCode "TcRnIllegalRuleLhs" = 63294 GhcDiagnosticCode "TcRnDuplicateRoleAnnot" = 97170 GhcDiagnosticCode "TcRnDuplicateKindSig" = 43371 GhcDiagnosticCode "TcRnIllegalDerivStrategy" = 87139 GhcDiagnosticCode "TcRnIllegalMultipleDerivClauses" = 30281 GhcDiagnosticCode "TcRnNoDerivStratSpecified" = 55631 GhcDiagnosticCode "TcRnStupidThetaInGadt" = 18403 GhcDiagnosticCode "TcRnShadowedTyVarNameInFamResult" = 99412 GhcDiagnosticCode "TcRnIncorrectTyVarOnLhsOfInjCond" = 88333 GhcDiagnosticCode "TcRnUnknownTyVarsOnRhsOfInjCond" = 48254 GhcDiagnosticCode "TcRnBadlyStaged" = 28914 GhcDiagnosticCode "TcRnStageRestriction" = 18157 GhcDiagnosticCode "TcRnTyThingUsedWrong" = 10969 GhcDiagnosticCode "TcRnCannotDefaultKindVar" = 79924 GhcDiagnosticCode "TcRnUninferrableTyVar" = 16220 GhcDiagnosticCode "TcRnSkolemEscape" = 71451 GhcDiagnosticCode "TcRnPatSynEscapedCoercion" = 88986 GhcDiagnosticCode "TcRnPatSynExistentialInResult" = 33973 GhcDiagnosticCode "TcRnPatSynArityMismatch" = 18365 GhcDiagnosticCode "TcRnTyFamDepsDisabled" = 43991 GhcDiagnosticCode "TcRnAbstractClosedTyFamDecl" = 60012 GhcDiagnosticCode "TcRnPartialFieldSelector" = 82712 GhcDiagnosticCode "TcRnSuperclassCycle" = 29210 GhcDiagnosticCode "TcRnDefaultSigMismatch" = 72771 GhcDiagnosticCode "TcRnTyFamResultDisabled" = 44012 GhcDiagnosticCode "TcRnCommonFieldResultTypeMismatch" = 31004 GhcDiagnosticCode "TcRnCommonFieldTypeMismatch" = 91827 GhcDiagnosticCode "TcRnDataConParentTypeMismatch" = 45219 GhcDiagnosticCode "TcRnGADTsDisabled" = 23894 GhcDiagnosticCode "TcRnExistentialQuantificationDisabled" = 25709 GhcDiagnosticCode "TcRnGADTDataContext" = 61072 GhcDiagnosticCode "TcRnMultipleConForNewtype" = 16409 GhcDiagnosticCode "TcRnKindSignaturesDisabled" = 49378 GhcDiagnosticCode "TcRnEmptyDataDeclsDisabled" = 32478 GhcDiagnosticCode "TcRnRoleMismatch" = 29178 GhcDiagnosticCode "TcRnRoleCountMismatch" = 54298 GhcDiagnosticCode "TcRnIllegalRoleAnnotation" = 77192 GhcDiagnosticCode "TcRnRoleAnnotationsDisabled" = 17779 GhcDiagnosticCode "TcRnIncoherentRoles" = 18273 GhcDiagnosticCode "TcRnTypeSynonymCycle" = 97522 GhcDiagnosticCode "TcRnSelfImport" = 43281 GhcDiagnosticCode "TcRnNoExplicitImportList" = 16029 GhcDiagnosticCode "TcRnSafeImportsDisabled" = 26971 GhcDiagnosticCode "TcRnDeprecatedModule" = 15328 GhcDiagnosticCode "TcRnCompatUnqualifiedImport" = 82347 GhcDiagnosticCode "TcRnRedundantSourceImport" = 54478 GhcDiagnosticCode "TcRnDuplicateDecls" = 29916 GhcDiagnosticCode "TcRnPackageImportsDisabled" = 10032 GhcDiagnosticCode "TcRnIllegalDataCon" = 78448 GhcDiagnosticCode "TcRnNestedForallsContexts" = 71492 GhcDiagnosticCode "TcRnRedundantRecordWildcard" = 15932 GhcDiagnosticCode "TcRnUnusedRecordWildcard" = 83475 GhcDiagnosticCode "TcRnUnusedName" = 40910 GhcDiagnosticCode "TcRnQualifiedBinder" = 28329 GhcDiagnosticCode "TcRnInvalidRecordField" = 53822 GhcDiagnosticCode "TcRnTupleTooLarge" = 94803 GhcDiagnosticCode "TcRnCTupleTooLarge" = 89347 GhcDiagnosticCode "TcRnIllegalInferredTyVars" = 54832 GhcDiagnosticCode "TcRnAmbiguousName" = 87543 GhcDiagnosticCode "TcRnBindingNameConflict" = 10498 GhcDiagnosticCode "NonCanonicalMonoid" = 50928 GhcDiagnosticCode "NonCanonicalMonad" = 22705 GhcDiagnosticCode "TcRnImplicitImportOfPrelude" = 20540 GhcDiagnosticCode "TcRnMissingMain" = 67120 GhcDiagnosticCode "TcRnGhciUnliftedBind" = 17999 GhcDiagnosticCode "TcRnGhciMonadLookupFail" = 44990 GhcDiagnosticCode "TcRnArityMismatch" = 27346 GhcDiagnosticCode "TcRnSimplifiableConstraint" = 62412 GhcDiagnosticCode "TcRnIllegalQuasiQuotes" = 77343 GhcDiagnosticCode "TcRnImplicitRhsQuantification" = 16382 GhcDiagnosticCode "TcRnBadTyConTelescope" = 87279 GhcDiagnosticCode "TcRnPatersonCondFailure" = 22979 GhcDiagnosticCode "TcRnDeprecatedInvisTyArgInConPat" = 69797 -- TcRnTypeApplicationsDisabled GhcDiagnosticCode "TypeApplication" = 23482 GhcDiagnosticCode "TypeApplicationInPattern" = 17916 -- PatSynInvalidRhsReason GhcDiagnosticCode "PatSynNotInvertible" = 69317 GhcDiagnosticCode "PatSynUnboundVar" = 28572 -- TcRnBadFieldAnnotation/BadFieldAnnotationReason GhcDiagnosticCode "LazyFieldsDisabled" = 81601 GhcDiagnosticCode "UnpackWithoutStrictness" = 10107 GhcDiagnosticCode "BackpackUnpackAbstractType" = 40091 -- TcRnRoleValidationFailed/RoleInferenceFailedReason GhcDiagnosticCode "TyVarRoleMismatch" = 22221 GhcDiagnosticCode "TyVarMissingInEnv" = 99991 GhcDiagnosticCode "BadCoercionRole" = 92834 -- TcRnClassExtensionDisabled/DisabledClassExtension GhcDiagnosticCode "MultiParamDisabled" = 28349 GhcDiagnosticCode "FunDepsDisabled" = 15708 GhcDiagnosticCode "ConstrainedClassMethodsDisabled" = 25079 -- TcRnTyFamsDisabled/TyFamsDisabledReason GhcDiagnosticCode "TyFamsDisabledFamily" = 39191 GhcDiagnosticCode "TyFamsDisabledInstance" = 06206 GhcDiagnosticCode "TcRnPrecedenceParsingError" = 88747 GhcDiagnosticCode "TcRnSectionPrecedenceError" = 46878 -- HsigShapeMismatchReason GhcDiagnosticCode "HsigShapeSortMismatch" = 93008 GhcDiagnosticCode "HsigShapeNotUnifiable" = 93009 -- Invisible binders GhcDiagnosticCode "TcRnIllegalInvisTyVarBndr" = 58589 GhcDiagnosticCode "TcRnInvalidInvisTyVarBndr" = 57916 GhcDiagnosticCode "TcRnInvisBndrWithoutSig" = 92337 -- IllegalNewtypeReason GhcDiagnosticCode "DoesNotHaveSingleField" = 23517 GhcDiagnosticCode "IsNonLinear" = 38291 GhcDiagnosticCode "IsGADT" = 89498 GhcDiagnosticCode "HasConstructorContext" = 17440 GhcDiagnosticCode "HasExistentialTyVar" = 07525 GhcDiagnosticCode "HasStrictnessAnnotation" = 04049 -- TcRnBadRecordUpdate GhcDiagnosticCode "NoConstructorHasAllFields" = 14392 GhcDiagnosticCode "MultiplePossibleParents" = 99339 GhcDiagnosticCode "InvalidTyConParent" = 33238 -- BadImport GhcDiagnosticCode "BadImportNotExported" = 61689 GhcDiagnosticCode "BadImportAvailDataCon" = 35373 GhcDiagnosticCode "BadImportNotExportedSubordinates" = 10237 GhcDiagnosticCode "BadImportAvailTyCon" = 56449 GhcDiagnosticCode "BadImportAvailVar" = 12112 -- TcRnPragmaWarning GhcDiagnosticCode "WarningTxt" = 63394 GhcDiagnosticCode "DeprecatedTxt" = 68441 -- TcRnRunSliceFailure/ConversionFail GhcDiagnosticCode "IllegalOccName" = 55017 GhcDiagnosticCode "SumAltArityExceeded" = 68444 GhcDiagnosticCode "IllegalSumAlt" = 63966 GhcDiagnosticCode "IllegalSumArity" = 97721 GhcDiagnosticCode "MalformedType" = 28709 GhcDiagnosticCode "IllegalLastStatement" = 47373 GhcDiagnosticCode "KindSigsOnlyAllowedOnGADTs" = 40746 GhcDiagnosticCode "IllegalDeclaration" = 23882 GhcDiagnosticCode "CannotMixGADTConsWith98Cons" = 24104 GhcDiagnosticCode "EmptyStmtListInDoBlock" = 34949 GhcDiagnosticCode "NonVarInInfixExpr" = 99831 GhcDiagnosticCode "MultiWayIfWithoutAlts" = 63930 GhcDiagnosticCode "CasesExprWithoutAlts" = 91745 GhcDiagnosticCode "ImplicitParamsWithOtherBinds" = 42974 GhcDiagnosticCode "InvalidCCallImpent" = 60220 GhcDiagnosticCode "RecGadtNoCons" = 18816 GhcDiagnosticCode "GadtNoCons" = 38140 GhcDiagnosticCode "InvalidTypeInstanceHeader" = 37056 GhcDiagnosticCode "InvalidTyFamInstLHS" = 78486 GhcDiagnosticCode "InvalidImplicitParamBinding" = 51603 GhcDiagnosticCode "DefaultDataInstDecl" = 39639 GhcDiagnosticCode "FunBindLacksEquations" = 52078 -- TcRnDodgyImports/DodgyImportsReason GhcDiagnosticCode "DodgyImportsEmptyParent" = 99623 -- TcRnImportLookup/ImportLookupReason GhcDiagnosticCode "ImportLookupQualified" = 48795 GhcDiagnosticCode "ImportLookupIllegal" = 14752 GhcDiagnosticCode "ImportLookupAmbiguous" = 92057 -- TcRnUnusedImport/UnusedImportReason GhcDiagnosticCode "UnusedImportNone" = 66111 GhcDiagnosticCode "UnusedImportSome" = 38856 -- TcRnIllegalInstance GhcDiagnosticCode "IllegalFamilyApplicationInInstance" = 73138 -- TcRnIllegalClassInstance/IllegalClassInstanceReason GhcDiagnosticCode "IllegalSpecialClassInstance" = 97044 GhcDiagnosticCode "IllegalInstanceFailsCoverageCondition" = 21572 -- IllegalInstanceHead GhcDiagnosticCode "InstHeadAbstractClass" = 51758 GhcDiagnosticCode "InstHeadNonClass" = 53946 GhcDiagnosticCode "InstHeadTySynArgs" = 93557 GhcDiagnosticCode "InstHeadNonTyVarArgs" = 48406 GhcDiagnosticCode "InstHeadMultiParam" = 91901 -- IllegalHasFieldInstance GhcDiagnosticCode "IllegalHasFieldInstanceNotATyCon" = 88994 GhcDiagnosticCode "IllegalHasFieldInstanceFamilyTyCon" = 70743 GhcDiagnosticCode "IllegalHasFieldInstanceTyConHasFields" = 43406 GhcDiagnosticCode "IllegalHasFieldInstanceTyConHasField" = 30836 -- TcRnIllegalFamilyInstance/IllegalFamilyInstanceReason GhcDiagnosticCode "NotAFamilyTyCon" = 06204 GhcDiagnosticCode "NotAnOpenFamilyTyCon" = 06207 GhcDiagnosticCode "FamilyCategoryMismatch" = 52347 GhcDiagnosticCode "FamilyArityMismatch" = 12985 GhcDiagnosticCode "TyFamNameMismatch" = 88221 GhcDiagnosticCode "FamInstRHSOutOfScopeTyVars" = 53634 GhcDiagnosticCode "FamInstLHSUnusedBoundTyVars" = 30337 -- InvalidAssocInstance GhcDiagnosticCode "AssocInstanceMissing" = 08585 GhcDiagnosticCode "AssocInstanceNotInAClass" = 06205 GhcDiagnosticCode "AssocNotInThisClass" = 38351 GhcDiagnosticCode "AssocNoClassTyVar" = 55912 GhcDiagnosticCode "AssocTyVarsDontMatch" = 95424 -- InvalidAssocDefault GhcDiagnosticCode "AssocDefaultNotAssoc" = 78822 GhcDiagnosticCode "AssocMultipleDefaults" = 59128 -- AssocDefaultBadArgs GhcDiagnosticCode "AssocDefaultNonTyVarArg" = 41522 GhcDiagnosticCode "AssocDefaultDuplicateTyVars" = 48178 -- Diagnostic codes for the foreign function interface GhcDiagnosticCode "NotADataType" = 31136 GhcDiagnosticCode "NewtypeDataConNotInScope" = 72317 GhcDiagnosticCode "UnliftedFFITypesNeeded" = 10964 GhcDiagnosticCode "NotABoxedMarshalableTyCon" = 89401 GhcDiagnosticCode "ForeignLabelNotAPtr" = 26070 GhcDiagnosticCode "NotSimpleUnliftedType" = 43510 GhcDiagnosticCode "NotBoxedKindAny" = 64097 GhcDiagnosticCode "ForeignDynNotPtr" = 27555 GhcDiagnosticCode "SafeHaskellMustBeInIO" = 57638 GhcDiagnosticCode "IOResultExpected" = 41843 GhcDiagnosticCode "UnexpectedNestedForall" = 92994 GhcDiagnosticCode "LinearTypesNotAllowed" = 57396 GhcDiagnosticCode "OneArgExpected" = 91490 GhcDiagnosticCode "AtLeastOneArgExpected" = 07641 -- Interface errors GhcDiagnosticCode "BadSourceImport" = 64852 GhcDiagnosticCode "HomeModError" = 58427 GhcDiagnosticCode "DynamicHashMismatchError" = 54709 GhcDiagnosticCode "CouldntFindInFiles" = 94559 GhcDiagnosticCode "GenericMissing" = 87110 GhcDiagnosticCode "MissingPackageFiles" = 22211 GhcDiagnosticCode "MissingPackageWayFiles" = 88719 GhcDiagnosticCode "ModuleSuggestion" = 61948 GhcDiagnosticCode "MultiplePackages" = 45102 GhcDiagnosticCode "NoUnitIdMatching" = 51294 GhcDiagnosticCode "NotAModule" = 35235 GhcDiagnosticCode "Can'tFindNameInInterface" = 83249 GhcDiagnosticCode "CircularImport" = 75429 GhcDiagnosticCode "HiModuleNameMismatchWarn" = 53693 GhcDiagnosticCode "ExceptionOccurred" = 47808 -- Out of scope errors GhcDiagnosticCode "NotInScope" = 76037 GhcDiagnosticCode "NotARecordField" = 22385 GhcDiagnosticCode "NoExactName" = 97784 GhcDiagnosticCode "SameName" = 81573 GhcDiagnosticCode "MissingBinding" = 44432 GhcDiagnosticCode "NoTopLevelBinding" = 10173 GhcDiagnosticCode "UnknownSubordinate" = 54721 GhcDiagnosticCode "NotInScopeTc" = 76329 -- Diagnostic codes for deriving GhcDiagnosticCode "DerivErrNotWellKinded" = 62016 GhcDiagnosticCode "DerivErrSafeHaskellGenericInst" = 07214 GhcDiagnosticCode "DerivErrDerivingViaWrongKind" = 63174 GhcDiagnosticCode "DerivErrNoEtaReduce" = 38996 GhcDiagnosticCode "DerivErrBootFileFound" = 30903 GhcDiagnosticCode "DerivErrDataConsNotAllInScope" = 54540 GhcDiagnosticCode "DerivErrGNDUsedOnData" = 10333 GhcDiagnosticCode "DerivErrNullaryClasses" = 04956 GhcDiagnosticCode "DerivErrLastArgMustBeApp" = 28323 GhcDiagnosticCode "DerivErrNoFamilyInstance" = 82614 GhcDiagnosticCode "DerivErrNotStockDeriveable" = 00158 GhcDiagnosticCode "DerivErrHasAssociatedDatatypes" = 34611 GhcDiagnosticCode "DerivErrNewtypeNonDeriveableClass" = 82023 GhcDiagnosticCode "DerivErrCannotEtaReduceEnough" = 26557 GhcDiagnosticCode "DerivErrOnlyAnyClassDeriveable" = 23244 GhcDiagnosticCode "DerivErrNotDeriveable" = 38178 GhcDiagnosticCode "DerivErrNotAClass" = 63388 GhcDiagnosticCode "DerivErrNoConstructors" = 64560 GhcDiagnosticCode "DerivErrLangExtRequired" = 86639 GhcDiagnosticCode "DerivErrDunnoHowToDeriveForType" = 48959 GhcDiagnosticCode "DerivErrMustBeEnumType" = 30750 GhcDiagnosticCode "DerivErrMustHaveExactlyOneConstructor" = 37542 GhcDiagnosticCode "DerivErrMustHaveSomeParameters" = 45539 GhcDiagnosticCode "DerivErrMustNotHaveClassContext" = 16588 GhcDiagnosticCode "DerivErrBadConstructor" = 16437 GhcDiagnosticCode "DerivErrGenerics" = 30367 GhcDiagnosticCode "DerivErrEnumOrProduct" = 58291 -- Diagnostic codes for instance lookup GhcDiagnosticCode "LookupInstErrNotExact" = 10372 GhcDiagnosticCode "LookupInstErrFlexiVar" = 10373 GhcDiagnosticCode "LookupInstErrNotFound" = 10374 -- TcRnEmptyStmtsGroupError/EmptyStatementGroupErrReason GhcDiagnosticCode "EmptyStmtsGroupInParallelComp" = 41242 GhcDiagnosticCode "EmptyStmtsGroupInTransformListComp" = 92693 GhcDiagnosticCode "EmptyStmtsGroupInDoNotation" = 82311 GhcDiagnosticCode "EmptyStmtsGroupInArrowNotation" = 19442 -- HsBoot and Hsig errors GhcDiagnosticCode "MissingBootDefinition" = 63610 GhcDiagnosticCode "MissingBootExport" = 91999 GhcDiagnosticCode "MissingBootInstance" = 79857 GhcDiagnosticCode "BadReexportedBootThing" = 12424 GhcDiagnosticCode "BootMismatchedIdTypes" = 11890 GhcDiagnosticCode "BootMismatchedTyCons" = 15843 -- TH errors GhcDiagnosticCode "TypedTHWithPolyType" = 94642 GhcDiagnosticCode "SplicePolymorphicLocalVar" = 06568 GhcDiagnosticCode "SpliceThrewException" = 87897 GhcDiagnosticCode "InvalidTopDecl" = 52886 GhcDiagnosticCode "NonExactName" = 77923 GhcDiagnosticCode "AddInvalidCorePlugin" = 86463 GhcDiagnosticCode "AddDocToNonLocalDefn" = 67760 GhcDiagnosticCode "FailedToLookupThInstName" = 49530 GhcDiagnosticCode "CannotReifyInstance" = 30384 GhcDiagnosticCode "CannotReifyOutOfScopeThing" = 24922 GhcDiagnosticCode "CannotReifyThingNotInTypeEnv" = 79890 GhcDiagnosticCode "NoRolesAssociatedWithThing" = 65923 GhcDiagnosticCode "CannotRepresentType" = 75721 GhcDiagnosticCode "ReportCustomQuasiError" = 39584 GhcDiagnosticCode "MismatchedSpliceType" = 45108 GhcDiagnosticCode "IllegalTHQuotes" = 62558 GhcDiagnosticCode "IllegalTHSplice" = 26759 GhcDiagnosticCode "NestedTHBrackets" = 59185 GhcDiagnosticCode "AddTopDeclsUnexpectedDeclarationSplice" = 17599 GhcDiagnosticCode "BadImplicitSplice" = 25277 GhcDiagnosticCode "QuotedNameWrongStage" = 57695 GhcDiagnosticCode "IllegalStaticFormInSplice" = 12219 -- Zonker messages GhcDiagnosticCode "ZonkerCannotDefaultConcrete" = 52083 -- Promotion errors GhcDiagnosticCode "ClassPE" = 86934 GhcDiagnosticCode "TyConPE" = 85413 GhcDiagnosticCode "PatSynPE" = 70349 GhcDiagnosticCode "FamDataConPE" = 64578 GhcDiagnosticCode "ConstrainedDataConPE" = 28374 GhcDiagnosticCode "RecDataConPE" = 56753 GhcDiagnosticCode "NoDataKindsDC" = 71015 GhcDiagnosticCode "TermVariablePE" = 45510 GhcDiagnosticCode "TypeVariablePE" = 47557 -- To generate new random numbers: -- https://www.random.org/integers/?num=10&min=1&max=99999&col=1&base=10&format=plain -- -- NB: never remove a return value from this type family! -- We need to ensure uniquess of diagnostic codes across GHC versions, -- and this includes outdated diagnostic codes for errors that GHC -- no longer reports. These are collected below. GhcDiagnosticCode "TcRnIllegalInstanceHeadDecl" = 12222 GhcDiagnosticCode "TcRnNoClassInstHead" = 56538 -- The above two are subsumed by InstHeadNonClass [GHC-53946] GhcDiagnosticCode "TcRnNameByTemplateHaskellQuote" = 40027 GhcDiagnosticCode "TcRnIllegalBindingOfBuiltIn" = 69639 GhcDiagnosticCode "TcRnMixedSelectors" = 40887 GhcDiagnosticCode "TcRnBadBootFamInstDecl" = 06203 GhcDiagnosticCode "TcRnBindInBootFile" = 11247 GhcDiagnosticCode "TcRnUnexpectedTypeSplice" = 39180 GhcDiagnosticCode "PsErrUnexpectedTypeAppInDecl" = 45054 GhcDiagnosticCode "TcRnUnpromotableThing" = 88634 GhcDiagnosticCode "UntouchableVariable" = 34699 {- ********************************************************************* * * Recurring into an argument * * ********************************************************************* -} -- | Some constructors of diagnostic datatypes don't have -- corresponding error codes, because we recur inside them. -- -- For example, we don't have an error code for the -- 'TcRnCannotDeriveInstance' constructor of 'TcRnMessage', -- because we recur into the 'DeriveInstanceErrReason' to obtain -- an error code. -- -- This type family keeps track of such constructors. type ConRecursInto :: Symbol -> Maybe Type type family ConRecursInto con where ---------------------------------- -- Constructors of GhcMessage ConRecursInto "GhcDriverMessage" = 'Just DriverMessage ConRecursInto "GhcPsMessage" = 'Just PsMessage ConRecursInto "GhcTcRnMessage" = 'Just TcRnMessage ConRecursInto "GhcDsMessage" = 'Just DsMessage ConRecursInto "GhcUnknownMessage" = 'Just (UnknownDiagnostic GhcMessageOpts) ---------------------------------- -- Constructors of DriverMessage ConRecursInto "DriverUnknownMessage" = 'Just (UnknownDiagnostic DriverMessageOpts) ConRecursInto "DriverPsHeaderMessage" = 'Just PsMessage ConRecursInto "DriverInterfaceError" = 'Just IfaceMessage ConRecursInto "CantFindErr" = 'Just CantFindInstalled ConRecursInto "CantFindInstalledErr" = 'Just CantFindInstalled ConRecursInto "CantFindInstalled" = 'Just CantFindInstalledReason ConRecursInto "BadIfaceFile" = 'Just ReadInterfaceError ConRecursInto "FailedToLoadDynamicInterface" = 'Just ReadInterfaceError ---------------------------------- -- Constructors of PsMessage ConRecursInto "PsUnknownMessage" = 'Just (UnknownDiagnostic NoDiagnosticOpts) ConRecursInto "PsHeaderMessage" = 'Just PsHeaderMessage ---------------------------------- -- Constructors of TcRnMessage ConRecursInto "TcRnUnknownMessage" = 'Just (UnknownDiagnostic TcRnMessageOpts) -- Recur into TcRnMessageWithInfo to get the underlying TcRnMessage ConRecursInto "TcRnMessageWithInfo" = 'Just TcRnMessageDetailed ConRecursInto "TcRnMessageDetailed" = 'Just TcRnMessage ConRecursInto "TcRnWithHsDocContext" = 'Just TcRnMessage ConRecursInto "TcRnCannotDeriveInstance" = 'Just DeriveInstanceErrReason ConRecursInto "TcRnLookupInstance" = 'Just LookupInstanceErrReason ConRecursInto "TcRnPragmaWarning" = 'Just (WarningTxt GhcRn) ConRecursInto "TcRnNotInScope" = 'Just NotInScopeError ConRecursInto "TcRnIllegalNewtype" = 'Just IllegalNewtypeReason ConRecursInto "TcRnHsigShapeMismatch" = 'Just HsigShapeMismatchReason ConRecursInto "TcRnPatSynInvalidRhs" = 'Just PatSynInvalidRhsReason ConRecursInto "TcRnBadRecordUpdate" = 'Just BadRecordUpdateReason ConRecursInto "TcRnBadFieldAnnotation" = 'Just BadFieldAnnotationReason ConRecursInto "TcRnRoleValidationFailed" = 'Just RoleValidationFailedReason ConRecursInto "TcRnClassExtensionDisabled" = 'Just DisabledClassExtension ConRecursInto "TcRnTyFamsDisabled" = 'Just TyFamsDisabledReason ConRecursInto "TcRnDodgyImports" = 'Just DodgyImportsReason ConRecursInto "DodgyImportsHiding" = 'Just ImportLookupReason ConRecursInto "TcRnImportLookup" = 'Just ImportLookupReason ConRecursInto "TcRnUnusedImport" = 'Just UnusedImportReason ConRecursInto "TcRnNonCanonicalDefinition" = 'Just NonCanonicalDefinition ConRecursInto "TcRnIllegalInstance" = 'Just IllegalInstanceReason ConRecursInto "TcRnTypeApplicationsDisabled" = 'Just TypeApplication -- Illegal instance reasons ConRecursInto "IllegalClassInstance" = 'Just IllegalClassInstanceReason ConRecursInto "IllegalFamilyInstance" = 'Just IllegalFamilyInstanceReason -- Illegal class instance reasons ConRecursInto "IllegalInstanceHead" = 'Just IllegalInstanceHeadReason ConRecursInto "IllegalHasFieldInstance" = 'Just IllegalHasFieldInstance -- Illegal family instance reasons ConRecursInto "InvalidAssoc" = 'Just InvalidAssoc ConRecursInto "InvalidAssocInstance" = 'Just InvalidAssocInstance ConRecursInto "InvalidAssocDefault" = 'Just InvalidAssocDefault ConRecursInto "AssocDefaultBadArgs" = 'Just AssocDefaultBadArgs -- -- TH errors ConRecursInto "TcRnTHError" = 'Just THError ConRecursInto "THSyntaxError" = 'Just THSyntaxError ConRecursInto "THNameError" = 'Just THNameError ConRecursInto "THReifyError" = 'Just THReifyError ConRecursInto "TypedTHError" = 'Just TypedTHError ConRecursInto "THSpliceFailed" = 'Just SpliceFailReason ConRecursInto "RunSpliceFailure" = 'Just RunSpliceFailReason ConRecursInto "ConversionFail" = 'Just ConversionFailReason ConRecursInto "AddTopDeclsError" = 'Just AddTopDeclsError ConRecursInto "AddTopDeclsRunSpliceFailure" = 'Just RunSpliceFailReason -- Interface file errors ConRecursInto "TcRnInterfaceError" = 'Just IfaceMessage ConRecursInto "Can'tFindInterface" = 'Just MissingInterfaceError -- HsBoot and Hsig errors ConRecursInto "TcRnBootMismatch" = 'Just BootMismatch ConRecursInto "MissingBootThing" = 'Just MissingBootThing ConRecursInto "BootMismatch" = 'Just BootMismatchWhat -- Zonker errors ConRecursInto "TcRnZonkerMessage" = 'Just ZonkerMessage ------------------ -- FFI errors ConRecursInto "TcRnIllegalForeignType" = 'Just IllegalForeignTypeReason -- IllegalForeignTypeReason: recur into TypeCannotBeMarshaled for the reason ConRecursInto "TypeCannotBeMarshaled" = 'Just TypeCannotBeMarshaledReason ------------------ -- Solver reports -- Recur inside TcRnSolverReport to get the underlying TcSolverReportMsg ConRecursInto "TcRnSolverReport" = 'Just SolverReportWithCtxt ConRecursInto "SolverReportWithCtxt" = 'Just TcSolverReportMsg ConRecursInto "TcReportWithInfo" = 'Just TcSolverReportMsg -- Recur inside CannotUnifyVariable to get the underlying reason ConRecursInto "CannotUnifyVariable" = 'Just CannotUnifyVariableReason -- Recur inside Mismatch to get the underlying reason ConRecursInto "Mismatch" = 'Just MismatchMsg -- Recur inside empty statements groups to get the underlying statements block ConRecursInto "TcRnEmptyStmtsGroup" = 'Just EmptyStatementGroupErrReason ---------------------------------- -- Constructors of DsMessage ConRecursInto "DsUnknownMessage" = 'Just (UnknownDiagnostic NoDiagnosticOpts) ---------------------------------- -- Constructors of ImportLookupBad ConRecursInto "ImportLookupBad" = 'Just BadImportKind ConRecursInto "TcRnUnpromotableThing" = 'Just PromotionErr ---------------------------------- -- Any other constructors: don't recur, instead directly -- use the constructor name for the error code. ConRecursInto _ = 'Nothing {- ********************************************************************* * * Generics machinery * * ********************************************************************* -} {- Note [Diagnostic codes using generics] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Diagnostic codes are specified at the type-level using the injective type family 'GhcDiagnosticCode'. This ensures uniqueness of diagnostic codes, giving quick feedback (in the form of a type error). Using this type family, we need to obtain corresponding value-level functions, e.g. diagnosticCode :: TcRnMessage -> DiagnosticCode diagnosticCode diag = case diag of TcRnInaccessibleCode {} -> ghcDiagnosticCode 40564 TcRnTypeDoesNotHaveFixedRuntimeRep {} -> ghcDiagnosticCode 18478 TcRnCannotDeriveInstance _ _ _ _ reason -> case reason of DerivErrNotWellKinded {} -> ghcDiagnosticCode 62016 DerivErrNotAClass {} -> ghcDiagnosticCode 63388 ... ... For some constructors, such as 'TcRnInaccessibleCode', we directly get a diagnostic code, using the 'GhcDiagnosticCode' type family. For other constructors, such as 'TcRnCannotDeriveInstance', we instead recur into an argument (in this case 'DeriveInstanceErrReason') to obtain a diagnostic code. To achieve this, we use a variant of the 'typed' lens from 'generic-lens' (we only need a getter, not a setter): - Using GHC.Generics, we obtain the type-level structure of diagnostic types, as sums of products, with extra metadata. - The 'ConRecursInto' type family declares when we should recur into an argument of the constructor instead of using the constructor name itself for the diagnostic code. - To decide whether to recur, in the generic representation, we must look at all factors of a product to see if there is a type we should recur into. We look at the left branch first, and decide whether to recur into it using the HasTypeQ type family. - The two different behaviours are controlled by two main instances (*) and (**). - (*) recurs into a subtype, when we have a type family equation such as: ConRecursInto "TcRnCannotDeriveInstance" = 'Just DeriveInstanceErrReason In this case, for the constructor 'TcRnCannotDeriveInstance', we recur into the type 'DeriveInstanceErrReason'. The overlapping instance (ERR1) provides an error message in case a constructor does not have the type specified by the 'ConRecursInto' type family. - (**) directly uses the constructor name, by using the 'GhcDiagnosticCode' type family. The 'KnownConstructor' context (ERR2) on the instance provides a custom error message in case of a missing diagnostic code, which points GHC contributors to the documentation explaining how to add diagnostic codes for their diagnostics. -} -- | Use the generic representation of a type to retrieve the -- diagnostic code, using the 'GhcDiagnosticCode' type family. -- -- See Note [Diagnostic codes using generics] in GHC.Types.Error.Codes. type GDiagnosticCode :: (Type -> Type) -> Constraint class GDiagnosticCode f where gdiagnosticCode :: f a -> Maybe DiagnosticCode type ConstructorCode :: Symbol -> (Type -> Type) -> Maybe Type -> Constraint class ConstructorCode con f recur where gconstructorCode :: f a -> Maybe DiagnosticCode instance KnownConstructor con => ConstructorCode con f 'Nothing where gconstructorCode _ = Just $ DiagnosticCode "GHC" $ natVal' @(GhcDiagnosticCode con) proxy# -- If we recur into the 'UnknownDiagnostic' existential datatype, -- unwrap the existential and obtain the error code. instance {-# OVERLAPPING #-} ( ConRecursInto con ~ 'Just (UnknownDiagnostic opts) , HasType (UnknownDiagnostic opts) con f ) => ConstructorCode con f ('Just (UnknownDiagnostic opts)) where gconstructorCode diag = case getType @(UnknownDiagnostic opts) @con @f diag of UnknownDiagnostic _ diag -> diagnosticCode diag -- (*) Recursive instance: Recur into the given type. instance ( ConRecursInto con ~ 'Just ty, HasType ty con f , Generic ty, GDiagnosticCode (Rep ty) ) => ConstructorCode con f ('Just ty) where gconstructorCode diag = constructorCode (getType @ty @con @f diag) -- (**) Constructor instance: handle constructors directly. -- -- Obtain the code from the 'GhcDiagnosticCode' -- type family, applied to the name of the constructor. instance (ConstructorCode con f recur, recur ~ ConRecursInto con) => GDiagnosticCode (M1 i ('MetaCons con x y) f) where gdiagnosticCode (M1 x) = gconstructorCode @con @f @recur x -- Handle sum types (the diagnostic types are sums of constructors). instance (GDiagnosticCode f, GDiagnosticCode g) => GDiagnosticCode (f :+: g) where gdiagnosticCode (L1 x) = gdiagnosticCode @f x gdiagnosticCode (R1 y) = gdiagnosticCode @g y -- Discard metadata we don't need. instance GDiagnosticCode f => GDiagnosticCode (M1 i ('MetaData nm mod pkg nt) f) where gdiagnosticCode (M1 x) = gdiagnosticCode @f x -- | Decide whether to pick the left or right branch -- when deciding how to recurse into a product. type family HasTypeQ (ty :: Type) f :: Maybe Type where HasTypeQ typ (M1 _ _ (K1 _ typ)) = 'Just typ HasTypeQ typ (M1 _ _ x) = HasTypeQ typ x HasTypeQ typ (l :*: r) = Alt (HasTypeQ typ l) (HasTypeQ typ r) HasTypeQ typ (l :+: r) = Both (HasTypeQ typ l) (HasTypeQ typ r) HasTypeQ typ (K1 _ _) = 'Nothing HasTypeQ typ U1 = 'Nothing HasTypeQ typ V1 = 'Nothing type family Both (m1 :: Maybe a) (m2 :: Maybe a) :: Maybe a where Both ('Just a) ('Just a) = 'Just a type family Alt (m1 :: Maybe a) (m2 :: Maybe a) :: Maybe a where Alt ('Just a) _ = 'Just a Alt _ b = b type HasType :: Type -> Symbol -> (Type -> Type) -> Constraint class HasType ty orig f where getType :: f a -> ty instance HasType ty orig (M1 i s (K1 x ty)) where getType (M1 (K1 x)) = x instance HasTypeProd ty (HasTypeQ ty f) orig f g => HasType ty orig (f :*: g) where getType = getTypeProd @ty @(HasTypeQ ty f) @orig -- The lr parameter tells us whether to pick the left or right -- branch in a product, and is computed using 'HasTypeQ'. -- -- If it's @Just l@, then we have found the type in the left branch, -- so use that. Otherwise, look in the right branch. class HasTypeProd ty lr orig f g where getTypeProd :: (f :*: g) a -> ty -- Pick the left branch. instance HasType ty orig f => HasTypeProd ty ('Just l) orig f g where getTypeProd (x :*: _) = getType @ty @orig @f x -- Pick the right branch. instance HasType ty orig g => HasTypeProd ty 'Nothing orig f g where getTypeProd (_ :*: y) = getType @ty @orig @g y {- ********************************************************************* * * Custom type errors for diagnostic codes * * ********************************************************************* -} -- (ERR1) Improve error messages for recurring into an argument. instance {-# OVERLAPPABLE #-} TypeError ( 'Text "The constructor '" ':<>: 'Text orig ':<>: 'Text "'" ':$$: 'Text "does not have any argument of type '" ':<>: 'ShowType ty ':<>: 'Text "'." ':$$: 'Text "" ':$$: 'Text "This is likely due to an incorrect type family equation:" ':$$: 'Text " ConRecursInto \"" ':<>: 'Text orig ':<>: 'Text "\" = " ':<>: 'ShowType ty ) => HasType ty orig f where getType = panic "getType: unreachable" -- (ERR2) Improve error messages for missing 'GhcDiagnosticCode' equations. type KnownConstructor :: Symbol -> Constraint type family KnownConstructor con where KnownConstructor con = KnownNatOrErr ( TypeError ( 'Text "Missing diagnostic code for constructor " ':<>: 'Text "'" ':<>: 'Text con ':<>: 'Text "'." ':$$: 'Text "" ':$$: 'Text "Note [Diagnostic codes] in GHC.Types.Error.Codes" ':$$: 'Text "contains instructions for adding a new diagnostic code." ) ) (GhcDiagnosticCode con) type KnownNatOrErr :: Constraint -> Nat -> Constraint type KnownNatOrErr err n = (Assert err n, KnownNat n) -- Detecting a stuck type family using a data family. -- See https://blog.csongor.co.uk/report-stuck-families/. type Assert :: Constraint -> k -> Constraint type family Assert err n where Assert _ Dummy = Dummy Assert _ n = () data family Dummy :: k