ghcup 0.2.6.1 → 0.2.6.2
raw patch · 16 files changed
+341/−42 lines, 16 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ GHCup.Command.Fixup: fixupSymlinks :: (HasLog env, MonadReader env m, HasDirs env, HasPlatformReq env, HasGHCupInfo env, MonadIOish m) => Excepts '[MalformedInstallInfo, ParseError] m ()
+ GHCup.Command.Install.LowLevel: fixMajorMinorSymlink :: (HasLog env, MonadReader env m, HasDirs env, HasPlatformReq env, MonadIOish m) => Tool -> Maybe Text -> (Int, Int) -> Excepts '[MalformedInstallInfo, ParseError] m ()
+ GHCup.Command.Install.LowLevel: symlinkMajorMinor :: (HasLog env, MonadReader env m, HasDirs env, MonadIOish m) => InstallDirResolved -> [SymlinkSpec [Either Char Version]] -> InstallDirResolved -> Tool -> TargetVersion -> Excepts '[MalformedInstallInfo] m ()
+ GHCup.Command.List: ListTag :: Bool -> Tag -> ListCriteria
+ GHCup.Command.List: ListTarget :: Bool -> Maybe Text -> ListCriteria
+ GHCup.Query.DB: getSymlinkSpecPortable' :: (MonadReader env m, HasDirs env, HasPlatformReq env, HasLog env, MonadIOish m) => Tool -> TargetVersion -> Excepts '[ParseError] m [SymlinkSpec [Either Char Version]]
- GHCup.Types.Optics: isConfigure :: forall a_i1YYW. Lens' (InstallationSpecGen a_i1YYW) (Maybe ConfigSpec)
+ GHCup.Types.Optics: isConfigure :: forall a_i1YZh. Lens' (InstallationSpecGen a_i1YZh) (Maybe ConfigSpec)
- GHCup.Types.Optics: isDataRules :: forall a_i1YYW. Lens' (InstallationSpecGen a_i1YYW) [InstallFileRule]
+ GHCup.Types.Optics: isDataRules :: forall a_i1YZh. Lens' (InstallationSpecGen a_i1YZh) [InstallFileRule]
- GHCup.Types.Optics: isExeRules :: forall a_i1YYW. Lens' (InstallationSpecGen a_i1YYW) [InstallFileRule]
+ GHCup.Types.Optics: isExeRules :: forall a_i1YZh. Lens' (InstallationSpecGen a_i1YZh) [InstallFileRule]
- GHCup.Types.Optics: isExeSymLinked :: forall a_a1YYY a_i1YYW. Lens (InstallationSpecGen a_i1YYW) (InstallationSpecGen a_a1YYY) [a_i1YYW] [a_a1YYY]
+ GHCup.Types.Optics: isExeSymLinked :: forall a_a1YZj a_i1YZh. Lens (InstallationSpecGen a_i1YZh) (InstallationSpecGen a_a1YZj) [a_i1YZh] [a_a1YZj]
- GHCup.Types.Optics: isMake :: forall a_i1YYW. Lens' (InstallationSpecGen a_i1YYW) (Maybe MakeSpec)
+ GHCup.Types.Optics: isMake :: forall a_i1YZh. Lens' (InstallationSpecGen a_i1YZh) (Maybe MakeSpec)
- GHCup.Types.Optics: isPreserveMtimes :: forall a_i1YYW. Lens' (InstallationSpecGen a_i1YYW) Bool
+ GHCup.Types.Optics: isPreserveMtimes :: forall a_i1YZh. Lens' (InstallationSpecGen a_i1YZh) Bool
Files
- CHANGELOG.md +6/−0
- app/ghcup/Main.hs +1/−0
- ghcup.cabal +4/−2
- lib-opt/GHCup/OptParse.hs +9/−0
- lib-opt/GHCup/OptParse/Fixup.hs +127/−0
- lib-opt/GHCup/OptParse/List.hs +2/−2
- lib-opt/GHCup/OptParse/TUI.hs +2/−2
- lib/GHCup/Command/Fixup.hs +46/−0
- lib/GHCup/Command/Install/LowLevel.hs +66/−9
- lib/GHCup/Command/List.hs +4/−0
- lib/GHCup/Command/Rm.hs +5/−0
- lib/GHCup/Input/Parsers.hs +35/−10
- lib/GHCup/Query/DB.hs +24/−0
- scripts/bootstrap/bootstrap-haskell +1/−1
- test/optparse-test/InstallTest.hs +5/−8
- test/optparse-test/SetTest.hs +4/−8
CHANGELOG.md view
@@ -1,5 +1,11 @@ # Version history for ghcup +## 0.2.6.2 -- 2026-06-16++* Fix X.Y symlinks wrt [#1365](https://github.com/haskell/ghcup-hs/issues/1365)+* Provide a way to filter by target when invoking `ghcup list` [#1362](https://github.com/haskell/ghcup-hs/issues/1362)+* Introduce `ghcup fixup` [#1369](https://github.com/haskell/ghcup-hs/issues/1369)+ ## 0.2.6.1 -- 2026-06-13 ### Bugfixes affecting VSCode
app/ghcup/Main.hs view
@@ -332,6 +332,7 @@ Run runCommand -> run runCommand settings (getAppState_and_updateCheckAction, leanAppstate) PrintAppErrors -> putStrLn allHFError >> pure ExitSuccess HealthCheck hcCommands -> hc hcCommands (getAppState_and_updateCheckAction, leanAppstate)+ Fixup fixupCommand -> fixup fixupCommand (getAppState_and_updateCheckAction, leanAppstate) #if defined(DHALL) Generate gen -> generate gen (getAppState_and_updateCheckAction, leanAppstate) #endif
ghcup.cabal view
@@ -1,9 +1,9 @@ cabal-version: 2.4 name: ghcup-version: 0.2.6.1+version: 0.2.6.2 license: LGPL-3.0-only license-file: LICENSE-copyright: Julian Ospald 2024+copyright: Julian Ospald 2026 maintainer: hasufell@posteo.de author: Julian Ospald homepage: https://github.com/haskell/ghcup-hs@@ -212,6 +212,7 @@ GHCup.Command.Whereis GHCup.Command.GC GHCup.Command.HealthCheck+ GHCup.Command.Fixup GHCup.Command.Prefetch GHCup.Command.Rm GHCup.Command.Set@@ -355,6 +356,7 @@ GHCup.OptParse.GC GHCup.OptParse.Generate GHCup.OptParse.HealthCheck+ GHCup.OptParse.Fixup GHCup.OptParse.Install GHCup.OptParse.List GHCup.OptParse.Nuke
lib-opt/GHCup/OptParse.hs view
@@ -27,6 +27,7 @@ , module GHCup.OptParse.Generate #endif , module GHCup.OptParse.HealthCheck+ , module GHCup.OptParse.Fixup , module GHCup.OptParse.DebugInfo , module GHCup.OptParse.Nuke , module GHCup.OptParse.ToolRequirements@@ -57,6 +58,7 @@ import GHCup.OptParse.Generate #endif import GHCup.OptParse.HealthCheck+import GHCup.OptParse.Fixup import GHCup.OptParse.DebugInfo import GHCup.OptParse.ToolRequirements import GHCup.OptParse.Nuke@@ -128,6 +130,7 @@ | GC GCOptions | Run RunOptions | HealthCheck HealthCheckCommand+ | Fixup FixupCommand | PrintAppErrors @@ -326,6 +329,12 @@ ( HealthCheck <$> info (hcP <**> helper) (progDesc "Health check ghcup")+ )+ <> command+ "fixup"+ ( Fixup <$>+ info (fixupP <**> helper)+ (progDesc "Fix up issues with installations") ) <> commandGroup "Main commands:" )
+ lib-opt/GHCup/OptParse/Fixup.hs view
@@ -0,0 +1,127 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE RankNTypes #-}++module GHCup.OptParse.Fixup where+++import GHCup.Command.Fixup+import GHCup.Errors+import GHCup.Prelude.Logger+import GHCup.Prelude.String.QQ+import GHCup.Types++#if !MIN_VERSION_base(4,13,0)+import Control.Monad.Fail ( MonadFail )+#endif+import Control.Monad.Reader+import Control.Monad.Trans.Resource+import Data.Functor+import Data.Variant.Excepts+import Options.Applicative hiding ( style, ParseError )+import Prelude hiding ( appendFile )+import System.Exit+import Options.Applicative.Pretty.Shim ( text )+import Control.Exception.Safe (MonadMask)++import qualified Data.Text as T++++++ ----------------+ --[ Commands ]--+ ----------------+++data FixupCommand+ = FixupSymlinks+ deriving (Eq, Show)+++++ ---------------+ --[ Parsers ]--+ ---------------+++fixupP :: Parser FixupCommand+fixupP =+ subparser+ ( command+ "symlinks"+ ( FixupSymlinks+ <$ info+ helper+ ( progDesc "Fix up symlinks in bin/"+ <> footerDoc (Just $ text toolFooter)+ )+ )+ )+ where+ toolFooter :: String+ toolFooter = [s|Discussion:+ Fix up common issues.++Examples:+ ghcup fixup symlinks|]++++++++ ---------------------------+ --[ Effect interpreters ]--+ ---------------------------+++type FixupEffects = '[MalformedInstallInfo, ParseError]+++++ ------------------+ --[ Entrypoint ]--+ ------------------++++fixup :: ( Monad m+ , MonadMask m+ , MonadUnliftIO m+ , MonadFail m+ )+ => FixupCommand+ -> (IO (AppState, IO ()), LeanAppState)+ -> m ExitCode+fixup command' (getAppState', leanAppstate) = run (do+ case command' of+ FixupSymlinks ->+ liftE fixupSymlinks+ ) >>= \case+ (VRight _, up) -> do+ liftIO up+ pure ExitSuccess+ (VLeft e, _) -> do+ runLogger $ logError $ T.pack $ prettyHFError e+ pure $ ExitFailure 27+ where+ runLogger = flip runReaderT leanAppstate+ run action' = do+ (appstate', up) <- liftIO getAppState'+ r <- flip runReaderT appstate'+ . runResourceT+ . runE+ @FixupEffects+ $ action'+ pure (r, up)+
lib-opt/GHCup/OptParse/List.hs view
@@ -95,10 +95,10 @@ (eitherReader criteriaParser) ( short 'c' <> long "show-criteria"- <> metavar "<installed|set|available>"+ <> metavar "<installed|set|available|cross|target=...|tag=...>" <> help "Apply filtering criteria, prefix with + or -" <> completer (listCompleter- [ "+installed", "+set", "+available", "-installed", "-set", "-available"])+ [ "+installed", "+set", "+available", "+cross", "-installed", "-set", "-available", "-cross"]) ) ) <*> optional
lib-opt/GHCup/OptParse/TUI.hs view
@@ -54,10 +54,10 @@ (eitherReader criteriaParser) ( short 'c' <> long "show-criteria"- <> metavar "<installed|set|available>"+ <> metavar "<installed|set|available|cross|target=...|tag=...>" <> help "Apply filtering criteria, prefix with + or -" <> completer (listCompleter- [ "+installed", "+set", "+available", "-installed", "-set", "-available"])+ [ "+installed", "+set", "+available", "+cross", "-installed", "-set", "-available", "-cross"]) ) ) <*> optional
+ lib/GHCup/Command/Fixup.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}++module GHCup.Command.Fixup where++import GHCup.Command.Install.LowLevel+import GHCup.Command.List+import GHCup.Errors+import GHCup.Prelude+import GHCup.Query.DB+import GHCup.Query.GHCupDirs+import GHCup.Types+import GHCup.Types.Optics++import Control.Monad ( forM_, when )+import Control.Monad.Reader ( MonadReader )+import Data.Variant.Excepts+import Text.PrettyPrint.HughesPJClass ( prettyShow )++import qualified Data.Map.Strict as M+import qualified Data.Text as T+++fixupSymlinks ::+ ( HasLog env+ , MonadReader env m+ , HasDirs env+ , HasPlatformReq env+ , HasGHCupInfo env+ , MonadIOish m+ )+ => Excepts '[MalformedInstallInfo, ParseError] m ()+fixupSymlinks = do+ Dirs{..} <- getDirs+ tlr <- liftE $ listVersions Nothing [ListInstalled True] ShowNone False NShowAll (Nothing, Nothing)++ forM_ (M.toList $ M.filterWithKey (\t _ -> t /= ghcup) tlr) $ \(tool, (_mtd, lrs)) ->+ forM_ lrs $ \ListResult{..} -> do+ let tver = TargetVersion lCross lVer+ logInfo $ "Fixing symlinks for " <> T.pack (prettyShow tool) <> " version " <> T.pack (prettyShow tver)+ idr <- toolInstallDestination tool tver+ rawSpec <- liftE $ getSymlinkSpecPortable' tool tver+ when (null rawSpec) $ logWarn $ "Could not find symlink specification in the DB. Consider reinstalling " <> T.pack (prettyShow tool) <> "-" <> T.pack (prettyShow tver)+ liftE $ symlinkBinaries (GHCupDir idr) rawSpec (GHCupBinDir binDir) tool tver+
lib/GHCup/Command/Install/LowLevel.hs view
@@ -41,6 +41,7 @@ import qualified Data.Text as T import qualified System.FilePath.Posix as Posix import qualified Text.Megaparsec as MP+import Safe (maximumMay) @@ -271,15 +272,12 @@ -> TargetVersion -> Excepts '[MalformedInstallInfo] m () symlinkBinaries (IsolateDirResolved _) _ _ _ _ = pure ()-symlinkBinaries (fromInstallDir -> toolDir) rawSpec bindir tool tver = do+symlinkBinaries idr@(fromInstallDir -> toolDir) rawSpec bindir tool tver = do let spec = substituteSpec <$> rawSpec forM_ spec safeSpec pvpSyms <- lift $ getPVPSymlinks' (fromInstallDir bindir) spec toolDir forM_ pvpSyms $ lift . uncurry createLink- case bindir of- IsolateDirResolved d -> linkMajor d- GHCupDir d -> linkMajor (fromGHCupPath d)- GHCupBinDir d -> whenM (lift isLatest) $ linkMajor d+ symlinkMajorMinor idr rawSpec bindir tool tver where safeSpec SymlinkSpec{..} = do checkSafePath _slTarget@@ -290,12 +288,71 @@ checkSafeFilename fp = unless (safeFilename fp) $ throwE (MalformedInstallInfo "'..' or '.' are not allowed and filepath must have no path separators") ++-- | For the given X.Y version, we+-- find the latest X.Y.Z and create symlinks.+fixMajorMinorSymlink ::+ ( HasLog env+ , MonadReader env m+ , HasDirs env -- createLink needs it on windows+ , HasPlatformReq env+ , MonadIOish m+ )+ => Tool+ -> Maybe T.Text+ -> (Int, Int)+ -> Excepts '[MalformedInstallInfo, ParseError] m ()+fixMajorMinorSymlink tool mtarget majorMinor = do+ Dirs {..} <- getDirs+ vers <- lift $ getInstalledVersions tool mtarget+ let filterMajor = filter (\(getMajorMinorV . _vrVersion -> mj) -> mj == Just majorMinor)+ let mLatestMajorVer = fmap _vrVersion $ maximumMay $ filterMajor vers+ case mLatestMajorVer of+ Nothing -> pure ()+ Just latestMajorVer -> do+ let tver = TargetVersion mtarget latestMajorVer+ idr <- toolInstallDestination tool tver+ rawSpec <- liftE $ getSymlinkSpecPortable' tool tver+ liftE $ symlinkMajorMinor (GHCupDir idr) rawSpec (GHCupBinDir binDir) tool tver+++-- | Create X.Y major symlinks for the given GHC version, but only+-- if it is the 'latest' version.+--+-- E.g. if we have+-- * ghc-9.8.3+-- * ghc-9.8.4+-- then we want the following symlink:+-- * ghc-9.8 -> ghc-9.8.4+symlinkMajorMinor ::+ ( HasLog env+ , MonadReader env m+ , HasDirs env -- createLink needs it on windows+ , MonadIOish m+ )+ => InstallDirResolved -- ^ base dir of the tool+ -> [SymlinkSpec [Either Char Version]] -- ^ symlink spec+ -> InstallDirResolved -- ^ binary dir+ -> Tool+ -> TargetVersion+ -> Excepts '[MalformedInstallInfo] m ()+symlinkMajorMinor (IsolateDirResolved _) _ _ _ _ = pure ()+symlinkMajorMinor (fromInstallDir -> toolDir) rawSpec bindir tool tver = do+ case bindir of+ IsolateDirResolved d -> linkMajor d+ GHCupDir d -> linkMajor (fromGHCupPath d)+ GHCupBinDir d -> whenM (lift isLatest) $ linkMajor d+ where linkMajor d = do let ver = _tvVersion tver pvpMajorSyms <- liftE $ getPVPMajorSymlinks' d rawSpec ver toolDir forM_ pvpMajorSyms $ lift . uncurry createLink- isLatest = do- vers <- getInstalledVersions tool (_tvTarget tver)- let latestVer = _vrVersion $ maximum vers- pure $ latestVer == _tvVersion tver + isLatest = do+ case getMajorMinorV (_tvVersion tver) of+ Just cMJ -> do+ vers <- getInstalledVersions tool (_tvTarget tver)+ let filterMajor = filter (\(getMajorMinorV . _vrVersion -> mj) -> mj == Just cMJ)+ let latestMajorVer = fmap _vrVersion $ maximumMay $ filterMajor vers+ pure $ latestMajorVer == Just (_tvVersion tver)+ Nothing -> pure False
lib/GHCup/Command/List.hs view
@@ -66,6 +66,8 @@ = ListInstalled Bool | ListSet Bool | ListAvailable Bool+ | ListTarget Bool (Maybe Text)+ | ListTag Bool Tag deriving (Eq, Show) @@ -356,6 +358,8 @@ ListInstalled b -> f b lInstalled ListSet b -> f b lSet ListAvailable b -> f b $ not lNoBindist+ ListTarget b t -> f b (lCross == t)+ ListTag b t -> f b (t `elem` lTag) where f b | b = id
lib/GHCup/Command/Rm.hs view
@@ -40,6 +40,7 @@ import System.IO.Temp import qualified Data.Text as T+import GHCup.Command.Install.LowLevel -- | Remove a tool completely.@@ -143,6 +144,10 @@ | tool == stack -> liftE $ rmStackVer ver' | tool == ghcup -> lift rmGhcup | otherwise -> fail "Could not find installed files... your DB seems corrupted"++ -- now restore the X.Y symlink+ majorMinor <- getMajorMinorV (_tvVersion tver)+ liftE $ fixMajorMinorSymlink tool (_tvTarget tver) majorMinor where rmGHCShareDir = do Dirs {..} <- getDirs
lib/GHCup/Input/Parsers.hs view
@@ -212,6 +212,7 @@ tagEither :: String -> Either String Tag tagEither s' = case ls of "recommended" -> Right Recommended+ "prerelease" -> Right Prerelease "latest" -> Right Latest "latest-prerelease" -> Right LatestPrerelease "latest-nightly" -> Right LatestNightly@@ -279,16 +280,40 @@ where t = T.toLower (T.pack s') criteriaParser :: String -> Either String ListCriteria-criteriaParser s' | t == T.pack "installed" = Right $ ListInstalled True- | t == T.pack "set" = Right $ ListSet True- | t == T.pack "available" = Right $ ListAvailable True- | t == T.pack "+installed" = Right $ ListInstalled True- | t == T.pack "+set" = Right $ ListSet True- | t == T.pack "+available" = Right $ ListAvailable True- | t == T.pack "-installed" = Right $ ListInstalled False- | t == T.pack "-set" = Right $ ListSet False- | t == T.pack "-available" = Right $ ListAvailable False- | otherwise = Left ("Unknown criteria: " <> s')+criteriaParser s' | t == T.pack "installed" = Right $ ListInstalled True+ | t == T.pack "set" = Right $ ListSet True+ | t == T.pack "available" = Right $ ListAvailable True+ | t == T.pack "+installed" = Right $ ListInstalled True+ | t == T.pack "+set" = Right $ ListSet True+ | t == T.pack "+available" = Right $ ListAvailable True+ | t == T.pack "-installed" = Right $ ListInstalled False+ | t == T.pack "-set" = Right $ ListSet False+ | t == T.pack "-available" = Right $ ListAvailable False+ | t == T.pack "cross" = Right $ ListTarget False Nothing+ | t == T.pack "-cross" = Right $ ListTarget True Nothing+ | t == T.pack "+cross" = Right $ ListTarget False Nothing+ | Just target <- T.stripPrefix "-target=" t = Right $ ListTarget False (Just target)+ | Just target <- T.stripPrefix "+target=" t = Right $ ListTarget True (Just target)+ | Just target <- T.stripPrefix "target=" t = Right $ ListTarget True (Just target)+ | Just target <- T.stripPrefix "-target" t = Right $ ListTarget False (Just target)+ | Just target <- T.stripPrefix "+target" t = Right $ ListTarget True (Just target)+ | Just target <- T.stripPrefix "target" t = Right $ ListTarget True (Just target)++ | Just tagText <- T.stripPrefix "tag=" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag True tag+ | Just tagText <- T.stripPrefix "+tag=" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag True tag+ | Just tagText <- T.stripPrefix "-tag=" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag False tag++ | Just tagText <- T.stripPrefix "tag" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag True tag+ | Just tagText <- T.stripPrefix "+tag" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag True tag+ | Just tagText <- T.stripPrefix "-tag" t+ , Right tag <- tagEither (T.unpack tagText) = Right $ ListTag False tag++ | otherwise = Left ("Unknown criteria: " <> s') where t = T.toLower (T.pack s')
lib/GHCup/Query/DB.hs view
@@ -156,6 +156,30 @@ | tool == ghcup -> pure [] -- Hm | otherwise -> pure [] +-- TODO: not neat the random combination of different SymlinkSpec types+getSymlinkSpecPortable' ::+ ( MonadReader env m+ , HasDirs env+ , HasPlatformReq env+ , HasLog env+ , MonadIOish m+ )+ => Tool+ -> TargetVersion+ -> Excepts '[ParseError] m [SymlinkSpec [Either Char Version]]+getSymlinkSpecPortable' tool tver = do+ runE (getSymlinkSpec' tool tver) >>= \case+ VRight r -> pure r+ VLeft (V pe@(ParseError _)) -> fail $ prettyHFError pe+ VLeft _ -> do -- legacy+ if | tool == ghc -> do+ pfreq <- getPlatformReq+ liftE $ forM (defaultGHCExeSymLinked pfreq tver (ghcBinaries pfreq tver)) $ parseSymlinkSpec (_tvVersion tver)+ | tool == cabal -> pure []+ | tool == stack -> pure []+ | tool == hls -> pure []+ | tool == ghcup -> pure [] -- Hm+ | otherwise -> pure []
scripts/bootstrap/bootstrap-haskell view
@@ -41,7 +41,7 @@ plat="$(uname -s)" arch=$(uname -m)-ghver="0.2.6.1"+ghver="0.2.6.2" : "${GHCUP_BASE_URL:=https://downloads.haskell.org/~ghcup}" export GHCUP_SKIP_UPDATE_CHECK=yes
test/optparse-test/InstallTest.hs view
@@ -8,8 +8,8 @@ import Test.Tasty import GHCup.OptParse hiding (HLSCompileOptions(isolateDir))-import Utils import GHCup.Types+import Utils import Data.Versions import Data.List.NonEmpty (NonEmpty ((:|))) @@ -58,10 +58,7 @@ $(versionQ "nightly") ) , ("install ghc recommended", ToolTag Recommended)- , ("install ghc prerelease", GHCVersion- $ toTargetVersionReq''- $(versionQ "prerelease")- )+ , ("install ghc prerelease", ToolTag Prerelease) , ("install ghc latest-prerelease", ToolTag LatestPrerelease) , ("install ghc latest-nightly", ToolTag LatestNightly) , ("install ghc javascript-unknown-ghcjs-9.6", GHCVersion@@ -81,7 +78,7 @@ , ("install cabal latest", ToolTag Latest) , ("install cabal nightly", ToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("install cabal recommended", ToolTag Recommended)- , ("install cabal prerelease", ToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("install cabal prerelease", ToolTag Prerelease) , ("install cabal latest-prerelease", ToolTag LatestPrerelease) , ("install cabal latest-nightly", ToolTag LatestNightly) , ("install cabal base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))@@ -96,7 +93,7 @@ , ("install hls latest", ToolTag Latest) , ("install hls nightly", ToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("install hls recommended", ToolTag Recommended)- , ("install hls prerelease", ToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("install hls prerelease", ToolTag Prerelease) , ("install hls latest-prerelease", ToolTag LatestPrerelease) , ("install hls latest-nightly", ToolTag LatestNightly) , ("install hls base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))@@ -111,7 +108,7 @@ , ("install stack latest", ToolTag Latest) , ("install stack nightly", ToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("install stack recommended", ToolTag Recommended)- , ("install stack prerelease", ToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("install stack prerelease", ToolTag Prerelease) , ("install stack latest-prerelease", ToolTag LatestPrerelease) , ("install stack latest-nightly", ToolTag LatestNightly) , ("install stack base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
test/optparse-test/SetTest.hs view
@@ -38,11 +38,7 @@ $(versionQ "nightly") ) , ("set ghc recommended", SetToolTag Recommended)- , ("set ghc prerelease", SetGHCVersion- $ (`TargetVersionReq` Nothing) $ TargetVersion- Nothing- $(versionQ "prerelease")- )+ , ("set ghc prerelease", SetToolTag Prerelease) , ("set ghc latest-prerelease", SetToolTag LatestPrerelease) , ("set ghc latest-nightly", SetToolTag LatestNightly) , ("set ghc javascript-unknown-ghcjs-9.6", SetGHCVersion@@ -61,7 +57,7 @@ , ("set cabal latest", SetToolTag Latest) , ("set cabal nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("set cabal recommended", SetToolTag Recommended)- , ("set cabal prerelease", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("set cabal prerelease", SetToolTag Prerelease) , ("set cabal latest-prerelease", SetToolTag LatestPrerelease) , ("set cabal latest-nightly", SetToolTag LatestNightly) , ("set cabal base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))@@ -76,7 +72,7 @@ , ("set hls latest", SetToolTag Latest) , ("set hls nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("set hls recommended", SetToolTag Recommended)- , ("set hls prerelease", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("set hls prerelease", SetToolTag Prerelease) , ("set hls latest-prerelease", SetToolTag LatestPrerelease) , ("set hls latest-nightly", SetToolTag LatestNightly) , ("set hls base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))@@ -91,7 +87,7 @@ , ("set stack latest", SetToolTag Latest) , ("set stack nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly")) , ("set stack recommended", SetToolTag Recommended)- , ("set stack prerelease", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "prerelease"))+ , ("set stack prerelease", SetToolTag Prerelease) , ("set stack latest-prerelease", SetToolTag LatestPrerelease) , ("set stack latest-nightly", SetToolTag LatestNightly) , ("set stack base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))