Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
GHCup.Utils.Parsers
Contents
Synopsis
- data SetToolVersion
- prettyToolVer :: ToolVersion -> String
- toSetToolVer :: Maybe ToolVersion -> SetToolVersion
- platformParser :: String -> Either String PlatformRequest
- uriParser :: String -> Either String URI
- absolutePathParser :: FilePath -> Either String FilePath
- isolateParser :: FilePath -> Either String FilePath
- ghcVersionTagEither :: String -> Either String ToolVersion
- toolVersionTagEither :: String -> Either String ToolVersion
- tagEither :: String -> Either String Tag
- ghcVersionEither :: String -> Either String GHCTargetVersion
- toolVersionEither :: String -> Either String Version
- toolParser :: String -> Either String Tool
- dayParser :: String -> Either String Day
- criteriaParser :: String -> Either String ListCriteria
- keepOnParser :: String -> Either String KeepDirs
- downloaderParser :: String -> Either String Downloader
- gpgParser :: String -> Either String GPGSetting
- overWriteVersionParser :: String -> Either String [VersionPattern]
- fromVersion :: (HasLog env, MonadFail m, MonadReader env m, HasGHCupInfo env, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => Maybe ToolVersion -> GuessMode -> Tool -> Excepts '[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet] m (GHCTargetVersion, Maybe VersionInfo)
- fromVersion' :: (HasLog env, MonadFail m, MonadReader env m, HasGHCupInfo env, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => SetToolVersion -> GuessMode -> Tool -> Excepts '[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet] m (GHCTargetVersion, Maybe VersionInfo)
- guessFullVersion :: (HasLog env, MonadFail m, MonadReader env m, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => GHCupDownloads -> GHCTargetVersion -> Tool -> GuessMode -> m (GHCTargetVersion, Maybe VersionInfo)
- parseUrlSource :: String -> Either String [NewURLSource]
- parseUrlSource' :: String -> Either String URLSource
- parseNewUrlSource :: String -> Either String NewURLSource
- parseNewUrlSources :: String -> Either String [NewURLSource]
- parseChannelAlias :: String -> Either String ChannelAlias
Documentation
>>>
:set -XOverloadedStrings
>>>
:set -XDataKinds
>>>
:set -XTypeApplications
>>>
:set -XQuasiQuotes
>>>
import System.Directory
>>>
import URI.ByteString
>>>
import qualified Data.Text as T
>>>
import GHCup.Prelude
>>>
import GHCup.Download
>>>
import GHCup.Version
>>>
import GHCup.Errors
>>>
import GHCup.Types
>>>
import GHCup.Utils.Dirs
>>>
import GHCup.Types.Optics
>>>
import Data.Versions
>>>
import Optics
>>>
import GHCup.Prelude.Version.QQ
>>>
import qualified Data.Text.Encoding as E
>>>
import qualified Data.Map.Strict as M
>>>
import Control.Monad.Reader
>>>
import Data.Variant.Excepts
>>>
import Text.PrettyPrint.HughesPJClass ( prettyShow )
>>>
let lc = LoggerConfig { lcPrintDebug = False, consoleOutter = mempty, fileOutter = mempty, fancyColors = False }
>>>
dirs' <- getAllDirs
>>>
let installedVersions = [ ([pver|8.10.7|], "-debug+lol", Nothing), ([pver|8.10.4|], "", Nothing), ([pver|8.8.4|], "", Nothing), ([pver|8.8.3|], "", Nothing) ]
>>>
let settings = defaultSettings { cache = True, metaCache = 0, noNetwork = True }
>>>
let leanAppState = LeanAppState settings dirs' defaultKeyBindings lc
>>>
cwd <- getCurrentDirectory
>>>
(Right ref) <- pure $ GHCup.Utils.parseURI $ "file://" <> E.encodeUtf8 (T.pack cwd) <> "/data/metadata/" <> (urlBaseName . view pathL' $ ghcupURL)
>>>
(Right ref') <- pure $ GHCup.Utils.parseURI $ "file://" <> E.encodeUtf8 (T.pack cwd) <> "/data/metadata/" <> (urlBaseName . view pathL' $ channelURL PrereleasesChannel)
>>>
(VRight r) <- (fmap . fmap) _ghcupDownloads $ flip runReaderT leanAppState . runE @'[DigestError, GPGError, JSONError , DownloadFailed , FileDoesNotExistError, ContentLengthError] $ liftE (getBase ref) >>= liftE . decodeMetadata @GHCupInfo
>>>
(VRight r') <- (fmap . fmap) _ghcupDownloads $ flip runReaderT leanAppState . runE @'[DigestError, GPGError, JSONError , DownloadFailed , FileDoesNotExistError, ContentLengthError] $ liftE (getBase ref') >>= liftE . decodeMetadata @GHCupInfo
>>>
let rr = M.unionsWith (M.unionWith (\_ b2 -> b2)) [r, r']
>>>
let go = flip runReaderT leanAppState . fmap (tVerToText . fst)
data SetToolVersion Source #
Constructors
SetGHCVersion GHCTargetVersion | |
SetToolVersion Version | |
SetToolTag Tag | |
SetToolDay Day | |
SetRecommended | |
SetNext |
Instances
Show SetToolVersion Source # | |
Defined in GHCup.Utils.Parsers Methods showsPrec :: Int -> SetToolVersion -> ShowS # show :: SetToolVersion -> String # showList :: [SetToolVersion] -> ShowS # | |
Eq SetToolVersion Source # | |
Defined in GHCup.Utils.Parsers Methods (==) :: SetToolVersion -> SetToolVersion -> Bool # (/=) :: SetToolVersion -> SetToolVersion -> Bool # |
prettyToolVer :: ToolVersion -> String Source #
fromVersion :: (HasLog env, MonadFail m, MonadReader env m, HasGHCupInfo env, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => Maybe ToolVersion -> GuessMode -> Tool -> Excepts '[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet] m (GHCTargetVersion, Maybe VersionInfo) Source #
fromVersion' :: (HasLog env, MonadFail m, MonadReader env m, HasGHCupInfo env, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => SetToolVersion -> GuessMode -> Tool -> Excepts '[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet] m (GHCTargetVersion, Maybe VersionInfo) Source #
guessFullVersion :: (HasLog env, MonadFail m, MonadReader env m, HasDirs env, MonadThrow m, MonadIO m, MonadCatch m) => GHCupDownloads -> GHCTargetVersion -> Tool -> GuessMode -> m (GHCTargetVersion, Maybe VersionInfo) Source #
Guess the full version from an input version, by possibly examining the metadata and the installed versions.
>>>
go $ guessFullVersion rr (mkTVer [vver|8|]) GHC GLax
"8.10.7">>>
go $ guessFullVersion rr (mkTVer [vver|8.10|]) GHC GLax
"8.10.7">>>
go $ guessFullVersion rr (mkTVer [vver|8.10.7|]) GHC GLax
"8.10.7">>>
go $ guessFullVersion rr (mkTVer [vver|9.12.1|]) GHC GLax
"9.12.1">>>
go $ guessFullVersion rr (mkTVer [vver|8|]) GHC GStrict
"8"
parseUrlSource :: String -> Either String [NewURLSource] Source #
parseNewUrlSources :: String -> Either String [NewURLSource] Source #