diff --git a/Cabal-syntax/src/Distribution/Compiler.hs b/Cabal-syntax/src/Distribution/Compiler.hs index 5e0f9e84d77..be86b5dae5a 100644 --- a/Cabal-syntax/src/Distribution/Compiler.hs +++ b/Cabal-syntax/src/Distribution/Compiler.hs @@ -226,6 +226,9 @@ data AbiTag instance Binary AbiTag instance Structured AbiTag +instance NFData AbiTag where + rnf = genericRnf + instance Pretty AbiTag where pretty NoAbiTag = Disp.empty pretty (AbiTag tag) = Disp.text tag diff --git a/Cabal/src/Distribution/Simple/Compiler.hs b/Cabal/src/Distribution/Simple/Compiler.hs index 543ff1e0083..14e2b200c84 100644 --- a/Cabal/src/Distribution/Simple/Compiler.hs +++ b/Cabal/src/Distribution/Simple/Compiler.hs @@ -132,6 +132,9 @@ data Compiler = Compiler instance Binary Compiler instance Structured Compiler +instance NFData Compiler where + rnf = genericRnf + showCompilerId :: Compiler -> String showCompilerId = prettyShow . compilerId @@ -207,6 +210,9 @@ data PackageDBX fp instance Binary fp => Binary (PackageDBX fp) instance Structured fp => Structured (PackageDBX fp) +instance NFData fp => NFData (PackageDBX fp) where + rnf = genericRnf + -- | Parse a PackageDB stack entry -- -- @since 3.7.0.0 @@ -307,6 +313,8 @@ data OptimisationLevel instance Binary OptimisationLevel instance Structured OptimisationLevel +instance NFData OptimisationLevel where + rnf = genericRnf instance Parsec OptimisationLevel where parsec = parsecOptimisationLevel @@ -356,6 +364,9 @@ data DebugInfoLevel instance Binary DebugInfoLevel instance Structured DebugInfoLevel +instance NFData DebugInfoLevel where + rnf = genericRnf + instance Parsec DebugInfoLevel where parsec = parsecDebugInfoLevel @@ -609,6 +620,9 @@ data ProfDetailLevel instance Binary ProfDetailLevel instance Structured ProfDetailLevel +instance NFData ProfDetailLevel where + rnf = genericRnf + instance Parsec ProfDetailLevel where parsec = parsecProfDetailLevel diff --git a/Cabal/src/Distribution/Simple/InstallDirs.hs b/Cabal/src/Distribution/Simple/InstallDirs.hs index 818b9273bfd..246a829a712 100644 --- a/Cabal/src/Distribution/Simple/InstallDirs.hs +++ b/Cabal/src/Distribution/Simple/InstallDirs.hs @@ -111,6 +111,9 @@ data InstallDirs dir = InstallDirs instance Binary dir => Binary (InstallDirs dir) instance Structured dir => Structured (InstallDirs dir) +instance NFData dir => NFData (InstallDirs dir) where + rnf = genericRnf + instance (Semigroup dir, Monoid dir) => Monoid (InstallDirs dir) where mempty = gmempty mappend = (<>) @@ -399,6 +402,9 @@ newtype PathTemplate = PathTemplate [PathComponent] instance Binary PathTemplate instance Structured PathTemplate +instance NFData PathTemplate where + rnf = genericRnf + type PathTemplateEnv = [(PathTemplateVariable, PathTemplate)] -- | Convert a 'FilePath' to a 'PathTemplate' including any template vars. diff --git a/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs b/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs index a65c706af20..9031a06532f 100644 --- a/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs +++ b/Cabal/src/Distribution/Simple/InstallDirs/Internal.hs @@ -16,6 +16,9 @@ data PathComponent instance Binary PathComponent instance Structured PathComponent +instance NFData PathComponent where + rnf = genericRnf + data PathTemplateVariable = -- | The @$prefix@ path variable PrefixVar @@ -69,6 +72,9 @@ data PathTemplateVariable instance Binary PathTemplateVariable instance Structured PathTemplateVariable +instance NFData PathTemplateVariable where + rnf = genericRnf + instance Show PathTemplateVariable where show PrefixVar = "prefix" show LibNameVar = "libname" diff --git a/Cabal/src/Distribution/Simple/Setup/Haddock.hs b/Cabal/src/Distribution/Simple/Setup/Haddock.hs index 4e0ed58e1da..662c24aad91 100644 --- a/Cabal/src/Distribution/Simple/Setup/Haddock.hs +++ b/Cabal/src/Distribution/Simple/Setup/Haddock.hs @@ -77,6 +77,9 @@ data HaddockTarget = ForHackage | ForDevelopment deriving (Eq, Show, Generic) instance Binary HaddockTarget instance Structured HaddockTarget +instance NFData HaddockTarget where + rnf = genericRnf + instance Pretty HaddockTarget where pretty ForHackage = Disp.text "for-hackage" pretty ForDevelopment = Disp.text "for-development" diff --git a/Cabal/src/Distribution/Types/ParStrat.hs b/Cabal/src/Distribution/Types/ParStrat.hs index 59d8beb3889..25c4a4df30a 100644 --- a/Cabal/src/Distribution/Types/ParStrat.hs +++ b/Cabal/src/Distribution/Types/ParStrat.hs @@ -10,6 +10,11 @@ data ParStratX sem Serial deriving (Show) +instance NFData sem => NFData (ParStratX sem) where + rnf (NumJobs m) = rnf m + rnf (UseSem s) = rnf s + rnf Serial = () + -- | Used by Cabal to indicate that we want to use this specific semaphore (created by cabal-install) type ParStrat = ParStratX String diff --git a/Cabal/src/Distribution/Utils/NubList.hs b/Cabal/src/Distribution/Utils/NubList.hs index 09da19aa5ae..233c53ccb25 100644 --- a/Cabal/src/Distribution/Utils/NubList.hs +++ b/Cabal/src/Distribution/Utils/NubList.hs @@ -75,6 +75,9 @@ instance (Ord a, Binary a) => Binary (NubList a) where instance Structured a => Structured (NubList a) +instance (Ord a, NFData a) => NFData (NubList a) where + rnf (NubList xs) = rnf xs + -- | NubListR : A right-biased version of 'NubList'. That is @toNubListR -- ["-XNoFoo", "-XFoo", "-XNoFoo"]@ will result in @["-XFoo", "-XNoFoo"]@, -- unlike the normal 'NubList', which is left-biased. Built on top of diff --git a/Cabal/src/Distribution/Verbosity.hs b/Cabal/src/Distribution/Verbosity.hs index c81c6dd8630..71dc284bf2d 100644 --- a/Cabal/src/Distribution/Verbosity.hs +++ b/Cabal/src/Distribution/Verbosity.hs @@ -113,6 +113,9 @@ instance Bounded Verbosity where instance Binary Verbosity instance Structured Verbosity +instance NFData Verbosity where + rnf = genericRnf + -- | In 'silent' mode, we should not print /anything/ unless an error occurs. silent :: Verbosity silent = mkVerbosity Silent diff --git a/Cabal/src/Distribution/Verbosity/Internal.hs b/Cabal/src/Distribution/Verbosity/Internal.hs index 9d851f59f07..c2bbd3e0019 100644 --- a/Cabal/src/Distribution/Verbosity/Internal.hs +++ b/Cabal/src/Distribution/Verbosity/Internal.hs @@ -14,6 +14,9 @@ data VerbosityLevel = Silent | Normal | Verbose | Deafening instance Binary VerbosityLevel instance Structured VerbosityLevel +instance NFData VerbosityLevel where + rnf = genericRnf + data VerbosityFlag = VCallStack | VCallSite @@ -27,3 +30,6 @@ data VerbosityFlag instance Binary VerbosityFlag instance Structured VerbosityFlag + +instance NFData VerbosityFlag where + rnf = genericRnf diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs b/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs index 0deb786959b..6a2d9515f62 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs @@ -65,6 +65,9 @@ data ConstraintSource = instance Binary ConstraintSource instance Structured ConstraintSource +instance NFData ConstraintSource where + rnf = genericRnf + -- | Description of a 'ConstraintSource'. showConstraintSource :: ConstraintSource -> String showConstraintSource = prettyShow diff --git a/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs b/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs index 457cd6c9b13..32957c98c24 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/OptionalStanza.hs @@ -59,6 +59,9 @@ enableStanzas optionalStanzas = ComponentRequestedSpec instance Binary OptionalStanza instance Structured OptionalStanza +instance NFData OptionalStanza where + rnf = genericRnf + ------------------------------------------------------------------------------- -- OptionalStanzaSet ------------------------------------------------------------------------------- diff --git a/cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs b/cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs index 06c5ae169fa..461eeab2a13 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/PackageConstraint.hs @@ -98,6 +98,9 @@ data PackageProperty instance Binary PackageProperty instance Structured PackageProperty +instance NFData PackageProperty where + rnf = genericRnf + instance Pretty PackageProperty where pretty (PackagePropertyVersion verrange) = pretty verrange pretty PackagePropertyInstalled = Disp.text "installed" diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs index 257ba808aaa..bd3c5424ee3 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs @@ -119,6 +119,9 @@ instance Ord ProjectConfigPath where instance Binary ProjectConfigPath instance Structured ProjectConfigPath +instance NFData ProjectConfigPath where + rnf = genericRnf + -- | Renders the path like this; -- -- >D.config diff --git a/cabal-install-solver/src/Distribution/Solver/Types/Settings.hs b/cabal-install-solver/src/Distribution/Solver/Types/Settings.hs index 306c0c12185..358e5e97178 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/Settings.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/Settings.hs @@ -95,6 +95,39 @@ instance Structured AllowBootLibInstalls instance Structured OnlyConstrained instance Structured SolveExecutables +instance NFData ReorderGoals where + rnf = genericRnf + +instance NFData CountConflicts where + rnf = genericRnf + +instance NFData FineGrainedConflicts where + rnf = genericRnf + +instance NFData IndependentGoals where + rnf = genericRnf + +instance NFData PreferOldest where + rnf = genericRnf + +instance NFData MinimizeConflictSet where + rnf = genericRnf + +instance NFData AvoidReinstalls where + rnf = genericRnf + +instance NFData ShadowPkgs where + rnf = genericRnf + +instance NFData StrongFlags where + rnf = genericRnf + +instance NFData AllowBootLibInstalls where + rnf = genericRnf + +instance NFData OnlyConstrained where + rnf = genericRnf + instance Pretty OnlyConstrained where pretty OnlyConstrainedAll = PP.text "all" pretty OnlyConstrainedNone = PP.text "none" diff --git a/cabal-install/src/Distribution/Client/BuildReports/Types.hs b/cabal-install/src/Distribution/Client/BuildReports/Types.hs index 576d058c4bf..015d0ced4c3 100644 --- a/cabal-install/src/Distribution/Client/BuildReports/Types.hs +++ b/cabal-install/src/Distribution/Client/BuildReports/Types.hs @@ -41,6 +41,9 @@ data ReportLevel = NoReports | AnonymousReports | DetailedReports instance Binary ReportLevel instance Structured ReportLevel +instance NFData ReportLevel where + rnf = genericRnf + instance Pretty ReportLevel where pretty NoReports = Disp.text "none" pretty AnonymousReports = Disp.text "anonymous" diff --git a/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs b/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs index 32077fe7b99..9270a0da410 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs +++ b/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs @@ -63,6 +63,9 @@ instance Semigroup ClientInstallFlags where instance Binary ClientInstallFlags instance Structured ClientInstallFlags +instance NFData ClientInstallFlags where + rnf = genericRnf + defaultClientInstallFlags :: ClientInstallFlags defaultClientInstallFlags = ClientInstallFlags diff --git a/cabal-install/src/Distribution/Client/Dependency/Types.hs b/cabal-install/src/Distribution/Client/Dependency/Types.hs index 78f97662008..68f6602a55d 100644 --- a/cabal-install/src/Distribution/Client/Dependency/Types.hs +++ b/cabal-install/src/Distribution/Client/Dependency/Types.hs @@ -27,6 +27,9 @@ instance Binary Solver instance Structured PreSolver instance Structured Solver +instance NFData PreSolver where + rnf = genericRnf + instance Pretty PreSolver where pretty AlwaysModular = text "modular" diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index 220834a331c..d68c1282a98 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -355,6 +355,25 @@ instance Structured ProjectConfigProvenance instance Structured PackageConfig instance Structured ProjectFileParser +instance NFData ProjectConfigToParse where + rnf (ProjectConfigToParse bs) = rnf bs + +instance NFData ProjectConfig where + rnf = genericRnf + +instance NFData ProjectConfigBuildOnly where + rnf = genericRnf + +instance NFData ProjectConfigShared where + rnf = genericRnf + +instance NFData ProjectConfigProvenance where + rnf Implicit = () + rnf (Explicit path) = rnf path + +instance NFData PackageConfig where + rnf = genericRnf + -- | Newtype wrapper for 'Map' that provides a 'Monoid' instance that takes -- the last value rather than the first value for overlapping keys. newtype MapLast k v = MapLast {getMapLast :: Map k v} @@ -362,6 +381,9 @@ newtype MapLast k v = MapLast {getMapLast :: Map k v} instance (Structured k, Structured v) => Structured (MapLast k v) +instance (NFData k, NFData v) => NFData (MapLast k v) where + rnf = genericRnf + instance Ord k => Monoid (MapLast k v) where mempty = MapLast Map.empty mappend = (<>) @@ -378,6 +400,9 @@ newtype MapMappend k v = MapMappend {getMapMappend :: Map k v} instance (Structured k, Structured v) => Structured (MapMappend k v) +instance (NFData k, NFData v) => NFData (MapMappend k v) where + rnf = genericRnf + instance (Semigroup v, Ord k) => Monoid (MapMappend k v) where mempty = MapMappend Map.empty mappend = (<>) @@ -464,6 +489,9 @@ data SolverSettings = SolverSettings instance Binary SolverSettings instance Structured SolverSettings +instance NFData SolverSettings where + rnf = genericRnf + -- | Resolved configuration for things that affect how we build and not the -- value of the things we build. The idea is that this is easier to use than -- the raw configuration because in the raw configuration everything is @@ -501,3 +529,7 @@ data BuildTimeSettings = BuildTimeSettings , buildSettingProgPathExtra :: [FilePath] , buildSettingHaddockOpen :: Bool } + deriving (Generic) + +instance NFData BuildTimeSettings where + rnf = genericRnf diff --git a/cabal-install/src/Distribution/Client/Targets.hs b/cabal-install/src/Distribution/Client/Targets.hs index bfa94b0da80..0227997ffe8 100644 --- a/cabal-install/src/Distribution/Client/Targets.hs +++ b/cabal-install/src/Distribution/Client/Targets.hs @@ -611,6 +611,9 @@ data UserQualifier instance Binary UserQualifier instance Structured UserQualifier +instance NFData UserQualifier where + rnf = genericRnf + -- | Version of 'ConstraintScope' that a user may specify on the -- command line. data UserConstraintScope @@ -625,6 +628,9 @@ data UserConstraintScope instance Binary UserConstraintScope instance Structured UserConstraintScope +instance NFData UserConstraintScope where + rnf = genericRnf + fromUserQualifier :: UserQualifier -> Qualifier fromUserQualifier UserQualToplevel = QualToplevel fromUserQualifier (UserQualSetup name) = QualSetup name @@ -645,6 +651,9 @@ data UserConstraint instance Binary UserConstraint instance Structured UserConstraint +instance NFData UserConstraint where + rnf = genericRnf + userConstraintPackageName :: UserConstraint -> PackageName userConstraintPackageName (UserConstraint scope _) = scopePN scope where diff --git a/cabal-install/src/Distribution/Client/Types/AllowNewer.hs b/cabal-install/src/Distribution/Client/Types/AllowNewer.hs index 53c55ef08b6..e5fff2b7838 100644 --- a/cabal-install/src/Distribution/Client/Types/AllowNewer.hs +++ b/cabal-install/src/Distribution/Client/Types/AllowNewer.hs @@ -203,6 +203,27 @@ instance Structured RelaxedDep instance Structured AllowNewer instance Structured AllowOlder +instance NFData RelaxDeps where + rnf = genericRnf + +instance NFData RelaxDepMod where + rnf = genericRnf + +instance NFData RelaxDepScope where + rnf = genericRnf + +instance NFData RelaxDepSubject where + rnf = genericRnf + +instance NFData RelaxedDep where + rnf = genericRnf + +instance NFData AllowNewer where + rnf = genericRnf + +instance NFData AllowOlder where + rnf = genericRnf + -- | Return 'True' if 'RelaxDeps' specifies a non-empty set of relaxations -- -- Equivalent to @isRelaxDeps = (/= 'mempty')@ diff --git a/cabal-install/src/Distribution/Client/Types/InstallMethod.hs b/cabal-install/src/Distribution/Client/Types/InstallMethod.hs index b7b24aecf08..7ef5c382a4c 100644 --- a/cabal-install/src/Distribution/Client/Types/InstallMethod.hs +++ b/cabal-install/src/Distribution/Client/Types/InstallMethod.hs @@ -16,6 +16,9 @@ data InstallMethod instance Binary InstallMethod instance Structured InstallMethod +instance NFData InstallMethod where + rnf = genericRnf + -- | Last instance Semigroup InstallMethod where _ <> x = x diff --git a/cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs b/cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs index e992224243a..770b2b739e5 100644 --- a/cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs +++ b/cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs @@ -17,6 +17,9 @@ data OverwritePolicy instance Binary OverwritePolicy instance Structured OverwritePolicy +instance NFData OverwritePolicy where + rnf = genericRnf + instance Parsec OverwritePolicy where parsec = do name <- P.munch1 isAlpha diff --git a/cabal-install/src/Distribution/Client/Types/Repo.hs b/cabal-install/src/Distribution/Client/Types/Repo.hs index d3caac872db..a304623a5af 100644 --- a/cabal-install/src/Distribution/Client/Types/Repo.hs +++ b/cabal-install/src/Distribution/Client/Types/Repo.hs @@ -76,6 +76,9 @@ data RemoteRepo = RemoteRepo instance Binary RemoteRepo instance Structured RemoteRepo +instance NFData RemoteRepo where + rnf = genericRnf + instance Pretty RemoteRepo where pretty r = pretty (remoteRepoName r) @@ -136,6 +139,9 @@ data LocalRepo = LocalRepo instance Binary LocalRepo instance Structured LocalRepo +instance NFData LocalRepo where + rnf = genericRnf + -- | Note: doesn't parse 'localRepoSharedCache' field. instance Parsec LocalRepo where parsec = do @@ -204,6 +210,9 @@ data Repo instance Binary Repo instance Structured Repo +instance NFData Repo where + rnf = genericRnf + -- | Check if this is a remote repo isRepoRemote :: Repo -> Bool isRepoRemote RepoLocalNoIndex{} = False diff --git a/cabal-install/src/Distribution/Client/Types/SourceRepo.hs b/cabal-install/src/Distribution/Client/Types/SourceRepo.hs index 05449d1887b..56bd6c6bbf3 100644 --- a/cabal-install/src/Distribution/Client/Types/SourceRepo.hs +++ b/cabal-install/src/Distribution/Client/Types/SourceRepo.hs @@ -42,6 +42,9 @@ deriving instance Show (f FilePath) => Show (SourceRepositoryPackage f) deriving instance Binary (f FilePath) => Binary (SourceRepositoryPackage f) deriving instance (Typeable f, Structured (f FilePath)) => Structured (SourceRepositoryPackage f) +instance (Typeable f, NFData (f FilePath)) => NFData (SourceRepositoryPackage f) where + rnf = genericRnf + -- | Read from @cabal.project@ type SourceRepoList = SourceRepositoryPackage [] diff --git a/cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs b/cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs index 6db210025ee..ba81563992c 100644 --- a/cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs +++ b/cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs @@ -22,6 +22,9 @@ data WriteGhcEnvironmentFilesPolicy instance Binary WriteGhcEnvironmentFilesPolicy instance Structured WriteGhcEnvironmentFilesPolicy +instance NFData WriteGhcEnvironmentFilesPolicy where + rnf = genericRnf + instance Parsec WriteGhcEnvironmentFilesPolicy where parsec = do token <- parsecToken diff --git a/changelog.d/pr-11097 b/changelog.d/pr-11097 new file mode 100644 index 00000000000..6d9190d2199 --- /dev/null +++ b/changelog.d/pr-11097 @@ -0,0 +1,7 @@ +--- +synopsis: Add NFData instances +packages: [Cabal, cabal-install, cabal-install-solver, Cabal-syntax] +prs: 11097 +--- + +Add NFData instances necessary for HLS plugins to function.