{-# LANGUAGE CPP #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ViewPatterns #-}
module GHCup.OptParse.Run where
import GHCup
import GHCup.Utils
import GHCup.Utils.Parsers (fromVersion, ghcVersionTagEither, isolateParser, toolVersionTagEither)
import GHCup.OptParse.Common
import GHCup.Errors
import GHCup.Types
import GHCup.Types.Optics
import GHCup.Prelude
import GHCup.Prelude.File
#ifdef IS_WINDOWS
import GHCup.Prelude.Process
import GHCup.Prelude.Process.Windows ( execNoMinGW, resolveExecutable )
#endif
import GHCup.Prelude.Logger
import GHCup.Prelude.String.QQ
import Control.Exception.Safe ( MonadMask, MonadCatch )
#if !MIN_VERSION_base(4,13,0)
import Control.Monad.Fail ( MonadFail )
#endif
import Control.Monad (when, forM_, forM, unless)
import Control.Monad.Reader
import Control.Monad.Trans.Resource
import Data.Functor
import Data.Maybe (isNothing, fromMaybe)
import Data.List ( intercalate )
import Data.Variant.Excepts
import Options.Applicative hiding ( style )
import Prelude hiding ( appendFile )
import System.FilePath
import System.Environment
import System.Exit
import qualified Data.Map.Strict as Map
import qualified Data.Text as T
#ifndef IS_WINDOWS
import qualified System.Posix.Process as SPP
#endif
import Data.Versions ( prettyVer, Version )
data RunOptions = RunOptions
{ RunOptions -> Bool
runAppendPATH :: Bool
, RunOptions -> Bool
runInstTool' :: Bool
, RunOptions -> Bool
runMinGWPath :: Bool
, RunOptions -> Maybe ToolVersion
runGHCVer :: Maybe ToolVersion
, RunOptions -> Maybe ToolVersion
runCabalVer :: Maybe ToolVersion
, RunOptions -> Maybe ToolVersion
runHLSVer :: Maybe ToolVersion
, RunOptions -> Maybe ToolVersion
runStackVer :: Maybe ToolVersion
, RunOptions -> Maybe String
runBinDir :: Maybe FilePath
, RunOptions -> Bool
runQuick :: Bool
, RunOptions -> [String]
runCOMMAND :: [String]
} deriving (RunOptions -> RunOptions -> Bool
(RunOptions -> RunOptions -> Bool)
-> (RunOptions -> RunOptions -> Bool) -> Eq RunOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RunOptions -> RunOptions -> Bool
== :: RunOptions -> RunOptions -> Bool
$c/= :: RunOptions -> RunOptions -> Bool
/= :: RunOptions -> RunOptions -> Bool
Eq, Int -> RunOptions -> ShowS
[RunOptions] -> ShowS
RunOptions -> String
(Int -> RunOptions -> ShowS)
-> (RunOptions -> String)
-> ([RunOptions] -> ShowS)
-> Show RunOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RunOptions -> ShowS
showsPrec :: Int -> RunOptions -> ShowS
$cshow :: RunOptions -> String
show :: RunOptions -> String
$cshowList :: [RunOptions] -> ShowS
showList :: [RunOptions] -> ShowS
Show)
runOpts :: Parser RunOptions
runOpts :: Parser RunOptions
runOpts =
Bool
-> Bool
-> Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions
RunOptions
(Bool
-> Bool
-> Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser Bool
-> Parser
(Bool
-> Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod FlagFields Bool -> Parser Bool
switch
(Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'a' Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"append" Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Append bin/ dir to PATH instead of prepending (this means that e.g. a system installation may take precedence)")
Parser
(Bool
-> Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser Bool
-> Parser
(Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Mod FlagFields Bool -> Parser Bool
switch
(Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'i' Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"install" Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Install the tool, if missing")
Parser
(Bool
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser Bool
-> Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Mod FlagFields Bool -> Parser Bool
switch
(Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'm' Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"mingw-path" Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"On windows, add mingw64 PATHs to environment (does nothing on unix)")
Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser (Maybe ToolVersion)
-> Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ToolVersion -> Parser (Maybe ToolVersion)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
(ReadM ToolVersion
-> Mod OptionFields ToolVersion -> Parser ToolVersion
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
((String -> Either String ToolVersion) -> ReadM ToolVersion
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String ToolVersion
ghcVersionTagEither)
(String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"GHC_VERSION" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"ghc" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. String -> Mod f a
help String
"The ghc version"
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Tool -> [String] -> Completer
tagCompleter Tool
GHC [])
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> (Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Completer -> Mod OptionFields ToolVersion)
-> Completer -> Mod OptionFields ToolVersion
forall a b. (a -> b) -> a -> b
$ [ListCriteria] -> Tool -> Completer
versionCompleter [] Tool
GHC)
)
)
Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser (Maybe ToolVersion)
-> Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ToolVersion -> Parser (Maybe ToolVersion)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
(ReadM ToolVersion
-> Mod OptionFields ToolVersion -> Parser ToolVersion
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
((String -> Either String ToolVersion) -> ReadM ToolVersion
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String ToolVersion
toolVersionTagEither)
(String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"CABAL_VERSION" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"cabal" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. String -> Mod f a
help String
"The cabal version"
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Tool -> [String] -> Completer
tagCompleter Tool
Cabal [])
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> (Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Completer -> Mod OptionFields ToolVersion)
-> Completer -> Mod OptionFields ToolVersion
forall a b. (a -> b) -> a -> b
$ [ListCriteria] -> Tool -> Completer
versionCompleter [] Tool
Cabal)
)
)
Parser
(Maybe ToolVersion
-> Maybe ToolVersion
-> Maybe String
-> Bool
-> [String]
-> RunOptions)
-> Parser (Maybe ToolVersion)
-> Parser
(Maybe ToolVersion
-> Maybe String -> Bool -> [String] -> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ToolVersion -> Parser (Maybe ToolVersion)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
(ReadM ToolVersion
-> Mod OptionFields ToolVersion -> Parser ToolVersion
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
((String -> Either String ToolVersion) -> ReadM ToolVersion
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String ToolVersion
toolVersionTagEither)
(String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"HLS_VERSION" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"hls" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. String -> Mod f a
help String
"The HLS version"
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Tool -> [String] -> Completer
tagCompleter Tool
HLS [])
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> (Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Completer -> Mod OptionFields ToolVersion)
-> Completer -> Mod OptionFields ToolVersion
forall a b. (a -> b) -> a -> b
$ [ListCriteria] -> Tool -> Completer
versionCompleter [] Tool
HLS)
)
)
Parser
(Maybe ToolVersion
-> Maybe String -> Bool -> [String] -> RunOptions)
-> Parser (Maybe ToolVersion)
-> Parser (Maybe String -> Bool -> [String] -> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser ToolVersion -> Parser (Maybe ToolVersion)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
(ReadM ToolVersion
-> Mod OptionFields ToolVersion -> Parser ToolVersion
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
((String -> Either String ToolVersion) -> ReadM ToolVersion
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String ToolVersion
toolVersionTagEither)
(String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"STACK_VERSION" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"stack" Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. String -> Mod f a
help String
"The stack version"
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Tool -> [String] -> Completer
tagCompleter Tool
Stack [])
Mod OptionFields ToolVersion
-> Mod OptionFields ToolVersion -> Mod OptionFields ToolVersion
forall a. Semigroup a => a -> a -> a
<> (Completer -> Mod OptionFields ToolVersion
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (Completer -> Mod OptionFields ToolVersion)
-> Completer -> Mod OptionFields ToolVersion
forall a b. (a -> b) -> a -> b
$ [ListCriteria] -> Tool -> Completer
versionCompleter [] Tool
Stack)
)
)
Parser (Maybe String -> Bool -> [String] -> RunOptions)
-> Parser (Maybe String) -> Parser (Bool -> [String] -> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String -> Parser (Maybe String)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional
(ReadM String -> Mod OptionFields String -> Parser String
forall a. ReadM a -> Mod OptionFields a -> Parser a
option
((String -> Either String String) -> ReadM String
forall a. (String -> Either String a) -> ReadM a
eitherReader String -> Either String String
isolateParser)
( Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'b'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"bindir"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"DIR"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"directory where to create the tool symlinks (default: newly created system temp dir)"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Completer -> Mod OptionFields String
forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a
completer (String -> Completer
bashCompleter String
"directory")
)
)
Parser (Bool -> [String] -> RunOptions)
-> Parser Bool -> Parser ([String] -> RunOptions)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Mod FlagFields Bool -> Parser Bool
switch
(Char -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'q' Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"quick" Mod FlagFields Bool -> Mod FlagFields Bool -> Mod FlagFields Bool
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Bool
forall (f :: * -> *) a. String -> Mod f a
help String
"Avoid any expensive work (such as downloads, version/tag resolution etc.). Disables --install.")
Parser ([String] -> RunOptions)
-> Parser [String] -> Parser RunOptions
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String -> Parser [String]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (ReadM String -> Mod ArgumentFields String -> Parser String
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ReadM String
forall s. IsString s => ReadM s
str (String -> Mod ArgumentFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"COMMAND" Mod ArgumentFields String
-> Mod ArgumentFields String -> Mod ArgumentFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod ArgumentFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"The command to run, with arguments (use longopts --). If omitted, just prints the created bin/ dir to stdout and exits."))
runFooter :: String
= [s|Discussion:
Adds the given tools to a dedicated bin/ directory and adds them to PATH, exposing
the relevant binaries, then executes a command.
Examples:
# run VSCode with all latest toolchain exposed, installing missing versions if necessary
ghcup run --ghc latest --cabal latest --hls latest --stack latest --install -- code Setup.hs
# create a custom toolchain bin/ dir with GHC and cabal that can be manually added to PATH
ghcup run --ghc 8.10.7 --cabal 3.2.0.0 --bindir $HOME/toolchain/bin
# run a specific ghc version
ghcup run --ghc 8.10.7 -- ghc --version|]
type RunEffects = '[ AlreadyInstalled
, UnknownArchive
, ArchiveResult
, FileDoesNotExistError
, CopyError
, NotInstalled
, DirNotEmpty
, NoDownload
, NotInstalled
, BuildFailed
, TagNotFound
, DayNotFound
, DigestError
, ContentLengthError
, GPGError
, DownloadFailed
, TarDirDoesNotExist
, NextVerNotFound
, NoToolVersionSet
, FileAlreadyExistsError
, ProcessError
, UninstallFailed
, MergeFileTreeError
, NoCompatiblePlatform
, GHCup.Errors.ParseError
, UnsupportedSetupCombo
, DistroNotFound
, NoCompatibleArch
, URIParseError
]
runLeanRUN :: (MonadUnliftIO m, MonadIO m)
=> LeanAppState
-> Excepts RunEffects (ReaderT LeanAppState m) a
-> m (VEither RunEffects a)
runLeanRUN :: forall (m :: * -> *) a.
(MonadUnliftIO m, MonadIO m) =>
LeanAppState
-> Excepts RunEffects (ReaderT LeanAppState m) a
-> m (VEither RunEffects a)
runLeanRUN LeanAppState
leanAppstate =
(ReaderT LeanAppState m (VEither RunEffects a)
-> LeanAppState -> m (VEither RunEffects a))
-> LeanAppState
-> ReaderT LeanAppState m (VEither RunEffects a)
-> m (VEither RunEffects a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip ReaderT LeanAppState m (VEither RunEffects a)
-> LeanAppState -> m (VEither RunEffects a)
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT LeanAppState
leanAppstate
(ReaderT LeanAppState m (VEither RunEffects a)
-> m (VEither RunEffects a))
-> (Excepts RunEffects (ReaderT LeanAppState m) a
-> ReaderT LeanAppState m (VEither RunEffects a))
-> Excepts RunEffects (ReaderT LeanAppState m) a
-> m (VEither RunEffects a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (es :: [*]) a (m :: * -> *).
Excepts es m a -> m (VEither es a)
runE
@RunEffects
runRUN :: MonadUnliftIO m
=> IO AppState
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a)
runRUN :: forall (m :: * -> *) a.
MonadUnliftIO m =>
IO AppState
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a)
runRUN IO AppState
appState Excepts RunEffects (ResourceT (ReaderT AppState m)) a
action' = do
AppState
s' <- IO AppState -> m AppState
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO AppState
appState
(ReaderT AppState m (VEither RunEffects a)
-> AppState -> m (VEither RunEffects a))
-> AppState
-> ReaderT AppState m (VEither RunEffects a)
-> m (VEither RunEffects a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip ReaderT AppState m (VEither RunEffects a)
-> AppState -> m (VEither RunEffects a)
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT AppState
s'
(ReaderT AppState m (VEither RunEffects a)
-> m (VEither RunEffects a))
-> (Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> ReaderT AppState m (VEither RunEffects a))
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ResourceT (ReaderT AppState m) (VEither RunEffects a)
-> ReaderT AppState m (VEither RunEffects a)
forall (m :: * -> *) a. MonadUnliftIO m => ResourceT m a -> m a
runResourceT
(ResourceT (ReaderT AppState m) (VEither RunEffects a)
-> ReaderT AppState m (VEither RunEffects a))
-> (Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> ResourceT (ReaderT AppState m) (VEither RunEffects a))
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> ReaderT AppState m (VEither RunEffects a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (es :: [*]) a (m :: * -> *).
Excepts es m a -> m (VEither es a)
runE
@RunEffects
(Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a))
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a)
forall a b. (a -> b) -> a -> b
$ Excepts RunEffects (ResourceT (ReaderT AppState m)) a
action'
run :: forall m .
( MonadFail m
, MonadMask m
, MonadCatch m
, MonadIO m
, MonadUnliftIO m
, Alternative m
)
=> RunOptions
-> Settings
-> IO AppState
-> LeanAppState
-> (ReaderT LeanAppState m () -> m ())
-> m ExitCode
run :: forall (m :: * -> *).
(MonadFail m, MonadMask m, MonadCatch m, MonadIO m,
MonadUnliftIO m, Alternative m) =>
RunOptions
-> Settings
-> IO AppState
-> LeanAppState
-> (ReaderT LeanAppState m () -> m ())
-> m ExitCode
run RunOptions{Bool
[String]
Maybe String
Maybe ToolVersion
runAppendPATH :: RunOptions -> Bool
runInstTool' :: RunOptions -> Bool
runMinGWPath :: RunOptions -> Bool
runGHCVer :: RunOptions -> Maybe ToolVersion
runCabalVer :: RunOptions -> Maybe ToolVersion
runHLSVer :: RunOptions -> Maybe ToolVersion
runStackVer :: RunOptions -> Maybe ToolVersion
runBinDir :: RunOptions -> Maybe String
runQuick :: RunOptions -> Bool
runCOMMAND :: RunOptions -> [String]
runAppendPATH :: Bool
runInstTool' :: Bool
runMinGWPath :: Bool
runGHCVer :: Maybe ToolVersion
runCabalVer :: Maybe ToolVersion
runHLSVer :: Maybe ToolVersion
runStackVer :: Maybe ToolVersion
runBinDir :: Maybe String
runQuick :: Bool
runCOMMAND :: [String]
..} Settings
settings IO AppState
runAppState LeanAppState
leanAppstate ReaderT LeanAppState m () -> m ()
runLogger = do
VEither RunEffects String
r <- if Bool -> Bool
not Bool
runQuick
then IO AppState
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
-> m (VEither RunEffects String)
forall (m :: * -> *) a.
MonadUnliftIO m =>
IO AppState
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
-> m (VEither RunEffects a)
runRUN IO AppState
runAppState (Excepts RunEffects (ResourceT (ReaderT AppState m)) String
-> m (VEither RunEffects String))
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
-> m (VEither RunEffects String)
forall a b. (a -> b) -> a -> b
$ do
Toolchain
toolchain <- Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Toolchain
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) Toolchain
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Toolchain
(MonadFail m, MonadThrow m, MonadIO m, MonadCatch m) =>
Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Toolchain
resolveToolchainFull
AppState
r <- ResourceT (ReaderT AppState m) AppState
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) AppState
forall (m :: * -> *) a. Monad m => m a -> Excepts RunEffects m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ResourceT (ReaderT AppState m) AppState
forall r (m :: * -> *). MonadReader r m => m r
ask
String
tmp <- ResourceT (ReaderT AppState m) String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
forall (m :: * -> *) a. Monad m => m a -> Excepts RunEffects m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT (ReaderT AppState m) String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String)
-> (ReaderT LeanAppState m String
-> ResourceT (ReaderT AppState m) String)
-> ReaderT LeanAppState m String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReaderT AppState m String -> ResourceT (ReaderT AppState m) String
forall (m :: * -> *) a. Monad m => m a -> ResourceT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ReaderT AppState m String
-> ResourceT (ReaderT AppState m) String)
-> (ReaderT LeanAppState m String -> ReaderT AppState m String)
-> ReaderT LeanAppState m String
-> ResourceT (ReaderT AppState m) String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m String -> ReaderT AppState m String
forall (m :: * -> *) a. Monad m => m a -> ReaderT AppState m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m String -> ReaderT AppState m String)
-> (ReaderT LeanAppState m String -> m String)
-> ReaderT LeanAppState m String
-> ReaderT AppState m String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ReaderT LeanAppState m String -> LeanAppState -> m String)
-> LeanAppState -> ReaderT LeanAppState m String -> m String
forall a b c. (a -> b -> c) -> b -> a -> c
flip ReaderT LeanAppState m String -> LeanAppState -> m String
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT (AppState -> LeanAppState
fromAppState AppState
r) (ReaderT LeanAppState m String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String)
-> ReaderT LeanAppState m String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
forall a b. (a -> b) -> a -> b
$ (MonadUnliftIO m, MonadCatch m, MonadThrow m, MonadMask m,
MonadIO m) =>
Toolchain -> ReaderT LeanAppState m String
Toolchain -> ReaderT LeanAppState m String
createTmpDir Toolchain
toolchain
Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) ()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) ())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) ()
forall a b. (a -> b) -> a -> b
$ (MonadFail m, MonadThrow m, MonadIO m, MonadCatch m,
Alternative m) =>
Toolchain
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
Toolchain
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
installToolChainFull Toolchain
toolchain String
tmp
String
-> Excepts RunEffects (ResourceT (ReaderT AppState m)) String
forall a.
a -> Excepts RunEffects (ResourceT (ReaderT AppState m)) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
tmp
else LeanAppState
-> Excepts RunEffects (ReaderT LeanAppState m) String
-> m (VEither RunEffects String)
forall (m :: * -> *) a.
(MonadUnliftIO m, MonadIO m) =>
LeanAppState
-> Excepts RunEffects (ReaderT LeanAppState m) a
-> m (VEither RunEffects a)
runLeanRUN LeanAppState
leanAppstate (Excepts RunEffects (ReaderT LeanAppState m) String
-> m (VEither RunEffects String))
-> Excepts RunEffects (ReaderT LeanAppState m) String
-> m (VEither RunEffects String)
forall a b. (a -> b) -> a -> b
$ do
Toolchain
toolchain <- Excepts RunEffects (ReaderT LeanAppState m) Toolchain
resolveToolchain
String
tmp <- ReaderT LeanAppState m String
-> Excepts RunEffects (ReaderT LeanAppState m) String
forall (m :: * -> *) a. Monad m => m a -> Excepts RunEffects m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ReaderT LeanAppState m String
-> Excepts RunEffects (ReaderT LeanAppState m) String)
-> ReaderT LeanAppState m String
-> Excepts RunEffects (ReaderT LeanAppState m) String
forall a b. (a -> b) -> a -> b
$ (MonadUnliftIO m, MonadCatch m, MonadThrow m, MonadMask m,
MonadIO m) =>
Toolchain -> ReaderT LeanAppState m String
Toolchain -> ReaderT LeanAppState m String
createTmpDir Toolchain
toolchain
Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
-> Excepts RunEffects (ReaderT LeanAppState m) ()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
-> Excepts RunEffects (ReaderT LeanAppState m) ())
-> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
-> Excepts RunEffects (ReaderT LeanAppState m) ()
forall a b. (a -> b) -> a -> b
$ (MonadFail m, MonadThrow m, MonadIO m, MonadCatch m) =>
Toolchain
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
Toolchain
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
installToolChain Toolchain
toolchain String
tmp
String -> Excepts RunEffects (ReaderT LeanAppState m) String
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
tmp
case VEither RunEffects String
r of
VRight String
tmp -> do
case [String]
runCOMMAND of
[] -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
putStr String
tmp
ExitCode -> m ExitCode
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ExitCode
ExitSuccess
(String
cmd:[String]
args) -> do
[(String, String)]
newEnv <- IO [(String, String)] -> m [(String, String)]
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [(String, String)] -> m [(String, String)])
-> IO [(String, String)] -> m [(String, String)]
forall a b. (a -> b) -> a -> b
$ [String] -> Bool -> IO [(String, String)]
addToPath [String
tmp] Bool
runAppendPATH
let pathVar :: String
pathVar = if Bool
isWindows then String
"Path" else String
"PATH"
Maybe String -> (String -> m ()) -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (String -> Map String String -> Maybe String
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup String
pathVar (Map String String -> Maybe String)
-> ([(String, String)] -> Map String String)
-> [(String, String)]
-> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(String, String)] -> Map String String
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(String, String)] -> Maybe String)
-> [(String, String)] -> Maybe String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
newEnv) ((String -> m ()) -> m ()) -> (String -> m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (String -> IO ()) -> String -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> IO ()
setEnv String
pathVar
#ifndef IS_WINDOWS
m Any -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m Any -> m ()) -> m Any -> m ()
forall a b. (a -> b) -> a -> b
$ IO Any -> m Any
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Any -> m Any) -> IO Any -> m Any
forall a b. (a -> b) -> a -> b
$ String -> Bool -> [String] -> Maybe [(String, String)] -> IO Any
forall a.
String -> Bool -> [String] -> Maybe [(String, String)] -> IO a
SPP.executeFile String
cmd Bool
True [String]
args ([(String, String)] -> Maybe [(String, String)]
forall a. a -> Maybe a
Just [(String, String)]
newEnv)
ExitCode -> m ExitCode
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ExitCode
ExitSuccess
#else
resolvedCmd <- fmap (fromMaybe cmd) $ liftIO $ resolveExecutable cmd runMinGWPath
r' <- if runMinGWPath
then runLeanRUN leanAppstate $ liftE $ lEM @_ @'[ProcessError] $ exec resolvedCmd args Nothing (Just newEnv)
else runLeanRUN leanAppstate $ liftE $ lEM @_ @'[ProcessError] $ execNoMinGW resolvedCmd args Nothing (Just newEnv)
case r' of
VRight _ -> pure ExitSuccess
VLeft e -> do
runLogger $ logError $ T.pack $ prettyHFError e
pure $ ExitFailure 28
#endif
VLeft V RunEffects
e -> do
ReaderT LeanAppState m () -> m ()
runLogger (ReaderT LeanAppState m () -> m ())
-> ReaderT LeanAppState m () -> m ()
forall a b. (a -> b) -> a -> b
$ Text -> ReaderT LeanAppState m ()
forall env (m :: * -> *).
(MonadReader env m,
LabelOptic' "loggerConfig" A_Lens env LoggerConfig, MonadIO m) =>
Text -> m ()
logError (Text -> ReaderT LeanAppState m ())
-> Text -> ReaderT LeanAppState m ()
forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ V RunEffects -> String
forall e. (Pretty e, HFErrorProject e) => e -> String
prettyHFError V RunEffects
e
ExitCode -> m ExitCode
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ExitCode -> m ExitCode) -> ExitCode -> m ExitCode
forall a b. (a -> b) -> a -> b
$ Int -> ExitCode
ExitFailure Int
27
where
guessMode :: GuessMode
guessMode = if Settings -> Bool
guessVersion Settings
settings then GuessMode
GLaxWithInstalled else GuessMode
GStrict
resolveToolchainFull :: ( MonadFail m
, MonadThrow m
, MonadIO m
, MonadCatch m
)
=> Excepts
'[ TagNotFound
, DayNotFound
, NextVerNotFound
, NoToolVersionSet
] (ResourceT (ReaderT AppState m)) Toolchain
resolveToolchainFull :: (MonadFail m, MonadThrow m, MonadIO m, MonadCatch m) =>
Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Toolchain
resolveToolchainFull = do
Maybe GHCTargetVersion
ghcVer <- Maybe ToolVersion
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
GHCTargetVersion)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe GHCTargetVersion)
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM Maybe ToolVersion
runGHCVer ((ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
GHCTargetVersion)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe GHCTargetVersion))
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
GHCTargetVersion)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe GHCTargetVersion)
forall a b. (a -> b) -> a -> b
$ \ToolVersion
ver -> do
(GHCTargetVersion
v, Maybe VersionInfo
_) <- Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo))
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall a b. (a -> b) -> a -> b
$ Maybe ToolVersion
-> GuessMode
-> Tool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall env (m :: * -> *).
(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 (ToolVersion -> Maybe ToolVersion
forall a. a -> Maybe a
Just ToolVersion
ver) GuessMode
guessMode Tool
GHC
GHCTargetVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
GHCTargetVersion
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure GHCTargetVersion
v
Maybe Version
cabalVer <- Maybe ToolVersion
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM Maybe ToolVersion
runCabalVer ((ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version))
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall a b. (a -> b) -> a -> b
$ \ToolVersion
ver -> do
(GHCTargetVersion
v, Maybe VersionInfo
_) <- Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo))
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall a b. (a -> b) -> a -> b
$ Maybe ToolVersion
-> GuessMode
-> Tool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall env (m :: * -> *).
(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 (ToolVersion -> Maybe ToolVersion
forall a. a -> Maybe a
Just ToolVersion
ver) GuessMode
guessMode Tool
Cabal
Version
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Maybe Version
hlsVer <- Maybe ToolVersion
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM Maybe ToolVersion
runHLSVer ((ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version))
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall a b. (a -> b) -> a -> b
$ \ToolVersion
ver -> do
(GHCTargetVersion
v, Maybe VersionInfo
_) <- Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo))
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall a b. (a -> b) -> a -> b
$ Maybe ToolVersion
-> GuessMode
-> Tool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall env (m :: * -> *).
(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 (ToolVersion -> Maybe ToolVersion
forall a. a -> Maybe a
Just ToolVersion
ver) GuessMode
guessMode Tool
HLS
Version
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Maybe Version
stackVer <- Maybe ToolVersion
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM Maybe ToolVersion
runStackVer ((ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version))
-> (ToolVersion
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(Maybe Version)
forall a b. (a -> b) -> a -> b
$ \ToolVersion
ver -> do
(GHCTargetVersion
v, Maybe VersionInfo
_) <- Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo))
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall a b. (a -> b) -> a -> b
$ Maybe ToolVersion
-> GuessMode
-> Tool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
(GHCTargetVersion, Maybe VersionInfo)
forall env (m :: * -> *).
(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 (ToolVersion -> Maybe ToolVersion
forall a. a -> Maybe a
Just ToolVersion
ver) GuessMode
guessMode Tool
Stack
Version
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Version
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Toolchain
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
Toolchain
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Toolchain{Maybe GHCTargetVersion
Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
..}
resolveToolchain :: Excepts RunEffects (ReaderT LeanAppState m) Toolchain
resolveToolchain = do
Maybe GHCTargetVersion
ghcVer <- case Maybe ToolVersion
runGHCVer of
Just (GHCVersion GHCTargetVersion
v) -> Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion))
-> Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a b. (a -> b) -> a -> b
$ GHCTargetVersion -> Maybe GHCTargetVersion
forall a. a -> Maybe a
Just GHCTargetVersion
v
Just (ToolVersion Version
v) -> Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion))
-> Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a b. (a -> b) -> a -> b
$ GHCTargetVersion -> Maybe GHCTargetVersion
forall a. a -> Maybe a
Just (Version -> GHCTargetVersion
mkTVer Version
v)
Maybe ToolVersion
Nothing -> Maybe GHCTargetVersion
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe GHCTargetVersion
forall a. Maybe a
Nothing
Maybe ToolVersion
_ -> String
-> Excepts
RunEffects (ReaderT LeanAppState m) (Maybe GHCTargetVersion)
forall a. String -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Internal error"
Maybe Version
cabalVer <- case Maybe ToolVersion
runCabalVer of
Just (GHCVersion GHCTargetVersion
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Just (ToolVersion Version
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just Version
v
Maybe ToolVersion
Nothing -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Version
forall a. Maybe a
Nothing
Maybe ToolVersion
_ -> String
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. String -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Internal error"
Maybe Version
hlsVer <- case Maybe ToolVersion
runHLSVer of
Just (GHCVersion GHCTargetVersion
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Just (ToolVersion Version
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just Version
v
Maybe ToolVersion
Nothing -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Version
forall a. Maybe a
Nothing
Maybe ToolVersion
_ -> String
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. String -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Internal error"
Maybe Version
stackVer <- case Maybe ToolVersion
runStackVer of
Just (GHCVersion GHCTargetVersion
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just (GHCTargetVersion -> Version
_tvVersion GHCTargetVersion
v)
Just (ToolVersion Version
v) -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version))
-> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just Version
v
Maybe ToolVersion
Nothing -> Maybe Version
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Version
forall a. Maybe a
Nothing
Maybe ToolVersion
_ -> String
-> Excepts RunEffects (ReaderT LeanAppState m) (Maybe Version)
forall a. String -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Internal error"
Toolchain -> Excepts RunEffects (ReaderT LeanAppState m) Toolchain
forall a. a -> Excepts RunEffects (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Toolchain{Maybe GHCTargetVersion
Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
..}
installToolChainFull :: ( MonadFail m
, MonadThrow m
, MonadIO m
, MonadCatch m
, Alternative m
)
=> Toolchain
-> FilePath
-> Excepts
'[ TagNotFound
, DayNotFound
, NextVerNotFound
, NoToolVersionSet
, UnknownArchive
, TarDirDoesNotExist
, ProcessError
, NotInstalled
, NoDownload
, GPGError
, DownloadFailed
, DirNotEmpty
, DigestError
, ContentLengthError
, BuildFailed
, ArchiveResult
, AlreadyInstalled
, FileAlreadyExistsError
, CopyError
, UninstallFailed
, MergeFileTreeError
, NoCompatiblePlatform
, GHCup.Errors.ParseError
, UnsupportedSetupCombo
, DistroNotFound
, NoCompatibleArch
, URIParseError
] (ResourceT (ReaderT AppState m)) ()
installToolChainFull :: (MonadFail m, MonadThrow m, MonadIO m, MonadCatch m,
Alternative m) =>
Toolchain
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
installToolChainFull Toolchain{Maybe GHCTargetVersion
Maybe Version
ghcVer :: Toolchain -> Maybe GHCTargetVersion
cabalVer :: Toolchain -> Maybe Version
hlsVer :: Toolchain -> Maybe Version
stackVer :: Toolchain -> Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
..} String
tmp = do
case Maybe GHCTargetVersion
ghcVer of
Just GHCTargetVersion
v -> do
Bool
isInstalled <- ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall (m :: * -> *) a.
Monad m =>
m a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool)
-> ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> ResourceT (ReaderT AppState m) Bool
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasDirs env, MonadCatch m) =>
Tool -> GHCTargetVersion -> m Bool
checkIfToolInstalled' Tool
GHC GHCTargetVersion
v
Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
isInstalled (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Bool
runInstTool' Bool -> Bool -> Bool
&& Maybe Text -> Bool
forall a. Maybe a -> Bool
isNothing (GHCTargetVersion -> Maybe Text
_tvTarget GHCTargetVersion
v)) (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[AlreadyInstalled, BuildFailed, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, DirNotEmpty, ArchiveResult, ProcessError,
UninstallFailed, MergeFileTreeError, NoCompatiblePlatform,
ParseError, UnsupportedSetupCombo, DistroNotFound,
NoCompatibleArch, URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[AlreadyInstalled, BuildFailed, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, DirNotEmpty, ArchiveResult, ProcessError,
UninstallFailed, MergeFileTreeError, NoCompatiblePlatform,
ParseError, UnsupportedSetupCombo, DistroNotFound,
NoCompatibleArch, URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[AlreadyInstalled, BuildFailed, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, DirNotEmpty, ArchiveResult, ProcessError,
UninstallFailed, MergeFileTreeError, NoCompatiblePlatform,
ParseError, UnsupportedSetupCombo, DistroNotFound,
NoCompatibleArch, URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ GHCTargetVersion
-> InstallDir
-> Bool
-> [Text]
-> Text
-> Excepts
'[AlreadyInstalled, BuildFailed, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, DirNotEmpty, ArchiveResult, ProcessError,
UninstallFailed, MergeFileTreeError, NoCompatiblePlatform,
ParseError, UnsupportedSetupCombo, DistroNotFound,
NoCompatibleArch, URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (m :: * -> *) env.
(MonadFail m, MonadMask m, MonadCatch m, MonadReader env m,
HasPlatformReq env, HasGHCupInfo env, HasDirs env, HasSettings env,
HasLog env, MonadResource m, MonadIO m, MonadUnliftIO m,
Alternative m) =>
GHCTargetVersion
-> InstallDir
-> Bool
-> [Text]
-> Text
-> Excepts
'[AlreadyInstalled, BuildFailed, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, DirNotEmpty, ArchiveResult, ProcessError,
UninstallFailed, MergeFileTreeError, NoCompatiblePlatform,
ParseError, UnsupportedSetupCombo, DistroNotFound,
NoCompatibleArch, URIParseError]
m
()
installGHCBin
GHCTargetVersion
v
InstallDir
GHCupInternal
Bool
False
[]
(String -> Text
T.pack String
"install")
GHCTargetVersion
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
GHCTargetVersion -> String -> Excepts es' m ()
setGHC' GHCTargetVersion
v String
tmp
Maybe GHCTargetVersion
_ -> ()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
cabalVer of
Just Version
v -> do
Bool
isInstalled <- ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall (m :: * -> *) a.
Monad m =>
m a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool)
-> ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> ResourceT (ReaderT AppState m) Bool
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasDirs env, MonadCatch m) =>
Tool -> GHCTargetVersion -> m Bool
checkIfToolInstalled' Tool
Cabal (Version -> GHCTargetVersion
mkTVer Version
v)
Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
isInstalled (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
runInstTool' (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (m :: * -> *) env.
(MonadMask m, MonadCatch m, MonadReader env m, HasPlatformReq env,
HasGHCupInfo env, HasDirs env, HasSettings env, HasLog env,
MonadResource m, MonadIO m, MonadUnliftIO m, MonadFail m) =>
Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
m
()
installCabalBin
Version
v
InstallDir
GHCupInternal
Bool
False
Version
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts es' m ()
setCabal' Version
v String
tmp
Maybe Version
_ -> ()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
stackVer of
Just Version
v -> do
Bool
isInstalled <- ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall (m :: * -> *) a.
Monad m =>
m a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool)
-> ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> ResourceT (ReaderT AppState m) Bool
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasDirs env, MonadCatch m) =>
Tool -> GHCTargetVersion -> m Bool
checkIfToolInstalled' Tool
Stack (Version -> GHCTargetVersion
mkTVer Version
v)
Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
isInstalled (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
runInstTool' (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (m :: * -> *) env.
(MonadMask m, MonadCatch m, MonadReader env m, HasDirs env,
HasSettings env, HasPlatformReq env, HasGHCupInfo env, HasLog env,
MonadResource m, MonadIO m, MonadUnliftIO m, MonadFail m) =>
Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
URIParseError]
m
()
installStackBin
Version
v
InstallDir
GHCupInternal
Bool
False
Version
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts es' m ()
setStack' Version
v String
tmp
Maybe Version
_ -> ()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
hlsVer of
Just Version
v -> do
Bool
isInstalled <- ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall (m :: * -> *) a.
Monad m =>
m a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
m
a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool)
-> ResourceT (ReaderT AppState m) Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
Bool
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> ResourceT (ReaderT AppState m) Bool
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasDirs env, MonadCatch m) =>
Tool -> GHCTargetVersion -> m Bool
checkIfToolInstalled' Tool
HLS (Version -> GHCTargetVersion
mkTVer Version
v)
Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
isInstalled (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Bool
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
runInstTool' (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
ProcessError, DirNotEmpty, UninstallFailed, MergeFileTreeError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
ProcessError, DirNotEmpty, UninstallFailed, MergeFileTreeError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
())
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
ProcessError, DirNotEmpty, UninstallFailed, MergeFileTreeError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a b. (a -> b) -> a -> b
$ Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
ProcessError, DirNotEmpty, UninstallFailed, MergeFileTreeError,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall (m :: * -> *) env.
(MonadMask m, MonadCatch m, MonadReader env m, HasPlatformReq env,
HasGHCupInfo env, HasDirs env, HasSettings env, HasLog env,
MonadResource m, MonadIO m, MonadUnliftIO m, MonadFail m) =>
Version
-> InstallDir
-> Bool
-> Excepts
'[AlreadyInstalled, CopyError, DigestError, ContentLengthError,
GPGError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive,
TarDirDoesNotExist, ArchiveResult, FileAlreadyExistsError,
ProcessError, DirNotEmpty, UninstallFailed, MergeFileTreeError,
URIParseError]
m
()
installHLSBin
Version
v
InstallDir
GHCupInternal
Bool
False
Version
-> String
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall {w :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled w) NotInstalled w) w w
~ NotInstalled,
MonadFail m, MonadUnliftIO m, ToVariantMaybe NotInstalled w,
PopVariant NotInstalled w,
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled w) NotInstalled w),
MonadMask m, LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts w m ()
setHLS' Version
v String
tmp
Maybe Version
_ -> ()
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
()
forall a.
a
-> Excepts
'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet,
UnknownArchive, TarDirDoesNotExist, ProcessError, NotInstalled,
NoDownload, GPGError, DownloadFailed, DirNotEmpty, DigestError,
ContentLengthError, BuildFailed, ArchiveResult, AlreadyInstalled,
FileAlreadyExistsError, CopyError, UninstallFailed,
MergeFileTreeError, NoCompatiblePlatform, ParseError,
UnsupportedSetupCombo, DistroNotFound, NoCompatibleArch,
URIParseError]
(ResourceT (ReaderT AppState m))
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
installToolChain :: ( MonadFail m
, MonadThrow m
, MonadIO m
, MonadCatch m
)
=> Toolchain
-> FilePath
-> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
installToolChain :: (MonadFail m, MonadThrow m, MonadIO m, MonadCatch m) =>
Toolchain
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
installToolChain Toolchain{Maybe GHCTargetVersion
Maybe Version
ghcVer :: Toolchain -> Maybe GHCTargetVersion
cabalVer :: Toolchain -> Maybe Version
hlsVer :: Toolchain -> Maybe Version
stackVer :: Toolchain -> Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
..} String
tmp = do
case Maybe GHCTargetVersion
ghcVer of
Just GHCTargetVersion
v -> GHCTargetVersion
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
GHCTargetVersion -> String -> Excepts es' m ()
setGHC' GHCTargetVersion
v String
tmp
Maybe GHCTargetVersion
_ -> () -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall a. a -> Excepts '[NotInstalled] (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
cabalVer of
Just Version
v -> Version
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts es' m ()
setCabal' Version
v String
tmp
Maybe Version
_ -> () -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall a. a -> Excepts '[NotInstalled] (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
stackVer of
Just Version
v -> Version
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall {es' :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es')
es'
es'
~ NotInstalled,
MonadUnliftIO m, MonadMask m, MonadFail m,
ToVariantMaybe NotInstalled es', PopVariant NotInstalled es',
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled es') NotInstalled es'),
LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts es' m ()
setStack' Version
v String
tmp
Maybe Version
_ -> () -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall a. a -> Excepts '[NotInstalled] (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
case Maybe Version
hlsVer of
Just Version
v -> Version
-> String -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall {w :: [*]} {m :: * -> *} {env}.
(Index'
(IndexOf' (MaybeIndexOf' 0 NotInstalled w) NotInstalled w) w w
~ NotInstalled,
MonadFail m, MonadUnliftIO m, ToVariantMaybe NotInstalled w,
PopVariant NotInstalled w,
KnownNat
(IndexOf' (MaybeIndexOf' 0 NotInstalled w) NotInstalled w),
MonadMask m, LabelOptic "dirs" A_Lens env env Dirs Dirs,
LabelOptic "loggerConfig" A_Lens env env LoggerConfig LoggerConfig,
MonadReader env m) =>
Version -> String -> Excepts w m ()
setHLS' Version
v String
tmp
Maybe Version
_ -> () -> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
forall a. a -> Excepts '[NotInstalled] (ReaderT LeanAppState m) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
setGHC' :: GHCTargetVersion -> String -> Excepts es' m ()
setGHC' GHCTargetVersion
v String
tmp = do
Excepts es' m GHCTargetVersion -> Excepts es' m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts es' m GHCTargetVersion -> Excepts es' m ())
-> Excepts es' m GHCTargetVersion -> Excepts es' m ()
forall a b. (a -> b) -> a -> b
$ Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion)
-> Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion
forall a b. (a -> b) -> a -> b
$ GHCTargetVersion
-> SetGHC
-> Maybe String
-> Excepts '[NotInstalled] m GHCTargetVersion
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadThrow m,
MonadFail m, MonadIO m, MonadCatch m, MonadMask m,
MonadUnliftIO m) =>
GHCTargetVersion
-> SetGHC
-> Maybe String
-> Excepts '[NotInstalled] m GHCTargetVersion
setGHC GHCTargetVersion
v SetGHC
SetGHC_XYZ (String -> Maybe String
forall a. a -> Maybe a
Just String
tmp)
Excepts es' m GHCTargetVersion -> Excepts es' m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Excepts es' m GHCTargetVersion -> Excepts es' m ())
-> Excepts es' m GHCTargetVersion -> Excepts es' m ()
forall a b. (a -> b) -> a -> b
$ Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion)
-> Excepts '[NotInstalled] m GHCTargetVersion
-> Excepts es' m GHCTargetVersion
forall a b. (a -> b) -> a -> b
$ GHCTargetVersion
-> SetGHC
-> Maybe String
-> Excepts '[NotInstalled] m GHCTargetVersion
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadThrow m,
MonadFail m, MonadIO m, MonadCatch m, MonadMask m,
MonadUnliftIO m) =>
GHCTargetVersion
-> SetGHC
-> Maybe String
-> Excepts '[NotInstalled] m GHCTargetVersion
setGHC GHCTargetVersion
v SetGHC
SetGHCOnly (String -> Maybe String
forall a. a -> Maybe a
Just String
tmp)
setCabal' :: Version -> String -> Excepts es' m ()
setCabal' Version
v String
tmp = do
String
bin <- Excepts '[NotInstalled] m String -> Excepts es' m String
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m String -> Excepts es' m String)
-> Excepts '[NotInstalled] m String -> Excepts es' m String
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> Excepts '[NotInstalled] m String
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadThrow m,
MonadFail m, MonadIO m, MonadCatch m, MonadMask m,
MonadUnliftIO m) =>
Tool -> GHCTargetVersion -> Excepts '[NotInstalled] m String
whereIsTool Tool
Cabal (Version -> GHCTargetVersion
mkTVer Version
v)
String
cbin <- IO String -> Excepts es' m String
forall a. IO a -> Excepts es' m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> Excepts es' m String)
-> IO String -> Excepts es' m String
forall a b. (a -> b) -> a -> b
$ String -> IO String
canonicalizePath String
bin
m () -> Excepts es' m ()
forall (m :: * -> *) a. Monad m => m a -> Excepts es' m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> Excepts es' m ()) -> m () -> Excepts es' m ()
forall a b. (a -> b) -> a -> b
$ String -> String -> m ()
forall (m :: * -> *) env.
(MonadMask m, MonadThrow m, HasLog env, MonadIO m,
MonadReader env m, HasDirs env, MonadUnliftIO m, MonadFail m) =>
String -> String -> m ()
createLink (String -> ShowS
relativeSymlink String
tmp String
cbin) (String
tmp String -> ShowS
</> (String
"cabal" String -> ShowS
<.> String
exeExt))
setStack' :: Version -> String -> Excepts es' m ()
setStack' Version
v String
tmp = do
String
bin <- Excepts '[NotInstalled] m String -> Excepts es' m String
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m String -> Excepts es' m String)
-> Excepts '[NotInstalled] m String -> Excepts es' m String
forall a b. (a -> b) -> a -> b
$ Tool -> GHCTargetVersion -> Excepts '[NotInstalled] m String
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadThrow m,
MonadFail m, MonadIO m, MonadCatch m, MonadMask m,
MonadUnliftIO m) =>
Tool -> GHCTargetVersion -> Excepts '[NotInstalled] m String
whereIsTool Tool
Stack (Version -> GHCTargetVersion
mkTVer Version
v)
String
cbin <- IO String -> Excepts es' m String
forall a. IO a -> Excepts es' m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> Excepts es' m String)
-> IO String -> Excepts es' m String
forall a b. (a -> b) -> a -> b
$ String -> IO String
canonicalizePath String
bin
m () -> Excepts es' m ()
forall (m :: * -> *) a. Monad m => m a -> Excepts es' m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> Excepts es' m ()) -> m () -> Excepts es' m ()
forall a b. (a -> b) -> a -> b
$ String -> String -> m ()
forall (m :: * -> *) env.
(MonadMask m, MonadThrow m, HasLog env, MonadIO m,
MonadReader env m, HasDirs env, MonadUnliftIO m, MonadFail m) =>
String -> String -> m ()
createLink (String -> ShowS
relativeSymlink String
tmp String
cbin) (String
tmp String -> ShowS
</> (String
"stack" String -> ShowS
<.> String
exeExt))
setHLS' :: Version -> String -> Excepts w m ()
setHLS' Version
v String
tmp = do
Dirs {String
GHCupPath
baseDir :: GHCupPath
binDir :: String
cacheDir :: GHCupPath
logsDir :: GHCupPath
confDir :: GHCupPath
dbDir :: GHCupPath
recycleDir :: GHCupPath
tmpDir :: GHCupPath
msys2Dir :: String
$sel:baseDir:Dirs :: Dirs -> GHCupPath
$sel:binDir:Dirs :: Dirs -> String
$sel:cacheDir:Dirs :: Dirs -> GHCupPath
$sel:logsDir:Dirs :: Dirs -> GHCupPath
$sel:confDir:Dirs :: Dirs -> GHCupPath
$sel:dbDir:Dirs :: Dirs -> GHCupPath
$sel:recycleDir:Dirs :: Dirs -> GHCupPath
$sel:tmpDir:Dirs :: Dirs -> GHCupPath
$sel:msys2Dir:Dirs :: Dirs -> String
..} <- Excepts w m Dirs
forall env (m :: * -> *).
(MonadReader env m, LabelOptic' "dirs" A_Lens env Dirs) =>
m Dirs
getDirs
Bool
legacy <- Version -> Excepts w m Bool
forall (m :: * -> *) env.
(MonadIO m, MonadReader env m, HasDirs env, MonadCatch m) =>
Version -> m Bool
isLegacyHLS Version
v
if Bool
legacy
then do
String
hlsWrapper <- forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE @_ @'[NotInstalled] (Excepts '[NotInstalled] m String -> Excepts w m String)
-> Excepts '[NotInstalled] m String -> Excepts w m String
forall a b. (a -> b) -> a -> b
$ Version -> m (Maybe String)
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, MonadThrow m, MonadIO m) =>
Version -> m (Maybe String)
hlsWrapperBinary Version
v m (Maybe String)
-> NotInstalled -> Excepts '[NotInstalled] m String
forall e (es :: [*]) a (m :: * -> *).
(Monad m, e :< es) =>
m (Maybe a) -> e -> Excepts es m a
!? (Tool -> GHCTargetVersion -> NotInstalled
NotInstalled Tool
HLS (Version -> GHCTargetVersion
mkTVer Version
v))
String
cw <- IO String -> Excepts w m String
forall a. IO a -> Excepts w m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> Excepts w m String)
-> IO String -> Excepts w m String
forall a b. (a -> b) -> a -> b
$ String -> IO String
canonicalizePath (String
binDir String -> ShowS
</> String
hlsWrapper)
m () -> Excepts w m ()
forall (m :: * -> *) a. Monad m => m a -> Excepts w m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> Excepts w m ()) -> m () -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ String -> String -> m ()
forall (m :: * -> *) env.
(MonadMask m, MonadThrow m, HasLog env, MonadIO m,
MonadReader env m, HasDirs env, MonadUnliftIO m, MonadFail m) =>
String -> String -> m ()
createLink (String -> ShowS
relativeSymlink String
tmp String
cw) (String
tmp String -> ShowS
</> ShowS
takeFileName String
cw)
[String]
hlsBins <- Version -> Maybe Version -> Excepts w m [String]
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, MonadIO m) =>
Version -> Maybe Version -> m [String]
hlsServerBinaries Version
v Maybe Version
forall a. Maybe a
Nothing Excepts w m [String]
-> ([String] -> Excepts w m [String]) -> Excepts w m [String]
forall a b. Excepts w m a -> (a -> Excepts w m b) -> Excepts w m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO [String] -> Excepts w m [String]
forall a. IO a -> Excepts w m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [String] -> Excepts w m [String])
-> ([String] -> IO [String]) -> [String] -> Excepts w m [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO String) -> [String] -> IO [String]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> [a] -> f [b]
traverse (String -> IO String
canonicalizePath (String -> IO String) -> ShowS -> String -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
binDir String -> ShowS
</>))
[String] -> (String -> Excepts w m ()) -> Excepts w m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [String]
hlsBins ((String -> Excepts w m ()) -> Excepts w m ())
-> (String -> Excepts w m ()) -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ \String
bin ->
m () -> Excepts w m ()
forall (m :: * -> *) a. Monad m => m a -> Excepts w m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m () -> Excepts w m ()) -> m () -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ String -> String -> m ()
forall (m :: * -> *) env.
(MonadMask m, MonadThrow m, HasLog env, MonadIO m,
MonadReader env m, HasDirs env, MonadUnliftIO m, MonadFail m) =>
String -> String -> m ()
createLink (String -> ShowS
relativeSymlink String
tmp String
bin) (String
tmp String -> ShowS
</> ShowS
takeFileName String
bin)
Excepts '[NotInstalled] m () -> Excepts w m ()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m () -> Excepts w m ())
-> Excepts '[NotInstalled] m () -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadIO m,
MonadMask m, MonadFail m, MonadUnliftIO m) =>
Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
setHLS Version
v SetHLS
SetHLSOnly (String -> Maybe String
forall a. a -> Maybe a
Just String
tmp)
else do
Excepts '[NotInstalled] m () -> Excepts w m ()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m () -> Excepts w m ())
-> Excepts '[NotInstalled] m () -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadIO m,
MonadMask m, MonadFail m, MonadUnliftIO m) =>
Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
setHLS Version
v SetHLS
SetHLS_XYZ (String -> Maybe String
forall a. a -> Maybe a
Just String
tmp)
Excepts '[NotInstalled] m () -> Excepts w m ()
forall (es' :: [*]) (es :: [*]) a (m :: * -> *).
(Monad m, VEitherLift es es') =>
Excepts es m a -> Excepts es' m a
liftE (Excepts '[NotInstalled] m () -> Excepts w m ())
-> Excepts '[NotInstalled] m () -> Excepts w m ()
forall a b. (a -> b) -> a -> b
$ Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
forall env (m :: * -> *).
(MonadReader env m, HasDirs env, HasLog env, MonadIO m,
MonadMask m, MonadFail m, MonadUnliftIO m) =>
Version -> SetHLS -> Maybe String -> Excepts '[NotInstalled] m ()
setHLS Version
v SetHLS
SetHLSOnly (String -> Maybe String
forall a. a -> Maybe a
Just String
tmp)
createTmpDir :: ( MonadUnliftIO m
, MonadCatch m
, MonadThrow m
, MonadMask m
, MonadIO m
)
=> Toolchain
-> ReaderT LeanAppState m FilePath
createTmpDir :: (MonadUnliftIO m, MonadCatch m, MonadThrow m, MonadMask m,
MonadIO m) =>
Toolchain -> ReaderT LeanAppState m String
createTmpDir Toolchain
toolchain =
case Maybe String
runBinDir of
Just String
bindir -> do
IO () -> ReaderT LeanAppState m ()
forall a. IO a -> ReaderT LeanAppState m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT LeanAppState m ())
-> IO () -> ReaderT LeanAppState m ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
createDirRecursive' String
bindir
IO String -> ReaderT LeanAppState m String
forall a. IO a -> ReaderT LeanAppState m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> ReaderT LeanAppState m String)
-> IO String -> ReaderT LeanAppState m String
forall a b. (a -> b) -> a -> b
$ String -> IO String
canonicalizePath String
bindir
Maybe String
Nothing -> do
String
d <- Monad m => Toolchain -> ReaderT LeanAppState m String
Toolchain -> ReaderT LeanAppState m String
predictableTmpDir Toolchain
toolchain
IO () -> ReaderT LeanAppState m ()
forall a. IO a -> ReaderT LeanAppState m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT LeanAppState m ())
-> IO () -> ReaderT LeanAppState m ()
forall a b. (a -> b) -> a -> b
$ String -> IO ()
createDirRecursive' String
d
IO String -> ReaderT LeanAppState m String
forall a. IO a -> ReaderT LeanAppState m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO String -> ReaderT LeanAppState m String)
-> IO String -> ReaderT LeanAppState m String
forall a b. (a -> b) -> a -> b
$ String -> IO String
canonicalizePath String
d
predictableTmpDir :: Monad m
=> Toolchain
-> ReaderT LeanAppState m FilePath
predictableTmpDir :: Monad m => Toolchain -> ReaderT LeanAppState m String
predictableTmpDir (Toolchain Maybe GHCTargetVersion
Nothing Maybe Version
Nothing Maybe Version
Nothing Maybe Version
Nothing) = do
Dirs { GHCupPath
$sel:tmpDir:Dirs :: Dirs -> GHCupPath
tmpDir :: GHCupPath
tmpDir } <- ReaderT LeanAppState m Dirs
forall env (m :: * -> *).
(MonadReader env m, LabelOptic' "dirs" A_Lens env Dirs) =>
m Dirs
getDirs
String -> ReaderT LeanAppState m String
forall a. a -> ReaderT LeanAppState m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GHCupPath -> String
fromGHCupPath GHCupPath
tmpDir String -> ShowS
</> String
"ghcup-none")
predictableTmpDir Toolchain{Maybe GHCTargetVersion
Maybe Version
ghcVer :: Toolchain -> Maybe GHCTargetVersion
cabalVer :: Toolchain -> Maybe Version
hlsVer :: Toolchain -> Maybe Version
stackVer :: Toolchain -> Maybe Version
ghcVer :: Maybe GHCTargetVersion
cabalVer :: Maybe Version
hlsVer :: Maybe Version
stackVer :: Maybe Version
..} = do
Dirs { GHCupPath
$sel:tmpDir:Dirs :: Dirs -> GHCupPath
tmpDir :: GHCupPath
tmpDir } <- ReaderT LeanAppState m Dirs
forall env (m :: * -> *).
(MonadReader env m, LabelOptic' "dirs" A_Lens env Dirs) =>
m Dirs
getDirs
String -> ReaderT LeanAppState m String
forall a. a -> ReaderT LeanAppState m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> ReaderT LeanAppState m String)
-> String -> ReaderT LeanAppState m String
forall a b. (a -> b) -> a -> b
$ GHCupPath -> String
fromGHCupPath GHCupPath
tmpDir
String -> ShowS
</> (String
"ghcup-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"_"
( [String]
-> (GHCTargetVersion -> [String])
-> Maybe GHCTargetVersion
-> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ( (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> [String])
-> (GHCTargetVersion -> String) -> GHCTargetVersion -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"ghc-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<>) ShowS -> (GHCTargetVersion -> String) -> GHCTargetVersion -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String)
-> (GHCTargetVersion -> Text) -> GHCTargetVersion -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GHCTargetVersion -> Text
tVerToText) Maybe GHCTargetVersion
ghcVer
[String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<> [String] -> (Version -> [String]) -> Maybe Version -> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ( (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> [String]) -> (Version -> String) -> Version -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"cabal-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<>) ShowS -> (Version -> String) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String) -> (Version -> Text) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Text
prettyVer) Maybe Version
cabalVer
[String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<> [String] -> (Version -> [String]) -> Maybe Version -> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ( (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> [String]) -> (Version -> String) -> Version -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"hls-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<>) ShowS -> (Version -> String) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String) -> (Version -> Text) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Text
prettyVer) Maybe Version
hlsVer
[String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<> [String] -> (Version -> [String]) -> Maybe Version -> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ( (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> [String]) -> (Version -> String) -> Version -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"stack-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<>) ShowS -> (Version -> String) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String) -> (Version -> Text) -> Version -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Text
prettyVer) Maybe Version
stackVer
)
)
data Toolchain = Toolchain
{ Toolchain -> Maybe GHCTargetVersion
ghcVer :: Maybe GHCTargetVersion
, Toolchain -> Maybe Version
cabalVer :: Maybe Version
, Toolchain -> Maybe Version
hlsVer :: Maybe Version
, Toolchain -> Maybe Version
stackVer :: Maybe Version
} deriving Int -> Toolchain -> ShowS
[Toolchain] -> ShowS
Toolchain -> String
(Int -> Toolchain -> ShowS)
-> (Toolchain -> String)
-> ([Toolchain] -> ShowS)
-> Show Toolchain
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Toolchain -> ShowS
showsPrec :: Int -> Toolchain -> ShowS
$cshow :: Toolchain -> String
show :: Toolchain -> String
$cshowList :: [Toolchain] -> ShowS
showList :: [Toolchain] -> ShowS
Show