Copyright | (c) Julian Ospald 2020 |
---|---|
License | LGPL-3.0 |
Maintainer | hasufell@hasufell.de |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
This module contains the main functions that correspond to the command line interface, like installation, listing versions and so on.
These are the entry points.
Synopsis
- installGHCBindist :: (MonadFail m, MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m) => DownloadInfo -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installPackedGHC :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m) => Path Abs -> Maybe TarDir -> Path Abs -> Version -> PlatformRequest -> Excepts '[BuildFailed, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installUnpackedGHC :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m) => Path Abs -> Path Abs -> Version -> PlatformRequest -> Excepts '[ProcessError] m ()
- installGHCBin :: (MonadFail m, MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m) => GHCupDownloads -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installCabalBindist :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => DownloadInfo -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installCabalBin :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => GHCupDownloads -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installHLSBindist :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => DownloadInfo -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- installHLSBin :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => GHCupDownloads -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m ()
- setGHC :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m, MonadCatch m) => GHCTargetVersion -> SetGHC -> Excepts '[NotInstalled] m GHCTargetVersion
- setCabal :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m ()
- setHLS :: (MonadCatch m, MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m ()
- data ListCriteria
- data ListResult = ListResult {}
- availableToolVersions :: GHCupDownloads -> Tool -> Map Version [Tag]
- listVersions :: (MonadCatch m, MonadLogger m, MonadThrow m, MonadLogger m, MonadIO m, MonadReader AppState m) => GHCupDownloads -> Maybe Tool -> Maybe ListCriteria -> PlatformRequest -> m [ListResult]
- rmGHCVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => GHCTargetVersion -> Excepts '[NotInstalled] m ()
- rmCabalVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => Version -> Excepts '[NotInstalled] m ()
- rmHLSVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => Version -> Excepts '[NotInstalled] m ()
- getDebugInfo :: (MonadReader AppState m, MonadLogger m, MonadCatch m, MonadIO m) => Excepts '[NoCompatiblePlatform, NoCompatibleArch, DistroNotFound] m DebugInfo
- compileGHC :: (MonadMask m, MonadReader AppState m, MonadThrow m, MonadResource m, MonadLogger m, MonadIO m, MonadFail m) => GHCupDownloads -> GHCTargetVersion -> Either Version (Path Abs) -> Maybe Int -> Maybe (Path Abs) -> Maybe (Path Abs) -> [Text] -> PlatformRequest -> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, GHCupSetError, NoDownload, NotFoundInPATH, PatchFailed, UnknownArchive, TarDirDoesNotExist, NotInstalled, ArchiveResult] m ()
- upgradeGHCup :: (MonadMask m, MonadReader AppState m, MonadCatch m, MonadLogger m, MonadThrow m, MonadResource m, MonadIO m) => GHCupDownloads -> Maybe (Path Abs) -> Bool -> PlatformRequest -> Excepts '[CopyError, DigestError, DownloadFailed, NoDownload, NoUpdate] m Version
- postGHCInstall :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m, MonadCatch m) => GHCTargetVersion -> Excepts '[NotInstalled] m ()
Documentation
:: (MonadFail m, MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m) | |
=> DownloadInfo | where/how to download |
-> Version | the version to install |
-> PlatformRequest | the platform to install on |
-> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () |
Like installGHCBin
, except takes the DownloadInfo
as
argument instead of looking it up from GHCupDownloads
.
:: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m) | |
=> Path Abs | Path to the packed GHC bindist |
-> Maybe TarDir | Subdir of the archive |
-> Path Abs | Path to install to |
-> Version | The GHC version |
-> PlatformRequest | |
-> Excepts '[BuildFailed, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () |
Install a packed GHC distribution. This only deals with unpacking and the GHC build system and nothing else.
:: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m) | |
=> Path Abs | Path to the unpacked GHC bindist (where the configure script resides) |
-> Path Abs | Path to install to |
-> Version | The GHC version |
-> PlatformRequest | |
-> Excepts '[ProcessError] m () |
Install an unpacked GHC distribution. This only deals with the GHC build system and nothing else.
:: (MonadFail m, MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m) | |
=> GHCupDownloads | the download info to look up the tarball from |
-> Version | the version to install |
-> PlatformRequest | the platform to install on |
-> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () |
Installs GHC into ~/.ghcup/ghc/<ver>
and places the
following symlinks in ~/.ghcup/bin
:
ghc-x.y.z -> ../ghc/x.y.z/bin/ghc
ghc-x.y -> ../ghc/x.y.z/bin/ghc
(if x.y.z is the latest x.y version)
installCabalBindist :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => DownloadInfo -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () Source #
Like installCabalBin
, except takes the DownloadInfo
as
argument instead of looking it up from GHCupDownloads
.
installCabalBin :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => GHCupDownloads -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () Source #
Installs cabal into ~/.ghcup/bin/cabal-<ver>
and
creates a default cabal -> cabal-x.y.z.q
symlink for
the latest installed version.
installHLSBindist :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => DownloadInfo -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () Source #
Like 'installHLSBin, except takes the DownloadInfo
as
argument instead of looking it up from GHCupDownloads
.
installHLSBin :: (MonadMask m, MonadCatch m, MonadReader AppState m, MonadLogger m, MonadResource m, MonadIO m, MonadFail m) => GHCupDownloads -> Version -> PlatformRequest -> Excepts '[AlreadyInstalled, CopyError, DigestError, DownloadFailed, NoDownload, NotInstalled, UnknownArchive, TarDirDoesNotExist, ArchiveResult] m () Source #
Installs hls binaries haskell-language-server-<ghcver>
into ~/.ghcup/bin/
, as well as haskell-languager-server-wrapper
.
setGHC :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m, MonadCatch m) => GHCTargetVersion -> SetGHC -> Excepts '[NotInstalled] m GHCTargetVersion Source #
Set GHC symlinks in ~/.ghcup/bin
for the requested GHC version. The behavior depends
on SetGHC
:
- SetGHCOnly:
~/.ghcup/bin/ghc -> ~/.ghcup/ghc/<ver>/bin/ghc
- SetGHC_XY:
~/.ghcup/bin/ghc-X.Y -> ~/.ghcup/ghc/<ver>/bin/ghc
- SetGHC_XYZ:
~/.ghcup/bin/ghc-<ver> -> ~/.ghcup/ghc/<ver>/bin/ghc
Additionally creates a ~/.ghcup/share -> ~/.ghcup/ghc/<ver>/share symlink
for SetGHCOnly
constructor.
setCabal :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m () Source #
Set the ~/.ghcup/bin/cabal
symlink.
setHLS :: (MonadCatch m, MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m () Source #
Set the haskell-language-server symlinks.
data ListCriteria Source #
Filter data type for listVersions
.
Instances
Show ListCriteria Source # | |
Defined in GHCup showsPrec :: Int -> ListCriteria -> ShowS # show :: ListCriteria -> String # showList :: [ListCriteria] -> ShowS # |
data ListResult Source #
A list result describes a single tool version and various of its properties.
ListResult | |
|
Instances
Eq ListResult Source # | |
Defined in GHCup (==) :: ListResult -> ListResult -> Bool # (/=) :: ListResult -> ListResult -> Bool # | |
Ord ListResult Source # | |
Defined in GHCup compare :: ListResult -> ListResult -> Ordering # (<) :: ListResult -> ListResult -> Bool # (<=) :: ListResult -> ListResult -> Bool # (>) :: ListResult -> ListResult -> Bool # (>=) :: ListResult -> ListResult -> Bool # max :: ListResult -> ListResult -> ListResult # min :: ListResult -> ListResult -> ListResult # | |
Show ListResult Source # | |
Defined in GHCup showsPrec :: Int -> ListResult -> ShowS # show :: ListResult -> String # showList :: [ListResult] -> ShowS # |
availableToolVersions :: GHCupDownloads -> Tool -> Map Version [Tag] Source #
Extract all available tool versions and their tags.
listVersions :: (MonadCatch m, MonadLogger m, MonadThrow m, MonadLogger m, MonadIO m, MonadReader AppState m) => GHCupDownloads -> Maybe Tool -> Maybe ListCriteria -> PlatformRequest -> m [ListResult] Source #
List all versions from the download info, as well as stray versions.
rmGHCVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => GHCTargetVersion -> Excepts '[NotInstalled] m () Source #
Delete a ghc version and all its symlinks.
This may leave GHCup without a "set" version. Will try to fix the ghc-x.y symlink after removal (e.g. to an older version).
rmCabalVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => Version -> Excepts '[NotInstalled] m () Source #
Delete a cabal version. Will try to fix the cabal
symlink
after removal (e.g. setting it to an older version).
rmHLSVer :: (MonadReader AppState m, MonadThrow m, MonadLogger m, MonadIO m, MonadFail m, MonadCatch m) => Version -> Excepts '[NotInstalled] m () Source #
Delete a hls version. Will try to fix the hls symlinks after removal (e.g. setting it to an older version).
getDebugInfo :: (MonadReader AppState m, MonadLogger m, MonadCatch m, MonadIO m) => Excepts '[NoCompatiblePlatform, NoCompatibleArch, DistroNotFound] m DebugInfo Source #
:: (MonadMask m, MonadReader AppState m, MonadThrow m, MonadResource m, MonadLogger m, MonadIO m, MonadFail m) | |
=> GHCupDownloads | |
-> GHCTargetVersion | version to install |
-> Either Version (Path Abs) | version to bootstrap with |
-> Maybe Int | jobs |
-> Maybe (Path Abs) | build config |
-> Maybe (Path Abs) | patch directory |
-> [Text] | additional args to ./configure |
-> PlatformRequest | |
-> Excepts '[AlreadyInstalled, BuildFailed, DigestError, DownloadFailed, GHCupSetError, NoDownload, NotFoundInPATH, PatchFailed, UnknownArchive, TarDirDoesNotExist, NotInstalled, ArchiveResult] m () |
Compile a GHC from source. This behaves wrt symlinks and installation
the same as installGHCBin
.
:: (MonadMask m, MonadReader AppState m, MonadCatch m, MonadLogger m, MonadThrow m, MonadResource m, MonadIO m) | |
=> GHCupDownloads | |
-> Maybe (Path Abs) | full file destination to write ghcup into |
-> Bool | whether to force update regardless of currently installed version |
-> PlatformRequest | |
-> Excepts '[CopyError, DigestError, DownloadFailed, NoDownload, NoUpdate] m Version |
Upgrade ghcup and place it in ~/.ghcup/bin/ghcup
,
if no path is provided.
postGHCInstall :: (MonadReader AppState m, MonadLogger m, MonadThrow m, MonadFail m, MonadIO m, MonadCatch m) => GHCTargetVersion -> Excepts '[NotInstalled] m () Source #
Creates ghc-x.y.z
and ghc-x.y
symlinks. This is used for
both installing from source and bindist.