diff --git a/TODO.md b/TODO.md index c58087d..8e0d89c 100644 --- a/TODO.md +++ b/TODO.md @@ -2,22 +2,29 @@ ## Now -* static builds and host ghcup (and fix BinaryDownloads) -* interoperability with old ghcup +* print-system-reqs -* sign the JSON? (Or check gpg keys?) +* set proper ghcup URL + +## Cleanups + +* avoid alternative for IO +* don't use Excepts? ## Maybe -* maybe: download progress * maybe: changelog Show the changelog of a GHC release (online) -* maybe: print-system-reqs Print an approximation of system requirements * OS faking +* sign the JSON? (Or check gpg keys?) * testing (especially distro detection -> unit tests) +* hard cleanup command? + ## Later +* static builds and host ghcup +* do bootstrap-haskell with new ghcup * add support for RC/alpha/HEAD versions * check for updates on start * use plucky or oops instead of Excepts diff --git a/app/ghcup-gen/BinaryDownloads.hs b/app/ghcup-gen/BinaryDownloads.hs deleted file mode 100644 index 0fa393b..0000000 --- a/app/ghcup-gen/BinaryDownloads.hs +++ /dev/null @@ -1,1502 +0,0 @@ -{-# LANGUAGE QuasiQuotes #-} - - -module BinaryDownloads where - -import GHCup.Types -import GHCup.Utils.String.QQ -import GHCup.Utils.Version.QQ - -import HPath -import URI.ByteString.QQ - -import qualified Data.Map as M - - - ------------------ - --[ GHC 7.10.3 ]-- - ------------------ - -ghc_7103_64_cenots67 :: DownloadInfo -ghc_7103_64_cenots67 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-centos67-linux.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|a8957f7a2fd81720c5d3dc403571d77d31115ff5f42edb2917c36d8e714220d4|] - -ghc_7103_32_cenots67 :: DownloadInfo -ghc_7103_32_cenots67 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-centos67-linux.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|c50aa20275e8d1ba9148f380eb7598bc148143281fc17c9acd38ea7b325852bd|] - -ghc_7103_64_deb8 :: DownloadInfo -ghc_7103_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-deb8-linux.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|01cfbad8dff1e8b34a5fdca8caeaf843b56e36af919e29cd68870d2588563db5|] - -ghc_7103_32_deb8 :: DownloadInfo -ghc_7103_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-deb8-linux.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|d2ccf072457fb100503f6f5430a1e3589ca525a97424263d036b0550bc277f0c|] - -ghc_7103_64_darwin :: DownloadInfo -ghc_7103_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-apple-darwin.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|80893e367e8318105f7db2064adf202e3d96b1f014e792b73e92f2cacf0b757a|] - -ghc_7103_64_freebsd :: DownloadInfo -ghc_7103_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-portbld-freebsd.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|2aa396edd2bb651f4bc7eef7a396913ea24923de5aafdc76df6295333e487e48|] - -ghc_7103_32_freebsd :: DownloadInfo -ghc_7103_32_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-portbld-freebsd.tar.bz2|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|3dde05577c6f94dcb0ba201ebd53ab88553bbc9a3aa8e72237162ed7a9d588a3|] - -ghc_7103_64_musl :: DownloadInfo -ghc_7103_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-7.10.3-musl/ghc-7.10.3-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-7.10.3|] :: Path Rel)) - [s|8b83dfa8b85ba45e24768337254e6eb23c0855df1a5168671a3a8090b6d0964e|] - - - - - ----------------- - --[ GHC 8.0.2 ]-- - ----------------- - - -ghc_802_64_deb7 :: DownloadInfo -ghc_802_64_deb7 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-deb7-linux.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|b2f5c304b57ac5840a0d2ef763a3c6fa858c70840f749cfad12ed227da973c0a|] - -ghc_802_32_deb7 :: DownloadInfo -ghc_802_32_deb7 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-i386-deb7-linux.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|07ead3a49f8c9df4b429e7a2f96f6f31bcab8d3ff8277a9aed0201d13ddad448|] - -ghc_802_64_deb8 :: DownloadInfo -ghc_802_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|5ee68290db00ca0b79d57bc3a5bdce470de9ce9da0b098a7ce6c504605856c8f|] - -ghc_802_32_deb8 :: DownloadInfo -ghc_802_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|818621342a2161b8afcc995a0765816bb40aefbfa1db2c8a7d59c04d8b18228a|] - -ghc_802_64_freebsd :: DownloadInfo -ghc_802_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-portbld-freebsd.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|b36a20e5cae24d70bbb6116ae486f21811e9384f15d3892d260f02fba3e3bb8c|] - -ghc_802_64_darwin :: DownloadInfo -ghc_802_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|ff50a2df9f002f33b9f09717ebf5ec5a47906b9b65cc57b1f9849f8b2e06788d|] - -ghc_802_64_musl :: DownloadInfo -ghc_802_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|7f9ef3e048ca6f2a2a589e6c168d8c7699fbe32b1b39a9d7c72eff9b26e90c67|] - -ghc_802_32_musl :: DownloadInfo -ghc_802_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.0.2|] :: Path Rel)) - [s|815c68181013cd3f4dc748ddb5502a5e7a1a4011ba57d8eff6d66da411c72e84|] - - - - - ----------------- - --[ GHC 8.2.2 ]-- - ----------------- - - -ghc_822_64_deb7 :: DownloadInfo -ghc_822_64_deb7 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-deb7-linux.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|cd7afbca54edf9890da9f432c63366556246c85c1198e40c99df5af01c555834|] - -ghc_822_32_deb7 :: DownloadInfo -ghc_822_32_deb7 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-i386-deb7-linux.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|cd18766b1a9b74fc6c90003a719ecab158f281f9a755d8b1bd3fd764ba6947b5|] - -ghc_822_64_deb8 :: DownloadInfo -ghc_822_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|48e205c62b9dc1ccf6739a4bc15a71e56dde2f891a9d786a1b115f0286111b2a|] - -ghc_822_32_deb8 :: DownloadInfo -ghc_822_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|9e67d72d76482e0ba91c718e727b00386a1a12a32ed719714976dc56ca8c8223|] - -ghc_822_64_unknown :: DownloadInfo -ghc_822_64_unknown = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-unknown-linux.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|cd7afbca54edf9890da9f432c63366556246c85c1198e40c99df5af01c555834|] - -ghc_822_64_darwin :: DownloadInfo -ghc_822_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|f90fcf62f7e0936a6dfc3601cf663729bfe9bbf85097d2d75f0a16f8c2e95c27|] - -ghc_822_64_freebsd10 :: DownloadInfo -ghc_822_64_freebsd10 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-portbld10_3-freebsd.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|9e99aaeaec4b2c6d660d80246c0d4dbd41fda88f1eb7a908b29dc8fa8d663949|] - -ghc_822_64_freebsd11 :: DownloadInfo -ghc_822_64_freebsd11 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-portbld11-freebsd.tar.xz|] - (Just ([rel|ghc-8.2.2|] :: Path Rel)) - [s|cd351c704b92b9af23994024df07de8ca7090ea7675d5c8b14b2be857a46d804|] - - - - - ----------------- - --[ GHC 8.4.1 ]-- - ----------------- - - - -ghc_841_64_deb8 :: DownloadInfo -ghc_841_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|427c77a934b30c3f1de992c38c072afb4323fe6fb30dbac919ca8cb6ae98fbd9|] - -ghc_841_32_deb8 :: DownloadInfo -ghc_841_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|c56c589c76c7ddcb77cdbef885a811761e669d3e76868b723d5be56dedcd4f69|] - -ghc_841_64_fedora :: DownloadInfo -ghc_841_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|89328a013e64b9b56825a9071fea5616ddd623d37fd41e8fb913dfebc609e7ea|] - -ghc_841_64_darwin :: DownloadInfo -ghc_841_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|d774e39f3a0105843efd06709b214ee332c30203e6c5902dd6ed45e36285f9b7|] - -ghc_841_64_freebsd :: DownloadInfo -ghc_841_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-portbld11-freebsd.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|e748daec098445c6190090fe32bb2817a1140553be5acd2188e1af05ad24e5aa|] - -ghc_841_64_musl :: DownloadInfo -ghc_841_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|82d4ea6247a91e7e76065c0cdf66eec813ab679c1f24de0fb92c89bba3ef27f2|] - -ghc_841_32_musl :: DownloadInfo -ghc_841_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.1|] :: Path Rel)) - [s|e5feee34b58c1a1cd6c270fbe696c178a4649675398f4e0d56a4bfad9641b736|] - - - - ----------------- - --[ GHC 8.4.2 ]-- - ----------------- - - - -ghc_842_64_deb8 :: DownloadInfo -ghc_842_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|246f66eb56f4ad0f1c7755502cfc8f9972f2d067dede17e151f6f479c1f76fbd|] - -ghc_842_32_deb8 :: DownloadInfo -ghc_842_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|2d849c30b4c1eac25dc74333501920921e22fa483153f404993808bbda93df05|] - -ghc_842_64_deb9 :: DownloadInfo -ghc_842_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|3f4f5bbd2cdab4e7015ada9196d8d9b3a1ad274293cef011f85c46854596cb57|] - -ghc_842_64_fedora :: DownloadInfo -ghc_842_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|d057b5c833596dbe4ae5d0dc2994f6cc5d0f4c2a21ea1d7900821d165fd4e846|] - -ghc_842_64_darwin :: DownloadInfo -ghc_842_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|87469222042b9ac23f9db216a8d4e5107297bdbbb99df71eb4d9e7208455def2|] - -ghc_842_64_freebsd :: DownloadInfo -ghc_842_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-portbld-freebsd.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|e9ed417fdf94c2ff2c6e344ed16f332bf6b591511f6442c0d9ea94854882b66c|] - -ghc_842_64_musl :: DownloadInfo -ghc_842_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|3ebdb6e8001679e8722bd75a47805f1b3c1b25b37c4d237a7aaa4d66162f699f|] - -ghc_842_32_musl :: DownloadInfo -ghc_842_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.2|] :: Path Rel)) - [s|a43ac57214764717f0ffe515ef47b84e938f0a4fa8ff875773d6ba315b940835|] - - - - ----------------- - --[ GHC 8.4.3 ]-- - ----------------- - - -ghc_843_64_deb8 :: DownloadInfo -ghc_843_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|30a402c6d4754a6c020e0547f19ae3ac42e907e35349aa932d347f73e421a8e2|] - -ghc_843_32_deb8 :: DownloadInfo -ghc_843_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|f5763983a26dedd88b65a0b17267359a3981b83a642569b26334423f684f8b8c|] - -ghc_843_64_deb9 :: DownloadInfo -ghc_843_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|2e4f53afb872ad9c640f31aea283b3ff4c5028b65808a1920739900aef7d15c9|] - -ghc_843_64_fedora :: DownloadInfo -ghc_843_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|269e7a4d3f336491b88409a020998122b30a3a729af78d33be86d3b3f8000c3e|] - -ghc_843_64_darwin :: DownloadInfo -ghc_843_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|af0b455f6c46b9802b4b48dad996619cfa27cc6e2bf2ce5532387b4a8c00aa64|] - -ghc_843_64_musl :: DownloadInfo -ghc_843_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|0f05c67e3fd29a3f505abb77e9c39349d312cdc1a566263b8f4b227d085906bc|] - -ghc_843_32_musl :: DownloadInfo -ghc_843_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.3|] :: Path Rel)) - [s|3a9a1ceb8eef234023fc36600245a03772bcb46b2abac41f6394104feaec8c43|] - - - - - ----------------- - --[ GHC 8.4.4 ]-- - ----------------- - - -ghc_844_64_deb8 :: DownloadInfo -ghc_844_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|4c2a8857f76b7f3e34ecba0b51015d5cb8b767fe5377a7ec477abde10705ab1a|] - -ghc_844_32_deb8 :: DownloadInfo -ghc_844_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|678bafaabea6af70ba71ccf0210bb437f9f5591ec28ac1cbbbd5f7aa6894e450|] - -ghc_844_64_deb9 :: DownloadInfo -ghc_844_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|47c80a32d8f02838a2401414c94ba260d1fe82b7d090479994522242c767cc83|] - -ghc_844_64_centos :: DownloadInfo -ghc_844_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-centos70-linux.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|83a96650f5a92b1e4d7651d256d6438624342d40e780e68125033435a54cd674|] - -ghc_844_64_fedora :: DownloadInfo -ghc_844_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|8ab2befddc14d1434d0aad0c5d3c7e0c2b78ff84caa3429fa62527bfc6b86095|] - -ghc_844_64_darwin :: DownloadInfo -ghc_844_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|28dc89ebd231335337c656f4c5ead2ae2a1acc166aafe74a14f084393c5ef03a|] - -ghc_844_64_freebsd :: DownloadInfo -ghc_844_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-portbld-freebsd11.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|44fbd142d1c355d6110595c59c760e2c73866ff9259ec85ebf814edb244d1940|] - -ghc_844_64_musl :: DownloadInfo -ghc_844_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|e15f1cf02adb2cfb77a202050300a92f61456c6e1e90b543fec82d99da893a69|] - -ghc_844_32_musl :: DownloadInfo -ghc_844_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.4.4|] :: Path Rel)) - [s|356f49b1acee0b0267fd8ca687aede14d43cee1f231d7f8a37525d50f07e1428|] - - - - ----------------- - --[ GHC 8.6.1 ]-- - ----------------- - - -ghc_861_64_deb8 :: DownloadInfo -ghc_861_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|6d8784401b7dd80c90fa17306ec0539920e3987399a2c7ef247989e53197dc42|] - -ghc_861_32_deb8 :: DownloadInfo -ghc_861_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|83573af96e3dec8f67c1a844512f92cbf7d51ae7ceca53d948fc2a3300abd05c|] - -ghc_861_64_deb9 :: DownloadInfo -ghc_861_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|97d44f303868d74e4d13a2e99c82ffce3d25fd54c704675e5a1939e0d824dbf0|] - -ghc_861_64_fedora :: DownloadInfo -ghc_861_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|da903fbcf11ee6c977a8b7dac3f04dbc098d674def587880b6624b8f32588beb|] - -ghc_861_64_darwin :: DownloadInfo -ghc_861_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|9692cdfd202b0e039ea0c3dde5dbf653736c836ca1df46504b179b572100808c|] - -ghc_861_64_freebsd :: DownloadInfo -ghc_861_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-portbld-freebsd.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|51403b054a3a649039ac988e1d1112561f96750bfced63df864091a3fab36f08|] - -ghc_861_64_musl :: DownloadInfo -ghc_861_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|2668e12facfa9083150b01b1137693cb3de266a6f8ac8c6b44a2be3826c73177|] - -ghc_861_32_musl :: DownloadInfo -ghc_861_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.1|] :: Path Rel)) - [s|12b9b5b78be94b57d301b2a31eda145928110fd103fbbcc1e6e6966237a30ed2|] - - - - ----------------- - --[ GHC 8.6.2 ]-- - ----------------- - - -ghc_862_64_deb8 :: DownloadInfo -ghc_862_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|13f96e8b83bb5bb60f955786ff9085744c24927a33be8a17773f84c7c248533a|] - -ghc_862_32_deb8 :: DownloadInfo -ghc_862_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|a288026d9ef22f7ac387edab6b29ef7dcb3b28945c8ea532a15c1fa35d4733ed|] - -ghc_862_64_fedora :: DownloadInfo -ghc_862_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|702aa5dfa1639c37953ceb7571a5057d9fb0562aecb197b277953a037d78047d|] - -ghc_862_64_darwin :: DownloadInfo -ghc_862_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|8ec46a25872226dd7e5cf7271e3f3450c05f32144b96e6b9cb44cc4079db50dc|] - -ghc_862_64_musl :: DownloadInfo -ghc_862_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|5be9f98c25c49dbfb65223e2642335d4a45220f0c4044c8af70bbcaebe688467|] - -ghc_862_32_musl :: DownloadInfo -ghc_862_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.2|] :: Path Rel)) - [s|a1add75822258fbb6e57ad049919ef5f757bac10d3c7a6eaeee50d2521ffeb4e|] - - - - - ----------------- - --[ GHC 8.6.3 ]-- - ----------------- - - -ghc_863_64_deb8 :: DownloadInfo -ghc_863_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|291ca565374f4d51cc311488581f3279d3167a064fabfd4a6722fe2bd4532fd5|] - -ghc_863_32_deb8 :: DownloadInfo -ghc_863_32_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-i386-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|b57070ba8c70b1333a3e47ce124baf791be39c20a592954772532fd6dd51882f|] - -ghc_863_64_deb9 :: DownloadInfo -ghc_863_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|e7954c8ed9b422a09c6ab737e4a0865a2725d034ba0e272bd5c70db910797f99|] - -ghc_863_64_fedora :: DownloadInfo -ghc_863_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|52ae92f4e8bb2ac0b7847287ea3da37081f5f7bf8bbb7c78ac35fde537d1a89f|] - -ghc_863_64_centos :: DownloadInfo -ghc_863_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-centos7-linux.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|355bd85c69933c31bbe99b4269ce719acfd0aad0b45e359ac39b9bb13996acc6|] - -ghc_863_64_darwin :: DownloadInfo -ghc_863_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|79d069a1a7d74cfdd7ac2a2711c45d3ddc6265b988a0cefa342714b24f997fc1|] - -ghc_863_64_freebsd :: DownloadInfo -ghc_863_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-portbld-freebsd.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|bc2419fa180f8a7808c49775987866435995df9bdd9ce08bcd38352d63ba6031|] - -ghc_863_64_musl :: DownloadInfo -ghc_863_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|274f7ea959e6f1c830b33efd462ab9d0ff32d1cb5be051a2a318464d05d674dd|] - -ghc_863_32_musl :: DownloadInfo -ghc_863_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.3|] :: Path Rel)) - [s|dc0b53a7f0e52232930abcfad427ccd0917c90797203fbc7b5d72f5335d85a7d|] - - - - - ----------------- - --[ GHC 8.6.4 ]-- - ----------------- - - -ghc_864_64_deb8 :: DownloadInfo -ghc_864_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|34ef5fc8ddf2fc32a027180bea5b1c8a81ea840c87faace2977a572188d4b42d|] - -ghc_864_64_deb9 :: DownloadInfo -ghc_864_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|ef74222ef3c01c3fc5b926f67e8b4ef612fe8efa40ac937317cff9b0eed8d863|] - -ghc_864_32_deb9 :: DownloadInfo -ghc_864_32_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-i386-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|5e2ce88f4d13d23ac37e278e0c7b51c801008931359b9fa8a631d804d2da552c|] - -ghc_864_64_fedora :: DownloadInfo -ghc_864_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|e0b1ada7a679d6c35f9d7a1192ed35fde054f3650bb0bd2570d103729ad3b846|] - -ghc_864_64_darwin :: DownloadInfo -ghc_864_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|cccb58f142fe41b601d73690809f6089f7715b6a50a09aa3d0104176ab4db09e|] - -ghc_864_64_musl :: DownloadInfo -ghc_864_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|ec73167bae1a173a9af07612df5fa1289e924f13ed9241339cb5617337cb2979|] - -ghc_864_32_musl :: DownloadInfo -ghc_864_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.4|] :: Path Rel)) - [s|21b39b89edadbb6ab5b98d46dfacc0fd0799f9b16465a05c64e48f41dcbb1f7a|] - - - - ----------------- - --[ GHC 8.6.5 ]-- - ----------------- - - - -ghc_865_64_deb8 :: DownloadInfo -ghc_865_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|c419fd0aa9065fe4d2eb9a248e323860c696ddf3859749ca96a84938aee49107|] - -ghc_865_64_deb9 :: DownloadInfo -ghc_865_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|bc75f5601a9f41d58b2ba161b9e28fad52143a7229060f1e084168d9b2e914df|] - -ghc_865_32_deb9 :: DownloadInfo -ghc_865_32_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-i386-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|1cddb907393a669342b1a922dd16d505d9d93d50bd9433a54a8162f8701250dc|] - -ghc_865_64_fedora :: DownloadInfo -ghc_865_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|cf78b53eaf336083e7a05f4a3000afbae4abe5bbc77ef80cc40e09d04ac5b4a1|] - -ghc_865_64_centos :: DownloadInfo -ghc_865_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-centos7-linux.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|80ab566f4411299f9e5922d60749ca80f989d697db19e03ed875619d699f0edf|] - -ghc_865_64_darwin :: DownloadInfo -ghc_865_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|dfc1bdb1d303a87a8552aa17f5b080e61351f2823c2b99071ec23d0837422169|] - -ghc_865_64_musl :: DownloadInfo -ghc_865_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|ec6d0417822c3bfafc7aea0b0402294901231bc5d72dd17a2b849e3f44850695|] - -ghc_865_32_musl :: DownloadInfo -ghc_865_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|db13ff894faf431f9c64db21c090a1e4e42803794d56720a704c50166c7ca05d|] - - - - ----------------- - --[ GHC 8.8.1 ]-- - ----------------- - - - -ghc_881_64_deb8 :: DownloadInfo -ghc_881_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|fd96eb851971fbc3332bf2fa7821732cfa8b37e5a076a69f6a06f83f0ea7ccc5|] - -ghc_881_64_deb9 :: DownloadInfo -ghc_881_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|620fd560535b63cac5f8c97354ccddf93fa940cca78e2d19f6f98b7e67c6a723|] - -ghc_881_32_deb9 :: DownloadInfo -ghc_881_32_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-i386-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|3d3bb75aff2dd79ec87ace10483368681fbc328ff00ebf15edad33420f00f7f5|] - -ghc_881_64_fedora :: DownloadInfo -ghc_881_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|851a78df620bc056c34b252c97040d5755e294993fa8afa5429708b5229204d6|] - -ghc_881_64_centos :: DownloadInfo -ghc_881_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-centos7-linux.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|6cdd34e4dbaeb801e805811f91cf43a2d5f64b22f884718ffbd3542a2f4dd14f|] - -ghc_881_64_darwin :: DownloadInfo -ghc_881_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|38c8917b47c31bedf58c9305dfca3abe198d8d35570366f0773c4e2948bd8abe|] - -ghc_881_64_musl :: DownloadInfo -ghc_881_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|029163c42a219983f4220d73c26b910c3ecf6eda45a3e5e27236e8a66b080890|] - -ghc_881_32_musl :: DownloadInfo -ghc_881_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.1|] :: Path Rel)) - [s|3f5462341a455a5677fba5cb24da8938878261069da5ee4234b1c6ac2d2ef77e|] - - - - ----------------- - --[ GHC 8.8.2 ]-- - ----------------- - - - -ghc_882_64_deb8 :: DownloadInfo -ghc_882_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|fbe69652eba75dadb758d00292247d17fb018c29cac5acd79843e56311256c9f|] - -ghc_882_64_deb9 :: DownloadInfo -ghc_882_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|7b2d66c2d5d8c15750da5833d3018634a5eb792a5662282e3abfeb112c2a1cc3|] - -ghc_882_32_deb9 :: DownloadInfo -ghc_882_32_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-i386-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|ad1c628082c32635a436905a7ff83eaa4246347d869be5ef6b33c3bf85e8f00c|] - -ghc_882_64_fedora :: DownloadInfo -ghc_882_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|dbe2db717b33460f790e155e487d2a31c9b21a9d245f0c9490ad65844c3ea21f|] - -ghc_882_64_centos :: DownloadInfo -ghc_882_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-centos7-linux.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|f065a017d7a38f235f186ffe32d8261a4fd39c7e945d5cde85c0984c2569db99|] - -ghc_882_64_darwin :: DownloadInfo -ghc_882_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|25c5c1a70036abf3f22b2b19c10d26adfdb08e8f8574f89d4b2042de5947f990|] - -ghc_882_64_musl :: DownloadInfo -ghc_882_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|09d49c75b5626606409c982b23f70dec241a944928243f32d1b59b2005de6dea|] - -ghc_882_32_musl :: DownloadInfo -ghc_882_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.2|] :: Path Rel)) - [s|4ea4a81b6b5ba807c93b21b3cddf1f1b4b0fc1ce018cf6aa255a9ee40137b278|] - - - - ----------------- - --[ GHC 8.8.3 ]-- - ----------------- - - - -ghc_883_64_deb8 :: DownloadInfo -ghc_883_64_deb8 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-deb8-linux.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|92b9fadc442976968d2c190c14e000d737240a7d721581cda8d8741b7bd402f0|] - -ghc_883_64_deb9 :: DownloadInfo -ghc_883_64_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|42fde2ef5a143e1e6b47ae8875162ea2d4d54b06f0f7fa32ee4f0eb86f2be7ad|] - -ghc_883_32_deb9 :: DownloadInfo -ghc_883_32_deb9 = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-i386-deb9-linux.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|441e2c7a4fc83ebf179712bd939b555cda7c6633545b7c8ac38049f9d85003ae|] - -ghc_883_64_fedora :: DownloadInfo -ghc_883_64_fedora = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-fedora27-linux.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|45ee1de3bfc98cbcc4886b65fc7651ade2d3820aa85eac2dbe9bc7bf91e7c818|] - -ghc_883_64_centos :: DownloadInfo -ghc_883_64_centos = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-centos7-linux.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|4b2b5313f7c12b81e54efcb26705fa9e4ad5b98f2b58bfc76fb0c9ba1d55eb1f|] - -ghc_883_64_darwin :: DownloadInfo -ghc_883_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-apple-darwin.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|7016de90dd226b06fc79d0759c5d4c83c2ab01d8c678905442c28bd948dbb782|] - -ghc_883_64_musl :: DownloadInfo -ghc_883_64_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-x86_64-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|77a990d76dc10abe2ed19e5fcfef4095f0e9819d4ab84bec6d82f00dd85812a7|] - -ghc_883_32_musl :: DownloadInfo -ghc_883_32_musl = DownloadInfo - [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-i386-unknown-linux-musl.tar.xz|] - (Just ([rel|ghc-8.8.3|] :: Path Rel)) - [s|23779adb4cf4b314d0f8c66ee215ba6e74154c0768a573780475943544020bec|] - - - - - --------------------- - --[ Cabal-2.4.1.0 ]-- - --------------------- - - -cabal_2410_32_linux :: DownloadInfo -cabal_2410_32_linux = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-i386-unknown-linux.tar.xz|] - Nothing - [s|b2da736cc27609442b10f77fc1a687aba603a7a33045b722dbf1a0066fade198|] - -cabal_2410_64_linux :: DownloadInfo -cabal_2410_64_linux = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-unknown-linux.tar.xz|] - Nothing - [s|6136c189ffccaa39916f9cb5788f757166444a2d0c473b987856a79ecbf0c714|] - -cabal_2410_64_darwin :: DownloadInfo -cabal_2410_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-apple-darwin-sierra.tar.xz|] - Nothing - [s|56361cf4b0d920fe23174751fea1fb82a8e1ce522bd9706a3fbe47a72e458c9c|] - -cabal_2410_64_alpine :: DownloadInfo -cabal_2410_64_alpine = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-alpine-linux-musl.tar.xz|] - Nothing - [s|720bef015f834a03deb7180be2952a44e7c2e6c8429137570404c3de4f46b984|] - -cabal_2410_64_freebsd :: DownloadInfo -cabal_2410_64_freebsd = DownloadInfo - [uri|https://downloads.haskell.org/~cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-portbld-freebsd.tar.xz|] - Nothing - [s|33b7d37ea0688c93436eac9ec139d9967687875aa1fa13f2bb73bf05a9a59a1d|] - - - - - --------------------- - --[ Cabal-3.0.0.0 ]-- - --------------------- - - -cabal_3000_32_linux :: DownloadInfo -cabal_3000_32_linux = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-i386-unknown-linux.tar.xz|] - Nothing - [s|6898ccd6e6dc0872999c06daaf61d546164e12f60a1880d09852c9f0c59c5cf6|] - -cabal_3000_64_linux :: DownloadInfo -cabal_3000_64_linux = DownloadInfo - [uri|https://downloads.haskell.org/~cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-x86_64-unknown-linux.tar.xz|] - Nothing - [s|ee911ba67a70756eedeac662955b896d7e89432a99372aa45d2c6e71fa95a5e4|] - -cabal_3000_64_darwin :: DownloadInfo -cabal_3000_64_darwin = DownloadInfo - [uri|https://downloads.haskell.org/cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-x86_64-apple-darwin17.7.0.tar.xz|] - Nothing - [s|d4857e068560515e4cbb0e8ca124c370e07892f2a28804d87152834e5fe2b845|] - - - - ------------- - --[ GHCup ]-- - ------------- - - -ghcup_010_64_linux :: DownloadInfo -ghcup_010_64_linux = DownloadInfo - [uri|file:///home/ospa_ju/tmp/ghcup-exe|] - Nothing - [s|558126339252788a3d44a3f910417277c7ab656f0796b68bdc58afe73296b8cd|] - - - - - ----------------------- - --[ Tarball mapping ]-- - ----------------------- - - -binaryDownloads :: BinaryDownloads -binaryDownloads = M.fromList - [ ( GHC - , M.fromList - [ ( [vver|7.10.3|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_7103_64_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_7103_64_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_7103_64_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_7103_64_deb8)]) - , (Linux CentOS, M.fromList [(Nothing, ghc_7103_64_cenots67)]) - , ( Linux AmazonLinux - , M.fromList [(Nothing, ghc_7103_64_cenots67)] - ) - , (Darwin , M.fromList [(Nothing, ghc_7103_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_7103_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_7103_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_7103_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_7103_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_7103_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_7103_32_deb8)]) - , (Linux CentOS, M.fromList [(Nothing, ghc_7103_32_cenots67)]) - , ( Linux AmazonLinux - , M.fromList [(Nothing, ghc_7103_32_cenots67)] - ) - , (FreeBSD, M.fromList [(Nothing, ghc_7103_32_freebsd)]) - ] - ) - ] - ) - , ( [vver|8.0.2|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_802_64_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_802_64_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_802_64_deb8)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_802_64_deb8) - , (Just [vers|7|], ghc_802_64_deb7) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_802_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_802_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_802_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_802_32_deb8)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_802_32_deb8) - , (Just [vers|7|], ghc_802_32_deb7) - ] - ) - , (Linux Alpine, M.fromList [(Nothing, ghc_802_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.2.2|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_822_64_unknown)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_822_64_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_822_64_deb8)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_822_64_deb8) - , (Just [vers|7|], ghc_822_64_deb7) - ] - ) - , (Darwin, M.fromList [(Nothing, ghc_822_64_darwin)]) - , ( FreeBSD - , M.fromList - [ (Nothing , ghc_822_64_freebsd11) - , (Just [vers|10|], ghc_822_64_freebsd10) - , (Just [vers|11|], ghc_822_64_freebsd11) - ] - ) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_822_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_822_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_822_32_deb8)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_822_32_deb8) - , (Just [vers|7|], ghc_822_32_deb7) - ] - ) - ] - ) - ] - ) - , ( [vver|8.4.1|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_841_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_841_64_fedora)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_841_64_fedora)]) - , (Linux Mint , M.fromList [(Nothing, ghc_841_64_fedora)]) - , (Linux Debian , M.fromList [(Nothing, ghc_841_64_deb8)]) - , (Darwin , M.fromList [(Nothing, ghc_841_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_841_64_freebsd)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_841_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_841_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_841_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_841_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_841_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_841_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.4.2|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_842_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_842_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_842_64_fedora) - , (Just [vers|16.04|], ghc_842_64_deb9) - , (Just [vers|18.04|], ghc_842_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_842_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_842_64_deb9) - , (Just [vers|8|], ghc_842_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_842_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_842_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_842_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_842_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_842_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_842_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_842_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_842_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.4.3|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_843_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_843_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_843_64_fedora) - , (Just [vers|16.04|], ghc_843_64_deb9) - , (Just [vers|18.04|], ghc_843_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_843_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_843_64_deb9) - , (Just [vers|8|], ghc_843_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_843_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_843_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_843_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_843_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_843_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_843_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_843_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.4.4|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_844_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_844_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_844_64_centos)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_844_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_844_64_fedora) - , (Just [vers|16.04|], ghc_844_64_deb9) - , (Just [vers|18.04|], ghc_844_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_844_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_844_64_deb9) - , (Just [vers|8|], ghc_844_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_844_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_844_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_844_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_844_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_844_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_844_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_844_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_844_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.6.1|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_861_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_861_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_861_64_fedora) - , (Just [vers|16.04|], ghc_861_64_deb9) - , (Just [vers|18.04|], ghc_861_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_861_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_861_64_deb9) - , (Just [vers|8|], ghc_861_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_861_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_861_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_861_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_861_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_861_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_861_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_861_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_861_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.6.2|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_862_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_862_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_862_64_fedora) - , (Just [vers|16.04|], ghc_862_64_deb8) - , (Just [vers|18.04|], ghc_862_64_deb8) - ] - ) - , (Linux Mint , M.fromList [(Nothing, ghc_862_64_deb8)]) - , (Linux Debian, M.fromList [(Nothing, ghc_862_64_deb8)]) - , (Darwin , M.fromList [(Nothing, ghc_862_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_862_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_862_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_862_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_862_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_862_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_862_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.6.3|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_863_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_863_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_863_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_863_64_centos)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_863_64_fedora) - , (Just [vers|16.04|], ghc_863_64_deb9) - , (Just [vers|18.04|], ghc_863_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_863_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_863_64_deb9) - , (Just [vers|8|], ghc_863_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_863_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, ghc_863_64_freebsd)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_863_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_863_32_deb8)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_863_32_deb8)]) - , (Linux Mint , M.fromList [(Nothing, ghc_863_32_deb8)]) - , (Linux Debian , M.fromList [(Nothing, ghc_863_32_deb8)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_863_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.6.4|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_864_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_864_64_fedora)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_864_64_fedora) - , (Just [vers|16.04|], ghc_864_64_deb9) - , (Just [vers|18.04|], ghc_864_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_864_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_864_64_deb9) - , (Just [vers|8|], ghc_864_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_864_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_864_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_864_32_deb9)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_864_32_deb9)]) - , (Linux Mint , M.fromList [(Nothing, ghc_864_32_deb9)]) - , (Linux Debian , M.fromList [(Nothing, ghc_864_32_deb9)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_864_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.6.5|] - , VersionInfo [Recommended] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_865_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_865_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_865_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_865_64_centos)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_865_64_fedora) - , (Just [vers|16.04|], ghc_865_64_deb9) - , (Just [vers|18.04|], ghc_865_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_865_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_865_64_deb9) - , (Just [vers|8|], ghc_865_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_865_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_865_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_865_32_deb9)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_865_32_deb9)]) - , (Linux Mint , M.fromList [(Nothing, ghc_865_32_deb9)]) - , (Linux Debian , M.fromList [(Nothing, ghc_865_32_deb9)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_865_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.8.1|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_881_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_881_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_881_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_881_64_centos)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_881_64_fedora) - , (Just [vers|16.04|], ghc_881_64_deb9) - , (Just [vers|18.04|], ghc_881_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_881_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_881_64_deb9) - , (Just [vers|8|], ghc_881_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_881_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_881_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_881_32_deb9)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_881_32_deb9)]) - , (Linux Mint , M.fromList [(Nothing, ghc_881_32_deb9)]) - , (Linux Debian , M.fromList [(Nothing, ghc_881_32_deb9)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_881_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.8.2|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_882_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_882_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_882_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_882_64_centos)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_882_64_fedora) - , (Just [vers|16.04|], ghc_882_64_deb9) - , (Just [vers|18.04|], ghc_882_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_882_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_882_64_deb9) - , (Just [vers|8|], ghc_882_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_882_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_882_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_882_32_deb9)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_882_32_deb9)]) - , (Linux Mint , M.fromList [(Nothing, ghc_882_32_deb9)]) - , (Linux Debian , M.fromList [(Nothing, ghc_882_32_deb9)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_882_32_musl)]) - ] - ) - ] - ) - , ( [vver|8.8.3|] - , VersionInfo [Latest] $ M.fromList - [ ( A_64 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_883_64_fedora)]) - , (Linux Fedora , M.fromList [(Nothing, ghc_883_64_fedora)]) - , (Linux CentOS , M.fromList [(Nothing, ghc_883_64_centos)]) - , (Linux AmazonLinux , M.fromList [(Nothing, ghc_883_64_centos)]) - , ( Linux Ubuntu - , M.fromList - [ (Nothing , ghc_883_64_fedora) - , (Just [vers|16.04|], ghc_883_64_deb9) - , (Just [vers|18.04|], ghc_883_64_deb9) - ] - ) - , (Linux Mint, M.fromList [(Nothing, ghc_883_64_deb9)]) - , ( Linux Debian - , M.fromList - [ (Nothing , ghc_883_64_deb9) - , (Just [vers|8|], ghc_883_64_deb8) - ] - ) - , (Darwin , M.fromList [(Nothing, ghc_883_64_darwin)]) - , (Linux Alpine, M.fromList [(Nothing, ghc_883_64_musl)]) - ] - ) - , ( A_32 - , M.fromList - [ (Linux UnknownLinux, M.fromList [(Nothing, ghc_883_32_deb9)]) - , (Linux Ubuntu , M.fromList [(Nothing, ghc_883_32_deb9)]) - , (Linux Mint , M.fromList [(Nothing, ghc_883_32_deb9)]) - , (Linux Debian , M.fromList [(Nothing, ghc_883_32_deb9)]) - , (Linux Alpine , M.fromList [(Nothing, ghc_883_32_musl)]) - ] - ) - ] - ) - ] - ) - , ( Cabal - , M.fromList - [ ( [vver|2.4.1.0|] - , VersionInfo [] $ M.fromList - [ ( A_64 - , M.fromList - [ ( Linux UnknownLinux - , M.fromList [(Nothing, cabal_2410_64_linux)] - ) - , (Linux Alpine, M.fromList [(Nothing, cabal_2410_64_alpine)]) - , (Darwin , M.fromList [(Nothing, cabal_2410_64_darwin)]) - , (FreeBSD , M.fromList [(Nothing, cabal_2410_64_freebsd)]) - ] - ) - , ( A_32 - , M.fromList - [ ( Linux UnknownLinux - , M.fromList [(Nothing, cabal_2410_32_linux)] - ) - ] - ) - ] - ) - , ( [vver|3.0.0.0|] - , VersionInfo [Recommended, Latest] $ M.fromList - [ ( A_64 - , M.fromList - [ ( Linux UnknownLinux - , M.fromList [(Nothing, cabal_3000_64_linux)] - ) - , (Darwin, M.fromList [(Nothing, cabal_3000_64_darwin)]) - ] - ) - , ( A_32 - , M.fromList - [ ( Linux UnknownLinux - , M.fromList [(Nothing, cabal_3000_32_linux)] - ) - ] - ) - ] - ) - ] - ) - , ( GHCup - , M.fromList - [ ( [vver|0.1.0|] - , VersionInfo [Recommended, Latest] $ M.fromList - [ ( A_64 - , M.fromList - [(Linux UnknownLinux, M.fromList [(Nothing, ghcup_010_64_linux)])] - ) - ] - ) - ] - ) - ] diff --git a/app/ghcup-gen/GHCupDownloads.hs b/app/ghcup-gen/GHCupDownloads.hs index f00b412..1a0bbf6 100644 --- a/app/ghcup-gen/GHCupDownloads.hs +++ b/app/ghcup-gen/GHCupDownloads.hs @@ -1,11 +1,1693 @@ +{-# LANGUAGE QuasiQuotes #-} + + module GHCupDownloads where import GHCup.Types -import BinaryDownloads -import SourceDownloads +import GHCup.Utils.String.QQ +import GHCup.Utils.Version.QQ + +import HPath +import URI.ByteString.QQ + +import qualified Data.Map as M + + + ------------------ + --[ GHC 7.10.3 ]-- + ------------------ + +ghc_7103_64_cenots67 :: DownloadInfo +ghc_7103_64_cenots67 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-centos67-linux.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|a8957f7a2fd81720c5d3dc403571d77d31115ff5f42edb2917c36d8e714220d4|] + +ghc_7103_32_cenots67 :: DownloadInfo +ghc_7103_32_cenots67 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-centos67-linux.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|c50aa20275e8d1ba9148f380eb7598bc148143281fc17c9acd38ea7b325852bd|] + +ghc_7103_64_deb8 :: DownloadInfo +ghc_7103_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-deb8-linux.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|01cfbad8dff1e8b34a5fdca8caeaf843b56e36af919e29cd68870d2588563db5|] + +ghc_7103_32_deb8 :: DownloadInfo +ghc_7103_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-deb8-linux.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|d2ccf072457fb100503f6f5430a1e3589ca525a97424263d036b0550bc277f0c|] + +ghc_7103_64_darwin :: DownloadInfo +ghc_7103_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-apple-darwin.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|80893e367e8318105f7db2064adf202e3d96b1f014e792b73e92f2cacf0b757a|] + +ghc_7103_64_freebsd :: DownloadInfo +ghc_7103_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-portbld-freebsd.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|2aa396edd2bb651f4bc7eef7a396913ea24923de5aafdc76df6295333e487e48|] + +ghc_7103_32_freebsd :: DownloadInfo +ghc_7103_32_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-i386-portbld-freebsd.tar.bz2|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|3dde05577c6f94dcb0ba201ebd53ab88553bbc9a3aa8e72237162ed7a9d588a3|] + +ghc_7103_64_musl :: DownloadInfo +ghc_7103_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-7.10.3-musl/ghc-7.10.3-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|8b83dfa8b85ba45e24768337254e6eb23c0855df1a5168671a3a8090b6d0964e|] + + + + + ----------------- + --[ GHC 8.0.2 ]-- + ----------------- + + +ghc_802_64_deb7 :: DownloadInfo +ghc_802_64_deb7 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-deb7-linux.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|b2f5c304b57ac5840a0d2ef763a3c6fa858c70840f749cfad12ed227da973c0a|] + +ghc_802_32_deb7 :: DownloadInfo +ghc_802_32_deb7 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-i386-deb7-linux.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|07ead3a49f8c9df4b429e7a2f96f6f31bcab8d3ff8277a9aed0201d13ddad448|] + +ghc_802_64_deb8 :: DownloadInfo +ghc_802_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|5ee68290db00ca0b79d57bc3a5bdce470de9ce9da0b098a7ce6c504605856c8f|] + +ghc_802_32_deb8 :: DownloadInfo +ghc_802_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|818621342a2161b8afcc995a0765816bb40aefbfa1db2c8a7d59c04d8b18228a|] + +ghc_802_64_freebsd :: DownloadInfo +ghc_802_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-portbld-freebsd.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|b36a20e5cae24d70bbb6116ae486f21811e9384f15d3892d260f02fba3e3bb8c|] + +ghc_802_64_darwin :: DownloadInfo +ghc_802_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|ff50a2df9f002f33b9f09717ebf5ec5a47906b9b65cc57b1f9849f8b2e06788d|] + +ghc_802_64_musl :: DownloadInfo +ghc_802_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|7f9ef3e048ca6f2a2a589e6c168d8c7699fbe32b1b39a9d7c72eff9b26e90c67|] + +ghc_802_32_musl :: DownloadInfo +ghc_802_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|815c68181013cd3f4dc748ddb5502a5e7a1a4011ba57d8eff6d66da411c72e84|] + + + + + ----------------- + --[ GHC 8.2.2 ]-- + ----------------- + + +ghc_822_64_deb7 :: DownloadInfo +ghc_822_64_deb7 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-deb7-linux.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|cd7afbca54edf9890da9f432c63366556246c85c1198e40c99df5af01c555834|] + +ghc_822_32_deb7 :: DownloadInfo +ghc_822_32_deb7 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-i386-deb7-linux.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|cd18766b1a9b74fc6c90003a719ecab158f281f9a755d8b1bd3fd764ba6947b5|] + +ghc_822_64_deb8 :: DownloadInfo +ghc_822_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|48e205c62b9dc1ccf6739a4bc15a71e56dde2f891a9d786a1b115f0286111b2a|] + +ghc_822_32_deb8 :: DownloadInfo +ghc_822_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|9e67d72d76482e0ba91c718e727b00386a1a12a32ed719714976dc56ca8c8223|] + +ghc_822_64_unknown :: DownloadInfo +ghc_822_64_unknown = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-unknown-linux.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|cd7afbca54edf9890da9f432c63366556246c85c1198e40c99df5af01c555834|] + +ghc_822_64_darwin :: DownloadInfo +ghc_822_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|f90fcf62f7e0936a6dfc3601cf663729bfe9bbf85097d2d75f0a16f8c2e95c27|] + +ghc_822_64_freebsd10 :: DownloadInfo +ghc_822_64_freebsd10 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-portbld10_3-freebsd.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|9e99aaeaec4b2c6d660d80246c0d4dbd41fda88f1eb7a908b29dc8fa8d663949|] + +ghc_822_64_freebsd11 :: DownloadInfo +ghc_822_64_freebsd11 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-x86_64-portbld11-freebsd.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|cd351c704b92b9af23994024df07de8ca7090ea7675d5c8b14b2be857a46d804|] + + + + + ----------------- + --[ GHC 8.4.1 ]-- + ----------------- + + + +ghc_841_64_deb8 :: DownloadInfo +ghc_841_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|427c77a934b30c3f1de992c38c072afb4323fe6fb30dbac919ca8cb6ae98fbd9|] + +ghc_841_32_deb8 :: DownloadInfo +ghc_841_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|c56c589c76c7ddcb77cdbef885a811761e669d3e76868b723d5be56dedcd4f69|] + +ghc_841_64_fedora :: DownloadInfo +ghc_841_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|89328a013e64b9b56825a9071fea5616ddd623d37fd41e8fb913dfebc609e7ea|] + +ghc_841_64_darwin :: DownloadInfo +ghc_841_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|d774e39f3a0105843efd06709b214ee332c30203e6c5902dd6ed45e36285f9b7|] + +ghc_841_64_freebsd :: DownloadInfo +ghc_841_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-x86_64-portbld11-freebsd.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|e748daec098445c6190090fe32bb2817a1140553be5acd2188e1af05ad24e5aa|] + +ghc_841_64_musl :: DownloadInfo +ghc_841_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|82d4ea6247a91e7e76065c0cdf66eec813ab679c1f24de0fb92c89bba3ef27f2|] + +ghc_841_32_musl :: DownloadInfo +ghc_841_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|e5feee34b58c1a1cd6c270fbe696c178a4649675398f4e0d56a4bfad9641b736|] + + + + ----------------- + --[ GHC 8.4.2 ]-- + ----------------- + + + +ghc_842_64_deb8 :: DownloadInfo +ghc_842_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|246f66eb56f4ad0f1c7755502cfc8f9972f2d067dede17e151f6f479c1f76fbd|] + +ghc_842_32_deb8 :: DownloadInfo +ghc_842_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|2d849c30b4c1eac25dc74333501920921e22fa483153f404993808bbda93df05|] + +ghc_842_64_deb9 :: DownloadInfo +ghc_842_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|3f4f5bbd2cdab4e7015ada9196d8d9b3a1ad274293cef011f85c46854596cb57|] + +ghc_842_64_fedora :: DownloadInfo +ghc_842_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|d057b5c833596dbe4ae5d0dc2994f6cc5d0f4c2a21ea1d7900821d165fd4e846|] + +ghc_842_64_darwin :: DownloadInfo +ghc_842_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|87469222042b9ac23f9db216a8d4e5107297bdbbb99df71eb4d9e7208455def2|] + +ghc_842_64_freebsd :: DownloadInfo +ghc_842_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-x86_64-portbld-freebsd.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|e9ed417fdf94c2ff2c6e344ed16f332bf6b591511f6442c0d9ea94854882b66c|] + +ghc_842_64_musl :: DownloadInfo +ghc_842_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|3ebdb6e8001679e8722bd75a47805f1b3c1b25b37c4d237a7aaa4d66162f699f|] + +ghc_842_32_musl :: DownloadInfo +ghc_842_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|a43ac57214764717f0ffe515ef47b84e938f0a4fa8ff875773d6ba315b940835|] + + + + ----------------- + --[ GHC 8.4.3 ]-- + ----------------- + + +ghc_843_64_deb8 :: DownloadInfo +ghc_843_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|30a402c6d4754a6c020e0547f19ae3ac42e907e35349aa932d347f73e421a8e2|] + +ghc_843_32_deb8 :: DownloadInfo +ghc_843_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|f5763983a26dedd88b65a0b17267359a3981b83a642569b26334423f684f8b8c|] + +ghc_843_64_deb9 :: DownloadInfo +ghc_843_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|2e4f53afb872ad9c640f31aea283b3ff4c5028b65808a1920739900aef7d15c9|] + +ghc_843_64_fedora :: DownloadInfo +ghc_843_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|269e7a4d3f336491b88409a020998122b30a3a729af78d33be86d3b3f8000c3e|] + +ghc_843_64_darwin :: DownloadInfo +ghc_843_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|af0b455f6c46b9802b4b48dad996619cfa27cc6e2bf2ce5532387b4a8c00aa64|] + +ghc_843_64_musl :: DownloadInfo +ghc_843_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|0f05c67e3fd29a3f505abb77e9c39349d312cdc1a566263b8f4b227d085906bc|] + +ghc_843_32_musl :: DownloadInfo +ghc_843_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|3a9a1ceb8eef234023fc36600245a03772bcb46b2abac41f6394104feaec8c43|] + + + + + ----------------- + --[ GHC 8.4.4 ]-- + ----------------- + + +ghc_844_64_deb8 :: DownloadInfo +ghc_844_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|4c2a8857f76b7f3e34ecba0b51015d5cb8b767fe5377a7ec477abde10705ab1a|] + +ghc_844_32_deb8 :: DownloadInfo +ghc_844_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|678bafaabea6af70ba71ccf0210bb437f9f5591ec28ac1cbbbd5f7aa6894e450|] + +ghc_844_64_deb9 :: DownloadInfo +ghc_844_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|47c80a32d8f02838a2401414c94ba260d1fe82b7d090479994522242c767cc83|] + +ghc_844_64_centos :: DownloadInfo +ghc_844_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-centos70-linux.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|83a96650f5a92b1e4d7651d256d6438624342d40e780e68125033435a54cd674|] + +ghc_844_64_fedora :: DownloadInfo +ghc_844_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|8ab2befddc14d1434d0aad0c5d3c7e0c2b78ff84caa3429fa62527bfc6b86095|] + +ghc_844_64_darwin :: DownloadInfo +ghc_844_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|28dc89ebd231335337c656f4c5ead2ae2a1acc166aafe74a14f084393c5ef03a|] + +ghc_844_64_freebsd :: DownloadInfo +ghc_844_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-portbld-freebsd11.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|44fbd142d1c355d6110595c59c760e2c73866ff9259ec85ebf814edb244d1940|] + +ghc_844_64_musl :: DownloadInfo +ghc_844_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|e15f1cf02adb2cfb77a202050300a92f61456c6e1e90b543fec82d99da893a69|] + +ghc_844_32_musl :: DownloadInfo +ghc_844_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|356f49b1acee0b0267fd8ca687aede14d43cee1f231d7f8a37525d50f07e1428|] + + + + ----------------- + --[ GHC 8.6.1 ]-- + ----------------- + + +ghc_861_64_deb8 :: DownloadInfo +ghc_861_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|6d8784401b7dd80c90fa17306ec0539920e3987399a2c7ef247989e53197dc42|] + +ghc_861_32_deb8 :: DownloadInfo +ghc_861_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|83573af96e3dec8f67c1a844512f92cbf7d51ae7ceca53d948fc2a3300abd05c|] + +ghc_861_64_deb9 :: DownloadInfo +ghc_861_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|97d44f303868d74e4d13a2e99c82ffce3d25fd54c704675e5a1939e0d824dbf0|] + +ghc_861_64_fedora :: DownloadInfo +ghc_861_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|da903fbcf11ee6c977a8b7dac3f04dbc098d674def587880b6624b8f32588beb|] + +ghc_861_64_darwin :: DownloadInfo +ghc_861_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|9692cdfd202b0e039ea0c3dde5dbf653736c836ca1df46504b179b572100808c|] + +ghc_861_64_freebsd :: DownloadInfo +ghc_861_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-x86_64-portbld-freebsd.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|51403b054a3a649039ac988e1d1112561f96750bfced63df864091a3fab36f08|] + +ghc_861_64_musl :: DownloadInfo +ghc_861_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|2668e12facfa9083150b01b1137693cb3de266a6f8ac8c6b44a2be3826c73177|] + +ghc_861_32_musl :: DownloadInfo +ghc_861_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|12b9b5b78be94b57d301b2a31eda145928110fd103fbbcc1e6e6966237a30ed2|] + + + + ----------------- + --[ GHC 8.6.2 ]-- + ----------------- + + +ghc_862_64_deb8 :: DownloadInfo +ghc_862_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|13f96e8b83bb5bb60f955786ff9085744c24927a33be8a17773f84c7c248533a|] + +ghc_862_32_deb8 :: DownloadInfo +ghc_862_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|a288026d9ef22f7ac387edab6b29ef7dcb3b28945c8ea532a15c1fa35d4733ed|] + +ghc_862_64_fedora :: DownloadInfo +ghc_862_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|702aa5dfa1639c37953ceb7571a5057d9fb0562aecb197b277953a037d78047d|] + +ghc_862_64_darwin :: DownloadInfo +ghc_862_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|8ec46a25872226dd7e5cf7271e3f3450c05f32144b96e6b9cb44cc4079db50dc|] + +ghc_862_64_musl :: DownloadInfo +ghc_862_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|5be9f98c25c49dbfb65223e2642335d4a45220f0c4044c8af70bbcaebe688467|] + +ghc_862_32_musl :: DownloadInfo +ghc_862_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|a1add75822258fbb6e57ad049919ef5f757bac10d3c7a6eaeee50d2521ffeb4e|] + + + + + ----------------- + --[ GHC 8.6.3 ]-- + ----------------- + + +ghc_863_64_deb8 :: DownloadInfo +ghc_863_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|291ca565374f4d51cc311488581f3279d3167a064fabfd4a6722fe2bd4532fd5|] + +ghc_863_32_deb8 :: DownloadInfo +ghc_863_32_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-i386-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|b57070ba8c70b1333a3e47ce124baf791be39c20a592954772532fd6dd51882f|] + +ghc_863_64_deb9 :: DownloadInfo +ghc_863_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|e7954c8ed9b422a09c6ab737e4a0865a2725d034ba0e272bd5c70db910797f99|] + +ghc_863_64_fedora :: DownloadInfo +ghc_863_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|52ae92f4e8bb2ac0b7847287ea3da37081f5f7bf8bbb7c78ac35fde537d1a89f|] + +ghc_863_64_centos :: DownloadInfo +ghc_863_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-centos7-linux.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|355bd85c69933c31bbe99b4269ce719acfd0aad0b45e359ac39b9bb13996acc6|] + +ghc_863_64_darwin :: DownloadInfo +ghc_863_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|79d069a1a7d74cfdd7ac2a2711c45d3ddc6265b988a0cefa342714b24f997fc1|] + +ghc_863_64_freebsd :: DownloadInfo +ghc_863_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-x86_64-portbld-freebsd.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|bc2419fa180f8a7808c49775987866435995df9bdd9ce08bcd38352d63ba6031|] + +ghc_863_64_musl :: DownloadInfo +ghc_863_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|274f7ea959e6f1c830b33efd462ab9d0ff32d1cb5be051a2a318464d05d674dd|] + +ghc_863_32_musl :: DownloadInfo +ghc_863_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|dc0b53a7f0e52232930abcfad427ccd0917c90797203fbc7b5d72f5335d85a7d|] + + + + + ----------------- + --[ GHC 8.6.4 ]-- + ----------------- + + +ghc_864_64_deb8 :: DownloadInfo +ghc_864_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|34ef5fc8ddf2fc32a027180bea5b1c8a81ea840c87faace2977a572188d4b42d|] + +ghc_864_64_deb9 :: DownloadInfo +ghc_864_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|ef74222ef3c01c3fc5b926f67e8b4ef612fe8efa40ac937317cff9b0eed8d863|] + +ghc_864_32_deb9 :: DownloadInfo +ghc_864_32_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-i386-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|5e2ce88f4d13d23ac37e278e0c7b51c801008931359b9fa8a631d804d2da552c|] + +ghc_864_64_fedora :: DownloadInfo +ghc_864_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|e0b1ada7a679d6c35f9d7a1192ed35fde054f3650bb0bd2570d103729ad3b846|] + +ghc_864_64_darwin :: DownloadInfo +ghc_864_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|cccb58f142fe41b601d73690809f6089f7715b6a50a09aa3d0104176ab4db09e|] + +ghc_864_64_musl :: DownloadInfo +ghc_864_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|ec73167bae1a173a9af07612df5fa1289e924f13ed9241339cb5617337cb2979|] + +ghc_864_32_musl :: DownloadInfo +ghc_864_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|21b39b89edadbb6ab5b98d46dfacc0fd0799f9b16465a05c64e48f41dcbb1f7a|] + + + + ----------------- + --[ GHC 8.6.5 ]-- + ----------------- + + + +ghc_865_64_deb8 :: DownloadInfo +ghc_865_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|c419fd0aa9065fe4d2eb9a248e323860c696ddf3859749ca96a84938aee49107|] + +ghc_865_64_deb9 :: DownloadInfo +ghc_865_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|bc75f5601a9f41d58b2ba161b9e28fad52143a7229060f1e084168d9b2e914df|] + +ghc_865_32_deb9 :: DownloadInfo +ghc_865_32_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-i386-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|1cddb907393a669342b1a922dd16d505d9d93d50bd9433a54a8162f8701250dc|] + +ghc_865_64_fedora :: DownloadInfo +ghc_865_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|cf78b53eaf336083e7a05f4a3000afbae4abe5bbc77ef80cc40e09d04ac5b4a1|] + +ghc_865_64_centos :: DownloadInfo +ghc_865_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-centos7-linux.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|80ab566f4411299f9e5922d60749ca80f989d697db19e03ed875619d699f0edf|] + +ghc_865_64_darwin :: DownloadInfo +ghc_865_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|dfc1bdb1d303a87a8552aa17f5b080e61351f2823c2b99071ec23d0837422169|] + +ghc_865_64_musl :: DownloadInfo +ghc_865_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|ec6d0417822c3bfafc7aea0b0402294901231bc5d72dd17a2b849e3f44850695|] + +ghc_865_32_musl :: DownloadInfo +ghc_865_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|db13ff894faf431f9c64db21c090a1e4e42803794d56720a704c50166c7ca05d|] + + + + ----------------- + --[ GHC 8.8.1 ]-- + ----------------- + + + +ghc_881_64_deb8 :: DownloadInfo +ghc_881_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|fd96eb851971fbc3332bf2fa7821732cfa8b37e5a076a69f6a06f83f0ea7ccc5|] + +ghc_881_64_deb9 :: DownloadInfo +ghc_881_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|620fd560535b63cac5f8c97354ccddf93fa940cca78e2d19f6f98b7e67c6a723|] + +ghc_881_32_deb9 :: DownloadInfo +ghc_881_32_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-i386-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|3d3bb75aff2dd79ec87ace10483368681fbc328ff00ebf15edad33420f00f7f5|] + +ghc_881_64_fedora :: DownloadInfo +ghc_881_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|851a78df620bc056c34b252c97040d5755e294993fa8afa5429708b5229204d6|] + +ghc_881_64_centos :: DownloadInfo +ghc_881_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-centos7-linux.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|6cdd34e4dbaeb801e805811f91cf43a2d5f64b22f884718ffbd3542a2f4dd14f|] + +ghc_881_64_darwin :: DownloadInfo +ghc_881_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|38c8917b47c31bedf58c9305dfca3abe198d8d35570366f0773c4e2948bd8abe|] + +ghc_881_64_musl :: DownloadInfo +ghc_881_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|029163c42a219983f4220d73c26b910c3ecf6eda45a3e5e27236e8a66b080890|] + +ghc_881_32_musl :: DownloadInfo +ghc_881_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|3f5462341a455a5677fba5cb24da8938878261069da5ee4234b1c6ac2d2ef77e|] + + + + ----------------- + --[ GHC 8.8.2 ]-- + ----------------- + + + +ghc_882_64_deb8 :: DownloadInfo +ghc_882_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|fbe69652eba75dadb758d00292247d17fb018c29cac5acd79843e56311256c9f|] + +ghc_882_64_deb9 :: DownloadInfo +ghc_882_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|7b2d66c2d5d8c15750da5833d3018634a5eb792a5662282e3abfeb112c2a1cc3|] + +ghc_882_32_deb9 :: DownloadInfo +ghc_882_32_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-i386-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|ad1c628082c32635a436905a7ff83eaa4246347d869be5ef6b33c3bf85e8f00c|] + +ghc_882_64_fedora :: DownloadInfo +ghc_882_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|dbe2db717b33460f790e155e487d2a31c9b21a9d245f0c9490ad65844c3ea21f|] + +ghc_882_64_centos :: DownloadInfo +ghc_882_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-centos7-linux.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|f065a017d7a38f235f186ffe32d8261a4fd39c7e945d5cde85c0984c2569db99|] + +ghc_882_64_darwin :: DownloadInfo +ghc_882_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|25c5c1a70036abf3f22b2b19c10d26adfdb08e8f8574f89d4b2042de5947f990|] + +ghc_882_64_musl :: DownloadInfo +ghc_882_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|09d49c75b5626606409c982b23f70dec241a944928243f32d1b59b2005de6dea|] + +ghc_882_32_musl :: DownloadInfo +ghc_882_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|4ea4a81b6b5ba807c93b21b3cddf1f1b4b0fc1ce018cf6aa255a9ee40137b278|] + + + + ----------------- + --[ GHC 8.8.3 ]-- + ----------------- + + + +ghc_883_64_deb8 :: DownloadInfo +ghc_883_64_deb8 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-deb8-linux.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|92b9fadc442976968d2c190c14e000d737240a7d721581cda8d8741b7bd402f0|] + +ghc_883_64_deb9 :: DownloadInfo +ghc_883_64_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|42fde2ef5a143e1e6b47ae8875162ea2d4d54b06f0f7fa32ee4f0eb86f2be7ad|] + +ghc_883_32_deb9 :: DownloadInfo +ghc_883_32_deb9 = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-i386-deb9-linux.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|441e2c7a4fc83ebf179712bd939b555cda7c6633545b7c8ac38049f9d85003ae|] + +ghc_883_64_fedora :: DownloadInfo +ghc_883_64_fedora = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-fedora27-linux.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|45ee1de3bfc98cbcc4886b65fc7651ade2d3820aa85eac2dbe9bc7bf91e7c818|] + +ghc_883_64_centos :: DownloadInfo +ghc_883_64_centos = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-centos7-linux.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|4b2b5313f7c12b81e54efcb26705fa9e4ad5b98f2b58bfc76fb0c9ba1d55eb1f|] + +ghc_883_64_darwin :: DownloadInfo +ghc_883_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-apple-darwin.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|7016de90dd226b06fc79d0759c5d4c83c2ab01d8c678905442c28bd948dbb782|] + +ghc_883_64_musl :: DownloadInfo +ghc_883_64_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-x86_64-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|77a990d76dc10abe2ed19e5fcfef4095f0e9819d4ab84bec6d82f00dd85812a7|] + +ghc_883_32_musl :: DownloadInfo +ghc_883_32_musl = DownloadInfo + [uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-i386-unknown-linux-musl.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|23779adb4cf4b314d0f8c66ee215ba6e74154c0768a573780475943544020bec|] + + + + + --------------------- + --[ Cabal-2.4.1.0 ]-- + --------------------- + + +cabal_2410_32_linux :: DownloadInfo +cabal_2410_32_linux = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-i386-unknown-linux.tar.xz|] + Nothing + [s|b2da736cc27609442b10f77fc1a687aba603a7a33045b722dbf1a0066fade198|] + +cabal_2410_64_linux :: DownloadInfo +cabal_2410_64_linux = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-unknown-linux.tar.xz|] + Nothing + [s|6136c189ffccaa39916f9cb5788f757166444a2d0c473b987856a79ecbf0c714|] + +cabal_2410_64_darwin :: DownloadInfo +cabal_2410_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-apple-darwin-sierra.tar.xz|] + Nothing + [s|56361cf4b0d920fe23174751fea1fb82a8e1ce522bd9706a3fbe47a72e458c9c|] + +cabal_2410_64_alpine :: DownloadInfo +cabal_2410_64_alpine = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-alpine-linux-musl.tar.xz|] + Nothing + [s|720bef015f834a03deb7180be2952a44e7c2e6c8429137570404c3de4f46b984|] + +cabal_2410_64_freebsd :: DownloadInfo +cabal_2410_64_freebsd = DownloadInfo + [uri|https://downloads.haskell.org/~cabal/cabal-install-2.4.1.0/cabal-install-2.4.1.0-x86_64-portbld-freebsd.tar.xz|] + Nothing + [s|33b7d37ea0688c93436eac9ec139d9967687875aa1fa13f2bb73bf05a9a59a1d|] + + + + + --------------------- + --[ Cabal-3.0.0.0 ]-- + --------------------- + + +cabal_3000_32_linux :: DownloadInfo +cabal_3000_32_linux = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-i386-unknown-linux.tar.xz|] + Nothing + [s|6898ccd6e6dc0872999c06daaf61d546164e12f60a1880d09852c9f0c59c5cf6|] + +cabal_3000_64_linux :: DownloadInfo +cabal_3000_64_linux = DownloadInfo + [uri|https://downloads.haskell.org/~cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-x86_64-unknown-linux.tar.xz|] + Nothing + [s|ee911ba67a70756eedeac662955b896d7e89432a99372aa45d2c6e71fa95a5e4|] + +cabal_3000_64_darwin :: DownloadInfo +cabal_3000_64_darwin = DownloadInfo + [uri|https://downloads.haskell.org/cabal/cabal-install-3.0.0.0/cabal-install-3.0.0.0-x86_64-apple-darwin17.7.0.tar.xz|] + Nothing + [s|d4857e068560515e4cbb0e8ca124c370e07892f2a28804d87152834e5fe2b845|] + + + + ------------- + --[ GHCup ]-- + ------------- + + +ghcup_010_64_linux :: DownloadInfo +ghcup_010_64_linux = DownloadInfo + [uri|file:///home/ospa_ju/tmp/ghcup-exe|] + Nothing + [s|558126339252788a3d44a3f910417277c7ab656f0796b68bdc58afe73296b8cd|] + + + + + ----------------------- + --[ Tarball mapping ]-- + ----------------------- ghcupDownloads :: GHCupDownloads -ghcupDownloads = GHCupDownloads { _binaryDownloads = binaryDownloads - , _sourceDownloads = sourceDownloads - } +ghcupDownloads = M.fromList + [ ( GHC + , M.fromList + [ ( [vver|7.10.3|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-src.tar.xz|] + (Just ([rel|ghc-7.10.3|] :: Path Rel)) + [s|cf90cedce1c28fd0e2b9e72fe8a938756668d18ea1fcc884a19f698658ac4fef|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_7103_64_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_7103_64_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_7103_64_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_7103_64_deb8)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_7103_64_cenots67)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_7103_64_cenots67)] + ) + , (Darwin , M.fromList [(Nothing, ghc_7103_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_7103_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_7103_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_7103_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_7103_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_7103_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_7103_32_deb8)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_7103_32_cenots67)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_7103_32_cenots67)] + ) + , (FreeBSD, M.fromList [(Nothing, ghc_7103_32_freebsd)]) + ] + ) + ] + ) + , ( [vver|8.0.2|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.0.2/ghc-8.0.2-src.tar.xz|] + (Just ([rel|ghc-8.0.2|] :: Path Rel)) + [s|11625453e1d0686b3fa6739988f70ecac836cadc30b9f0c8b49ef9091d6118b1|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_802_64_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_802_64_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_802_64_deb8)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_802_64_deb8) + , (Just [vers|7|], ghc_802_64_deb7) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_802_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_802_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_802_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_802_32_deb8)] + ) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_802_32_deb8) + , (Just [vers|7|], ghc_802_32_deb7) + ] + ) + , (Linux Alpine, M.fromList [(Nothing, ghc_802_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.2.2|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-src.tar.xz|] + (Just ([rel|ghc-8.2.2|] :: Path Rel)) + [s|bb8ec3634aa132d09faa270bbd604b82dfa61f04855655af6f9d14a9eedc05fc|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_822_64_unknown)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_822_64_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_822_64_deb8)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_822_64_deb8) + , (Just [vers|7|], ghc_822_64_deb7) + ] + ) + , (Darwin, M.fromList [(Nothing, ghc_822_64_darwin)]) + , ( FreeBSD + , M.fromList + [ (Nothing , ghc_822_64_freebsd11) + , (Just [vers|10|], ghc_822_64_freebsd10) + , (Just [vers|11|], ghc_822_64_freebsd11) + ] + ) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_822_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_822_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_822_32_deb8)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_822_32_deb8) + , (Just [vers|7|], ghc_822_32_deb7) + ] + ) + ] + ) + ] + ) + , ( [vver|8.4.1|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.1/ghc-8.4.1-src.tar.xz|] + (Just ([rel|ghc-8.4.1|] :: Path Rel)) + [s|39ae2f25192408f355693e5a3c8b6ff613ddb7c4da998fdf26210143a61839d2|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_841_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_841_64_fedora)]) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_841_64_fedora)]) + , (Linux Mint , M.fromList [(Nothing, ghc_841_64_fedora)]) + , (Linux Debian, M.fromList [(Nothing, ghc_841_64_deb8)]) + , (Darwin , M.fromList [(Nothing, ghc_841_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_841_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_841_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_841_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_841_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_841_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_841_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_841_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.4.2|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.2/ghc-8.4.2-src.tar.xz|] + (Just ([rel|ghc-8.4.2|] :: Path Rel)) + [s|01cc32f24a06bf3b2428351b6d7fec791e82d042426d29ad9e5a245b35f0047b|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_842_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_842_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_842_64_fedora) + , (Just [vers|16.04|], ghc_842_64_deb9) + , (Just [vers|18.04|], ghc_842_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_842_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_842_64_deb9) + , (Just [vers|8|], ghc_842_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_842_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_842_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_842_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_842_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_842_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_842_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_842_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_842_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.4.3|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-src.tar.xz|] + (Just ([rel|ghc-8.4.3|] :: Path Rel)) + [s|ae47afda985830de8811243255aa3744dfb9207cb980af74393298b2b62160d6|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_843_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_843_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_843_64_fedora) + , (Just [vers|16.04|], ghc_843_64_deb9) + , (Just [vers|18.04|], ghc_843_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_843_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_843_64_deb9) + , (Just [vers|8|], ghc_843_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_843_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_843_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_843_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_843_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_843_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_843_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_843_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.4.4|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-src.tar.xz|] + (Just ([rel|ghc-8.4.4|] :: Path Rel)) + [s|11117735a58e507c481c09f3f39ae5a314e9fbf49fc3109528f99ea7959004b2|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_844_64_fedora)] + ) + , (Linux CentOS, M.fromList [(Nothing, ghc_844_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_844_64_centos)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_844_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_844_64_fedora) + , (Just [vers|16.04|], ghc_844_64_deb9) + , (Just [vers|18.04|], ghc_844_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_844_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_844_64_deb9) + , (Just [vers|8|], ghc_844_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_844_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_844_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_844_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_844_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_844_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_844_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_844_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_844_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.6.1|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.1/ghc-8.6.1-src.tar.xz|] + (Just ([rel|ghc-8.6.1|] :: Path Rel)) + [s|2c25c26d1e5c47c7cbb2a1d8e6456524033e7a71409184dd3125e3fc5a3c7036|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_861_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_861_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_861_64_fedora) + , (Just [vers|16.04|], ghc_861_64_deb9) + , (Just [vers|18.04|], ghc_861_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_861_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_861_64_deb9) + , (Just [vers|8|], ghc_861_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_861_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_861_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_861_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_861_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_861_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_861_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_861_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_861_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.6.2|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.2/ghc-8.6.2-src.tar.xz|] + (Just ([rel|ghc-8.6.2|] :: Path Rel)) + [s|caaa819d21280ecde90a4773143dee188711e9ff175a27cfbaee56eb851d76d5|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_862_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_862_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_862_64_fedora) + , (Just [vers|16.04|], ghc_862_64_deb8) + , (Just [vers|18.04|], ghc_862_64_deb8) + ] + ) + , (Linux Mint , M.fromList [(Nothing, ghc_862_64_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_862_64_deb8)]) + , (Darwin , M.fromList [(Nothing, ghc_862_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_862_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_862_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_862_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_862_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_862_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_862_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.6.3|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.3/ghc-8.6.3-src.tar.xz|] + (Just ([rel|ghc-8.6.3|] :: Path Rel)) + [s|9f9e37b7971935d88ba80426c36af14b1e0b3ec1d9c860f44a4391771bc07f23|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_863_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_863_64_fedora)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_863_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_863_64_centos)] + ) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_863_64_fedora) + , (Just [vers|16.04|], ghc_863_64_deb9) + , (Just [vers|18.04|], ghc_863_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_863_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_863_64_deb9) + , (Just [vers|8|], ghc_863_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_863_64_darwin)]) + , (FreeBSD , M.fromList [(Nothing, ghc_863_64_freebsd)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_863_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_863_32_deb8)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_863_32_deb8)]) + , (Linux Mint , M.fromList [(Nothing, ghc_863_32_deb8)]) + , (Linux Debian, M.fromList [(Nothing, ghc_863_32_deb8)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_863_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.6.4|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.4/ghc-8.6.4-src.tar.xz|] + (Just ([rel|ghc-8.6.4|] :: Path Rel)) + [s|5b5d07e4463203a433c3ed3df461ba6cce11b6d2b9b264db31f3429075d0303a|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_864_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_864_64_fedora)]) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_864_64_fedora) + , (Just [vers|16.04|], ghc_864_64_deb9) + , (Just [vers|18.04|], ghc_864_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_864_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_864_64_deb9) + , (Just [vers|8|], ghc_864_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_864_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_864_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_864_32_deb9)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_864_32_deb9)]) + , (Linux Mint , M.fromList [(Nothing, ghc_864_32_deb9)]) + , (Linux Debian, M.fromList [(Nothing, ghc_864_32_deb9)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_864_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.6.5|] + , VersionInfo + [Recommended] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-src.tar.xz|] + (Just ([rel|ghc-8.6.5|] :: Path Rel)) + [s|4d4aa1e96f4001b934ac6193ab09af5d6172f41f5a5d39d8e43393b9aafee361|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_865_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_865_64_fedora)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_865_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_865_64_centos)] + ) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_865_64_fedora) + , (Just [vers|16.04|], ghc_865_64_deb9) + , (Just [vers|18.04|], ghc_865_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_865_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_865_64_deb9) + , (Just [vers|8|], ghc_865_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_865_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_865_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_865_32_deb9)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_865_32_deb9)]) + , (Linux Mint , M.fromList [(Nothing, ghc_865_32_deb9)]) + , (Linux Debian, M.fromList [(Nothing, ghc_865_32_deb9)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_865_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.8.1|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.1/ghc-8.8.1-src.tar.xz|] + (Just ([rel|ghc-8.8.1|] :: Path Rel)) + [s|908a83d9b814da74585de9d39687189e6260ec3848131f9d9236cab8a123721a|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_881_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_881_64_fedora)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_881_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_881_64_centos)] + ) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_881_64_fedora) + , (Just [vers|16.04|], ghc_881_64_deb9) + , (Just [vers|18.04|], ghc_881_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_881_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_881_64_deb9) + , (Just [vers|8|], ghc_881_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_881_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_881_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_881_32_deb9)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_881_32_deb9)]) + , (Linux Mint , M.fromList [(Nothing, ghc_881_32_deb9)]) + , (Linux Debian, M.fromList [(Nothing, ghc_881_32_deb9)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_881_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.8.2|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-src.tar.xz|] + (Just ([rel|ghc-8.8.2|] :: Path Rel)) + [s|01cea54d90686b97bcc9960b108beaffccd4336dee930dcf9beaf52b1f370a0b|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_882_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_882_64_fedora)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_882_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_882_64_centos)] + ) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_882_64_fedora) + , (Just [vers|16.04|], ghc_882_64_deb9) + , (Just [vers|18.04|], ghc_882_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_882_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_882_64_deb9) + , (Just [vers|8|], ghc_882_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_882_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_882_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_882_32_deb9)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_882_32_deb9)]) + , (Linux Mint , M.fromList [(Nothing, ghc_882_32_deb9)]) + , (Linux Debian, M.fromList [(Nothing, ghc_882_32_deb9)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_882_32_musl)]) + ] + ) + ] + ) + , ( [vver|8.8.3|] + , VersionInfo + [Latest] + (Just $ DownloadInfo + [uri|https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-src.tar.xz|] + (Just ([rel|ghc-8.8.3|] :: Path Rel)) + [s|e0dcc0aaf3e234c5978f29e6df62947e97720ab404ec0158343df211c5480f89|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_883_64_fedora)] + ) + , (Linux Fedora, M.fromList [(Nothing, ghc_883_64_fedora)]) + , (Linux CentOS, M.fromList [(Nothing, ghc_883_64_centos)]) + , ( Linux AmazonLinux + , M.fromList [(Nothing, ghc_883_64_centos)] + ) + , ( Linux Ubuntu + , M.fromList + [ (Nothing , ghc_883_64_fedora) + , (Just [vers|16.04|], ghc_883_64_deb9) + , (Just [vers|18.04|], ghc_883_64_deb9) + ] + ) + , (Linux Mint, M.fromList [(Nothing, ghc_883_64_deb9)]) + , ( Linux Debian + , M.fromList + [ (Nothing , ghc_883_64_deb9) + , (Just [vers|8|], ghc_883_64_deb8) + ] + ) + , (Darwin , M.fromList [(Nothing, ghc_883_64_darwin)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_883_64_musl)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, ghc_883_32_deb9)] + ) + , (Linux Ubuntu, M.fromList [(Nothing, ghc_883_32_deb9)]) + , (Linux Mint , M.fromList [(Nothing, ghc_883_32_deb9)]) + , (Linux Debian, M.fromList [(Nothing, ghc_883_32_deb9)]) + , (Linux Alpine, M.fromList [(Nothing, ghc_883_32_musl)]) + ] + ) + ] + ) + ] + ) + , ( Cabal + , M.fromList + [ ( [vver|2.4.1.0|] + , VersionInfo + [] + (Just $ DownloadInfo + [uri|https://github.com/haskell/cabal/archive/cabal-install-v2.4.1.0.tar.gz|] + (Just [rel|cabal-cabal-install-v2.4.1.0/cabal-install|]) + [s|61eb64a5addafca026aff9277291f4643fe07e83886f76d059d42c734fed829c|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, cabal_2410_64_linux)] + ) + , (Linux Alpine, M.fromList [(Nothing, cabal_2410_64_alpine)]) + , (Darwin , M.fromList [(Nothing, cabal_2410_64_darwin)]) + , (FreeBSD, M.fromList [(Nothing, cabal_2410_64_freebsd)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, cabal_2410_32_linux)] + ) + ] + ) + ] + ) + , ( [vver|3.0.0.0|] + , VersionInfo + [Recommended, Latest] + (Just $ DownloadInfo + [uri|https://github.com/haskell/cabal/archive/cabal-install-v3.0.0.0.tar.gz|] + (Just [rel|cabal-cabal-install-v3.0.0.0/cabal-install|]) + [s|c0b26817a7b7c2907e45cb38235ce1157e732211880f62e92eaff4066202e674|] + ) + $ M.fromList + [ ( A_64 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, cabal_3000_64_linux)] + ) + , (Darwin, M.fromList [(Nothing, cabal_3000_64_darwin)]) + ] + ) + , ( A_32 + , M.fromList + [ ( Linux UnknownLinux + , M.fromList [(Nothing, cabal_3000_32_linux)] + ) + ] + ) + ] + ) + ] + ) + , ( GHCup + , M.fromList + [ ( [vver|0.1.0|] + , VersionInfo [Recommended, Latest] Nothing $ M.fromList + [ ( A_64 + , M.fromList + [(Linux UnknownLinux, M.fromList [(Nothing, ghcup_010_64_linux)])] + ) + ] + ) + ] + ) + ] diff --git a/app/ghcup-gen/SourceDownloads.hs b/app/ghcup-gen/SourceDownloads.hs deleted file mode 100644 index 7baf872..0000000 --- a/app/ghcup-gen/SourceDownloads.hs +++ /dev/null @@ -1,26 +0,0 @@ -{-# LANGUAGE QuasiQuotes #-} - -module SourceDownloads where - - -import GHCup.Types -import GHCup.Utils.String.QQ -import GHCup.Utils.Version.QQ - -import HPath -import URI.ByteString.QQ - -import qualified Data.Map as M - - --- TODO: source tarballs --- TODO: reference tarballs -sourceDownloads :: SourceDownloads -sourceDownloads = M.fromList - [ ( [vver|8.6.5|] - , DownloadInfo - [uri|https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-src.tar.xz|] - (Just ([rel|ghc-8.6.5|] :: Path Rel)) - [s|b47726aaf302eb87b4970fcee924d45d|] - ) - ] diff --git a/app/ghcup-gen/Validate.hs b/app/ghcup-gen/Validate.hs index a2907e4..2f43571 100644 --- a/app/ghcup-gen/Validate.hs +++ b/app/ghcup-gen/Validate.hs @@ -7,7 +7,6 @@ module Validate where import GHCup import GHCup.Download import GHCup.Types -import GHCup.Types.Optics import GHCup.Utils.Logger import Control.Exception.Safe @@ -48,22 +47,22 @@ addError = do validate :: (Monad m, MonadLogger m, MonadThrow m, MonadIO m, MonadUnliftIO m) => GHCupDownloads -> m ExitCode -validate dls@GHCupDownloads {..} = do +validate dls = do ref <- liftIO $ newIORef 0 -- * verify binary downloads * -- flip runReaderT ref $ do -- unique tags - forM_ (M.toList _binaryDownloads) $ \(t, _) -> checkUniqueTags t + forM_ (M.toList dls) $ \(t, _) -> checkUniqueTags t -- required platforms - forM_ (M.toList _binaryDownloads) $ \(t, versions) -> + forM_ (M.toList dls) $ \(t, versions) -> forM_ (M.toList versions) $ \(v, vi) -> forM_ (M.toList $ _viArch vi) $ \(arch, pspecs) -> do checkHasRequiredPlatforms t v arch (M.keys pspecs) checkGHCisSemver - forM_ (M.toList _binaryDownloads) $ \(t, _) -> checkMandatoryTags t + forM_ (M.toList dls) $ \(t, _) -> checkMandatoryTags t -- exit e <- liftIO $ readIORef ref @@ -86,7 +85,7 @@ validate dls@GHCupDownloads {..} = do [i|FreeBSD missing for #{t} #{v'} #{arch}|] checkUniqueTags tool = do - let allTags = join $ fmap snd $ availableToolVersions _binaryDownloads tool + let allTags = join $ fmap snd $ availableToolVersions dls tool let nonUnique = fmap fst . filter (\(_, b) -> not b) @@ -110,7 +109,7 @@ validate dls@GHCupDownloads {..} = do isUniqueTag Recommended = True checkGHCisSemver = do - let ghcVers = toListOf (binaryDownloads % ix GHC % to M.keys % folded) dls + let ghcVers = toListOf (ix GHC % to M.keys % folded) dls forM_ ghcVers $ \v -> case semver (prettyVer v) of Left _ -> do lift $ $(logError) [i|GHC version #{v} is not valid semver|] @@ -119,7 +118,7 @@ validate dls@GHCupDownloads {..} = do -- a tool must have at least one of each mandatory tags checkMandatoryTags tool = do - let allTags = join $ fmap snd $ availableToolVersions _binaryDownloads tool + let allTags = join $ fmap snd $ availableToolVersions dls tool forM_ [Latest, Recommended] $ \t -> case elem t allTags of False -> do lift $ $(logError) [i|Tag #{t} missing from #{tool}|] @@ -132,20 +131,25 @@ validateTarballs :: ( Monad m , MonadThrow m , MonadIO m , MonadUnliftIO m + , MonadMask m ) => GHCupDownloads -> m ExitCode -validateTarballs GHCupDownloads {..} = do +validateTarballs dls = do ref <- liftIO $ newIORef 0 flip runReaderT ref $ do - -- download/verify all tarballs + -- download/verify all binary tarballs let - dlis = nub $ join $ (M.elems _binaryDownloads) <&> \versions -> + dlbis = nub $ join $ (M.elems dls) <&> \versions -> join $ (M.elems versions) <&> \vi -> join $ (M.elems $ _viArch vi) <&> \pspecs -> join $ (M.elems pspecs) <&> \pverspecs -> (M.elems pverspecs) - forM_ dlis $ downloadAll + forM_ dlbis $ downloadAll + + let dlsrc = nub $ join $ (M.elems dls) <&> \versions -> + join $ (M.elems versions) <&> maybe [] (: []) . _viSourceDL + forM_ dlsrc $ downloadAll -- exit e <- liftIO $ readIORef ref diff --git a/app/ghcup/Main.hs b/app/ghcup/Main.hs index c1f94c3..970bc37 100644 --- a/app/ghcup/Main.hs +++ b/app/ghcup/Main.hs @@ -13,10 +13,10 @@ import GHCup.Download import GHCup.Errors import GHCup.Types import GHCup.Utils -import GHCup.Utils.File import GHCup.Utils.Logger import GHCup.Utils.Prelude import GHCup.Utils.String.QQ +import GHCup.Version import Control.Monad.Logger import Control.Monad.Reader @@ -43,6 +43,7 @@ import URI.ByteString import qualified Data.ByteString as B import qualified Data.ByteString.UTF8 as UTF8 import qualified Data.Text as T +import qualified Data.Text.IO as T import qualified Data.Text.Encoding as E @@ -66,8 +67,9 @@ data Command | List ListOptions | Rm RmOptions | DInfo - | Compile CompileOptions + | Compile CompileCommand | Upgrade UpgradeOpts + | NumericVersion data ToolVersion = ToolVersion Version | ToolTag Tag @@ -94,8 +96,12 @@ data RmOptions = RmOptions } +data CompileCommand = CompileGHC CompileOptions + | CompileCabal CompileOptions + + data CompileOptions = CompileOptions - { ghcVer :: Version + { targetVer :: Version , bootstrapVer :: Version , jobs :: Maybe Int , buildConfig :: Maybe (Path Abs) @@ -122,21 +128,20 @@ opts = (option (eitherReader parseUri) (short 's' <> long "url-source" <> metavar "URL" <> help - "Alternative ghcup download info url" + "Alternative ghcup download info url" <> internal ) ) ) <*> switch - ( short 'n' - <> long "no-verify" - <> help - "Skip tarball checksum checks (default: False)" + (short 'n' <> long "no-verify" <> help + "Skip tarball checksum verification (default: False)" ) <*> com where parseUri s' = bimap show id $ parseURI strictURIParserOptions (UTF8.fromString s') + com :: Parser Command com = subparser @@ -162,6 +167,13 @@ com = (progDesc "Upgrade ghcup (per default in ~/.ghcup/bin/)") ) ) + <> command + "compile" + ( Compile + <$> (info (compileP <**> helper) + (progDesc "Compile a tool from source") + ) + ) <> commandGroup "Main commands:" ) <|> subparser @@ -180,13 +192,6 @@ com = (progDesc "Remove a GHC version installed by ghcup") ) ) - <> command - "compile" - ( Compile - <$> (info (compileOpts <**> helper) - (progDesc "Compile GHC from source") - ) - ) <> commandGroup "GHC commands:" <> hidden ) @@ -194,6 +199,11 @@ com = ( command "debug-info" ((\_ -> DInfo) <$> (info (helper) (progDesc "Show debug info"))) + <> command + "numeric-version" + ( (\_ -> NumericVersion) + <$> (info (helper) (progDesc "Show the numeric version")) + ) <> commandGroup "Other commands:" <> hidden ) @@ -246,6 +256,24 @@ rmOpts :: Parser RmOptions rmOpts = RmOptions <$> versionParser +compileP :: Parser CompileCommand +compileP = subparser + ( command + "ghc" + ( CompileGHC + <$> (info (compileOpts <**> helper) (progDesc "Compile GHC from source") + ) + ) + <> command + "cabal" + ( CompileCabal + <$> (info (compileOpts <**> helper) + (progDesc "Compile Cabal from source") + ) + ) + ) + + compileOpts :: Parser CompileOptions compileOpts = CompileOptions @@ -254,7 +282,7 @@ compileOpts = (bimap (const "Not a valid version") id . version . T.pack) ) (short 'v' <> long "version" <> metavar "VERSION" <> help - "The GHC version to compile" + "The tool version to compile" ) ) <*> (option @@ -386,19 +414,19 @@ main = do . runResourceT . runE @'[ AlreadyInstalled - , ArchiveError + , UnknownArchive , DistroNotFound , FileDoesNotExistError - , FileError + , CopyError , JSONError , NoCompatibleArch , NoDownload , NotInstalled - , PlatformResultError - , ProcessError + , NoCompatiblePlatform + , BuildFailed , TagNotFound - , URLException , DigestError + , DownloadFailed ] let runSetGHC = @@ -408,15 +436,15 @@ main = do @'[ FileDoesNotExistError , NotInstalled , TagNotFound - , URLException , JSONError , TagNotFound + , DownloadFailed ] let runListGHC = runLogger . flip runReaderT settings - . runE @'[FileDoesNotExistError , URLException , JSONError] + . runE @'[FileDoesNotExistError , JSONError , DownloadFailed] let runRmGHC = runLogger . flip runReaderT settings . runE @'[NotInstalled] @@ -425,7 +453,7 @@ main = do runLogger . flip runReaderT settings . runE - @'[PlatformResultError , NoCompatibleArch , DistroNotFound] + @'[NoCompatiblePlatform , NoCompatibleArch , DistroNotFound] let runCompileGHC = runLogger @@ -433,31 +461,43 @@ main = do . runResourceT . runE @'[ AlreadyInstalled - , NotInstalled - , GHCNotFound - , ArchiveError - , ProcessError - , URLException + , BuildFailed , DigestError - , BuildConfigNotFound - , FileDoesNotExistError - , URLException + , DownloadFailed + , GHCupSetError + , NoDownload + , UnknownArchive + -- , JSONError ] + let runCompileCabal = + runLogger + . flip runReaderT settings + . runResourceT + . runE + @'[ JSONError + , UnknownArchive + , NoDownload + , DigestError + , DownloadFailed + , BuildFailed + ] + let runUpgrade = runLogger . flip runReaderT settings . runResourceT . runE @'[ DigestError - , URLException , DistroNotFound - , PlatformResultError + , NoCompatiblePlatform , NoCompatibleArch , NoDownload , FileDoesNotExistError , JSONError + , DownloadFailed + , CopyError ] @@ -465,16 +505,22 @@ main = do Install (InstallGHC InstallOptions {..}) -> void $ (runInstTool $ do - dls <- _binaryDownloads <$> liftE getDownloads + dls <- liftE getDownloads v <- liftE $ fromVersion dls instVer GHC - liftE $ installTool dls (ToolRequest GHC v) Nothing + liftE $ installGHCBin dls v Nothing ) >>= \case VRight _ -> runLogger $ $(logInfo) ([s|GHC installation successful|]) - VLeft (V (AlreadyInstalled treq)) -> + VLeft (V (AlreadyInstalled _ v)) -> runLogger $ $(logWarn) - (T.pack (show treq) <> [s| already installed|]) + [i|GHC ver #{prettyVer v} already installed|] + VLeft (V (BuildFailed tmpdir e)) -> + runLogger + ($(logError) [i|Build failed with #{e} +Check the logs at ~/ghcup/logs and the build directory #{tmpdir} for more clues.|] + ) + >> exitFailure VLeft e -> do runLogger $ do $(logError) [i|#{e}|] @@ -483,16 +529,16 @@ main = do Install (InstallCabal InstallOptions {..}) -> void $ (runInstTool $ do - dls <- _binaryDownloads <$> liftE getDownloads + dls <- liftE getDownloads v <- liftE $ fromVersion dls instVer Cabal - liftE $ installTool dls (ToolRequest Cabal v) Nothing + liftE $ installCabalBin dls v Nothing ) >>= \case VRight _ -> runLogger $ $(logInfo) ([s|Cabal installation successful|]) - VLeft (V (AlreadyInstalled treq)) -> + VLeft (V (AlreadyInstalled _ v)) -> runLogger $ $(logWarn) - (T.pack (show treq) <> [s| already installed|]) + [i|Cabal ver #{prettyVer v} already installed|] VLeft e -> do runLogger $ do $(logError) [i|#{e}|] @@ -502,7 +548,7 @@ main = do SetGHC (SetGHCOptions {..}) -> void $ (runSetGHC $ do - dls <- _binaryDownloads <$> liftE getDownloads + dls <- liftE getDownloads v <- liftE $ fromVersion dls ghcVer GHC liftE $ setGHC v SetGHCOnly ) @@ -515,7 +561,7 @@ main = do List (ListOptions {..}) -> void $ (runListGHC $ do - dls <- _binaryDownloads <$> liftE getDownloads + dls <- liftE getDownloads liftIO $ listVersions dls lTool lCriteria ) >>= \case @@ -543,24 +589,52 @@ main = do VLeft e -> runLogger ($(logError) [i|#{e}|]) >> exitFailure - Compile (CompileOptions {..}) -> + Compile (CompileGHC CompileOptions {..}) -> void $ (runCompileGHC $ do - dls <- _sourceDownloads <$> liftE getDownloads - liftE $ compileGHC dls ghcVer bootstrapVer jobs buildConfig + dls <- liftE getDownloads + liftE + $ compileGHC dls targetVer bootstrapVer jobs buildConfig ) >>= \case VRight _ -> runLogger $ $(logInfo) ([s|GHC successfully compiled and installed|]) - VLeft (V (AlreadyInstalled treq)) -> + VLeft (V (AlreadyInstalled _ v)) -> runLogger $ $(logWarn) - (T.pack (show treq) <> [s| already installed|]) + [i|GHC ver #{prettyVer v} already installed|] + VLeft (V (BuildFailed tmpdir e)) -> + runLogger + ($(logError) [i|Build failed with #{e} +Check the logs at ~/ghcup/logs and the build directory #{tmpdir} for more clues.|] + ) + >> exitFailure + VLeft e -> + runLogger ($(logError) [i|#{e}|]) >> exitFailure + + Compile (CompileCabal CompileOptions {..}) -> + void + $ (runCompileCabal $ do + dls <- liftE getDownloads + liftE $ compileCabal dls + targetVer + bootstrapVer + jobs + ) + >>= \case + VRight _ -> + runLogger $ $(logInfo) + ([s|Cabal successfully compiled and installed|]) + VLeft (V (BuildFailed tmpdir e)) -> + runLogger + ($(logError) [i|Build failed with #{e} +Check the logs at ~/ghcup/logs and the build directory #{tmpdir} for more clues.|] + ) + >> exitFailure VLeft e -> runLogger ($(logError) [i|#{e}|]) >> exitFailure Upgrade (uOpts) -> do - liftIO $ putStrLn $ show uOpts target <- case uOpts of UpgradeInplace -> do efp <- liftIO $ getExecutablePath @@ -573,7 +647,7 @@ main = do void $ (runUpgrade $ do - dls <- _binaryDownloads <$> liftE getDownloads + dls <- liftE getDownloads liftE $ upgradeGHCup dls target ) >>= \case @@ -585,11 +659,12 @@ main = do VLeft e -> runLogger ($(logError) [i|#{e}|]) >> exitFailure + NumericVersion -> T.hPutStr stdout (prettyPVP ghcUpVer) pure () fromVersion :: Monad m - => BinaryDownloads + => GHCupDownloads -> Maybe ToolVersion -> Tool -> Excepts '[TagNotFound] m Version @@ -611,6 +686,7 @@ printListResult lr = do , column expand left def def , column expand left def def , column expand left def def + , column expand left def def ] $ fmap (\ListResult {..} -> @@ -621,6 +697,7 @@ printListResult lr = do , fmap toLower . show $ lTool , T.unpack . prettyVer $ lVer , intercalate "," $ ((fmap . fmap) toLower . fmap show $ lTag) + , if fromSrc then (color Blue "compiled") else mempty ] ) lr diff --git a/cabal.project.freeze b/cabal.project.freeze index ce40ef8..9610c15 100644 --- a/cabal.project.freeze +++ b/cabal.project.freeze @@ -1,5 +1,4 @@ constraints: any.Cabal ==2.4.0.1, - any.HUnit ==1.6.0.0, any.HsOpenSSL ==0.11.4.17, HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -old-locale, any.IfElse ==0.85, @@ -10,22 +9,28 @@ constraints: any.Cabal ==2.4.0.1, abstract-deque -usecas, any.aeson ==1.4.6.0, aeson -bytestring-builder -cffi -developer -fast, + any.aeson-pretty ==0.8.8, + aeson-pretty -lib-only, any.ansi-terminal ==0.10.3, ansi-terminal -example, + any.ansi-wl-pprint ==0.6.9, + ansi-wl-pprint -example, any.array ==0.5.3.0, any.ascii-string ==1.0.1.4, + any.assoc ==1.0.1, any.async ==2.2.2, async -bench, any.atomic-primops ==0.8.3, atomic-primops -debug, any.attoparsec ==0.13.2.3, attoparsec -developer, + any.auto-update ==0.1.6, any.base ==4.12.0.0, any.base-compat ==0.11.1, any.base-orphans ==0.8.2, any.base-prelude ==1.3, + any.base16-bytestring ==0.1.1.6, any.base64-bytestring ==1.0.0.3, - any.basement ==0.0.11, any.bifunctors ==5.5.7, bifunctors +semigroups +tagged, any.binary ==0.8.6.0, @@ -99,6 +104,7 @@ constraints: any.Cabal ==2.4.0.1, any.io-streams ==1.5.1.0, io-streams -nointeractivetests, any.language-bash ==0.9.0, + any.lifted-base ==0.2.3.12, any.list-t ==1.0.4, any.lockfree-queue ==0.2.3.1, any.lzma ==0.0.0.3, @@ -108,29 +114,42 @@ constraints: any.Cabal ==2.4.0.1, megaparsec -dev, any.mmorph ==1.1.3, any.monad-control ==1.0.2.3, + any.monad-logger ==0.3.32, + monad-logger +template_haskell, + any.monad-loops ==0.4.3, + monad-loops +base4, + any.mono-traversable ==1.0.15.1, any.mtl ==2.2.2, any.mwc-random ==0.14.0.0, any.network ==3.0.1.1, - any.network-uri ==2.6.2.0, + any.network-uri ==2.6.3.0, + any.old-locale ==1.0.0.7, + any.old-time ==1.1.0.3, any.openssl-streams ==1.2.2.0, any.optics ==0.2, any.optics-core ==0.2, any.optics-extra ==0.2, any.optics-th ==0.2, + any.optics-vl ==0.2, + any.optparse-applicative ==0.15.1.0, any.parsec ==3.1.13.0, any.parser-combinators ==1.2.1, parser-combinators -dev, any.pretty ==1.1.3.6, + any.pretty-terminal ==0.1.0.0, any.prettyprinter ==1.6.1, prettyprinter -buildreadme, - any.primitive ==0.7.0.0, + any.primitive ==0.7.0.1, any.primitive-extras ==0.8, any.primitive-unlifted ==0.1.3.0, any.process ==1.6.5.0, any.profunctors ==5.5.2, - any.quickcheck-io ==0.2.0, any.random ==1.1, + any.recursion-schemes ==5.1.3, + recursion-schemes +template-haskell, + any.resourcet ==1.2.3, any.rts ==1.0, + any.safe ==0.3.18, any.safe-exceptions ==0.1.7.0, any.scientific ==0.3.6.2, scientific -bytestring-builder -integer-simple, @@ -138,26 +157,41 @@ constraints: any.Cabal ==2.4.0.1, semigroupoids +comonad +containers +contravariant +distributive +doctests +tagged +unordered-containers, any.semigroups ==0.19.1, semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, - any.setenv ==0.1.1.3, any.sop-core ==0.5.0.0, - any.splitmix ==0.0.3, + any.split ==0.2.3.4, + any.splitmix ==0.0.4, splitmix -optimised-mixer +random, any.stm ==2.5.0.0, + any.stm-chans ==3.0.0.4, + any.streaming-commons ==0.2.1.2, + streaming-commons -use-bytestring-builder, + any.streamly ==0.7.1, streamly -debug -dev -examples -examples-sdl -fusion-plugin -has-llvm -inspection -no-charts -no-fusion -streamk, any.streamly-bytestring ==0.1.2, + any.streamly-posix ==0.1.0.0, any.strict-base ==0.4.0.0, + any.string-interpolate ==0.2.0.0, any.syb ==0.7.1, + any.table-layout ==0.8.0.5, any.tagged ==0.8.6, tagged +deepseq +transformers, - any.tar-bytestring ==0.6.2.0, + any.tar-bytestring ==0.6.3.0, any.template-haskell ==2.14.0.0, - any.terminfo ==0.4.1.2, + any.terminal-progress-bar ==0.4.1, + any.terminal-size ==0.3.2.1, any.text ==1.2.3.1, + any.text-conversions ==0.3.0, any.text-icu ==0.7.0.1, any.text-short ==0.1.3, text-short -asserts, - any.tf-random ==0.5, any.th-abstraction ==0.3.2.0, + any.th-expand-syns ==0.4.5.0, + any.th-lift ==0.8.1, + any.th-lift-instances ==0.1.14, + any.th-orphans ==0.13.9, + any.th-reify-many ==0.1.9, + any.these ==1.0.1, + these +aeson +assoc +quickcheck +semigroupoids, any.time ==1.8.0.2, any.time-compat ==1.9.2.2, time-compat -old-locale, @@ -169,14 +203,20 @@ constraints: any.Cabal ==2.4.0.1, any.typed-process ==0.2.6.0, any.unix ==2.7.2.2, any.unix-bytestring ==0.3.7.3, - any.unliftio-core ==0.1.2.0, + any.unix-compat ==0.5.2, + unix-compat -old-time, + any.unix-time ==0.4.7, + any.unliftio-core ==0.2.0.1, any.unordered-containers ==0.2.10.0, unordered-containers -debug, - any.url ==2.1.3, + any.uri-bytestring ==0.3.2.2, + uri-bytestring -lib-werror, any.utf8-string ==1.0.1.1, any.uuid-types ==1.0.3, any.vector ==0.12.1.2, vector +boundschecks -internalchecks -unsafechecks -wall, + any.vector-algorithms ==0.8.0.3, + vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, any.vector-builder ==0.3.8, any.vector-th-unbox ==0.2.1.7, any.versions ==3.5.3, diff --git a/ghcup.cabal b/ghcup.cabal index cada304..d2ac512 100644 --- a/ghcup.cabal +++ b/ghcup.cabal @@ -27,6 +27,7 @@ common ascii-string { build-depends: ascii-string >= 1.0 } common async { build-depends: async >= 0.8 } common attoparsec { build-depends: attoparsec >= 0.13 } common base { build-depends: base >= 4.12 && < 5 } +common binary { build-depends: binary >= 0.8.6.0 } common bytestring { build-depends: bytestring >= 0.10 } common bzlib { build-depends: bzlib >= 0.5.0.5 } common containers { build-depends: containers >= 0.6 } @@ -53,13 +54,14 @@ common pretty-terminal { build-depends: pretty-terminal >= 0.1.0.0 } common resourcet { build-depends: resourcet >= 1.2.2 } common safe { build-depends: safe >= 0.3.18 } common safe-exceptions { build-depends: safe-exceptions >= 0.1 } -common streamly { build-depends: streamly >= 0.7 } +common streamly { build-depends: streamly >= 0.7.1 } common streamly-posix { build-depends: streamly-posix >= 0.1.0.0 } common streamly-bytestring { build-depends: streamly-bytestring >= 0.1.2 } common strict-base { build-depends: strict-base >= 0.4 } common string-interpolate { build-depends: string-interpolate >= 0.2.0.0 } common table-layout { build-depends: table-layout >= 0.8 } -common tar-bytestring { build-depends: tar-bytestring >= 0.6.2.0 } +common tar-bytestring { build-depends: tar-bytestring >= 0.6.3.0 } +common terminal-progress-bar { build-depends: terminal-progress-bar >= 0.4.1 } common template-haskell { build-depends: template-haskell >= 2.7 } common text { build-depends: text >= 1.2 } common text-icu { build-depends: text-icu >= 0.7 } @@ -96,6 +98,7 @@ library , ascii-string , async , attoparsec + , binary , bytestring , bzlib , containers @@ -128,6 +131,7 @@ library , string-interpolate , tar-bytestring , template-haskell + , terminal-progress-bar , text , text-icu , transformers @@ -211,9 +215,7 @@ executable ghcup-gen , uri-bytestring , utf8-string main-is: Main.hs - other-modules: BinaryDownloads - GHCupDownloads - SourceDownloads + other-modules: GHCupDownloads Validate -- other-extensions: build-depends: ghcup diff --git a/lib/GHCup.hs b/lib/GHCup.hs index 5ebf74f..52a1bb9 100644 --- a/lib/GHCup.hs +++ b/lib/GHCup.hs @@ -23,6 +23,7 @@ import GHCup.Utils.File import GHCup.Utils.Prelude import GHCup.Utils.String.QQ import GHCup.Utils.Version.QQ +import GHCup.Version import Control.Applicative import Control.Exception.Safe @@ -34,7 +35,6 @@ import Control.Monad.Trans.Class ( lift ) import Control.Monad.Trans.Resource hiding ( throwM ) import Data.ByteString ( ByteString ) -import Data.Foldable import Data.List import Data.Maybe import Data.String.Interpolate @@ -50,7 +50,6 @@ import Prelude hiding ( abs , writeFile ) import System.IO.Error -import System.Posix.Env.ByteString ( getEnvironment ) import System.Posix.FilePath ( getSearchPath ) import System.Posix.RawFilePath.Directory.Errors ( hideError ) @@ -65,55 +64,116 @@ import qualified Data.Text.Encoding as E --[ Tool installation ]-- ------------------------- --- TODO: custom logger intepreter and pretty printing --- | Install a tool, such as GHC or cabal. This also sets --- the ghc-x.y.z symlinks and potentially the ghc-x.y. --- --- This can fail in many ways. You may want to explicitly catch --- `AlreadyInstalled` to not make it fatal. -installTool :: ( MonadThrow m - , MonadReader Settings m - , MonadLogger m - , MonadCatch m - , MonadIO m - , MonadFail m - , MonadResource m - ) -- tmp file - => BinaryDownloads - -> ToolRequest - -> Maybe PlatformRequest -- ^ if Nothing, looks up current host platform - -> Excepts - '[ AlreadyInstalled - , ArchiveError - , DistroNotFound - , FileDoesNotExistError - , FileError - , JSONError - , NoCompatibleArch - , NoDownload - , NotInstalled - , PlatformResultError - , ProcessError - , URLException - , DigestError - ] - m - () -installTool bDls treq mpfReq = do - lift $ $(logDebug) [i|Requested to install: #{treq}|] - - -- stop if GHC is already installed, other tools can be overwritten - case treq of - (ToolRequest GHC _) -> - whenM (liftIO $ toolAlreadyInstalled treq) - $ (throwE $ AlreadyInstalled treq) - (ToolRequest Cabal _) -> pure () +installGHCBin :: ( MonadFail m + , MonadMask m + , MonadCatch m + , MonadReader Settings m + , MonadLogger m + , MonadResource m + , MonadIO m + ) + => GHCupDownloads + -> Version + -> Maybe PlatformRequest -- ^ if Nothing, looks up current host platform + -> Excepts + '[ AlreadyInstalled + , BuildFailed + , DigestError + , DistroNotFound + , DownloadFailed + , NoCompatibleArch + , NoCompatiblePlatform + , NoDownload + , NotInstalled + , UnknownArchive + ] + m + () +installGHCBin bDls ver mpfReq = do + lift $ $(logDebug) [i|Requested to install GHC with #{ver}|] + whenM (liftIO $ toolAlreadyInstalled GHC ver) + $ (throwE $ AlreadyInstalled GHC ver) Settings {..} <- lift ask -- download (or use cached version) - dlinfo <- liftE $ getDownloadInfo bDls treq mpfReq + dlinfo <- liftE $ getDownloadInfo bDls GHC ver mpfReq + dl <- liftE $ downloadCached dlinfo Nothing + + -- unpack + tmpUnpack <- lift mkGhcupTmpDir + liftE $ unpackToDir tmpUnpack dl + + -- prepare paths + ghcdir <- liftIO $ ghcupGHCDir ver + + -- the subdir of the archive where we do the work + let archiveSubdir = maybe tmpUnpack (tmpUnpack ) (view dlSubdir dlinfo) + + catchAllE + (\es -> + liftIO (hideError doesNotExistErrorType $ deleteDirRecursive ghcdir) + >> throwE (BuildFailed archiveSubdir es) + ) + $ installGHC' archiveSubdir ghcdir + + -- only clean up dir if the build succeeded + liftIO $ deleteDirRecursive tmpUnpack + + liftE $ postGHCInstall ver + + where + -- | Install an unpacked GHC distribution. This only deals with the GHC build system and nothing else. + installGHC' :: (MonadLogger m, MonadIO m) + => Path Abs -- ^ Path to the unpacked GHC bindist (where the configure script resides) + -> Path Abs -- ^ Path to install to + -> Excepts '[ProcessError] m () + installGHC' path inst = do + lift $ $(logInfo) [s|Installing GHC (this may take a while)|] + lEM $ liftIO $ execLogged [s|./configure|] + False + [[s|--prefix=|] <> toFilePath inst] + ([rel|ghc-configure.log|] :: Path Rel) + (Just path) + Nothing + lEM $ liftIO $ execLogged [s|make|] + True + [[s|install|]] + ([rel|ghc-make.log|] :: Path Rel) + (Just path) + Nothing + pure () + + +installCabalBin :: ( MonadMask m + , MonadCatch m + , MonadReader Settings m + , MonadLogger m + , MonadResource m + , MonadIO m + ) + => GHCupDownloads + -> Version + -> Maybe PlatformRequest -- ^ if Nothing, looks up current host platform + -> Excepts + '[ CopyError + , DigestError + , DistroNotFound + , DownloadFailed + , NoCompatibleArch + , NoCompatiblePlatform + , NoDownload + , UnknownArchive + ] + m + () +installCabalBin bDls ver mpfReq = do + lift $ $(logDebug) [i|Requested to install cabal version #{ver}|] + Settings {..} <- lift ask + + -- download (or use cached version) + dlinfo <- liftE $ getDownloadInfo bDls Cabal ver mpfReq dl <- liftE $ downloadCached dlinfo Nothing -- unpack @@ -121,62 +181,28 @@ installTool bDls treq mpfReq = do liftE $ unpackToDir tmpUnpack dl -- prepare paths - ghcdir <- liftIO $ ghcupGHCDir (view trVersion $ treq) bindir <- liftIO ghcupBinDir -- the subdir of the archive where we do the work let archiveSubdir = maybe tmpUnpack (tmpUnpack ) (view dlSubdir dlinfo) - case treq of - (ToolRequest GHC ver) -> do - liftE $ installGHC archiveSubdir ghcdir - liftE $ postGHCInstall ver - (ToolRequest Cabal _) -> liftE $ installCabal archiveSubdir bindir + liftE $ installCabal' archiveSubdir bindir pure () - -toolAlreadyInstalled :: ToolRequest -> IO Bool -toolAlreadyInstalled ToolRequest {..} = case _trTool of - GHC -> ghcInstalled _trVersion - Cabal -> cabalInstalled _trVersion - - - --- | Install an unpacked GHC distribution. This only deals with the GHC build system and nothing else. -installGHC :: (MonadLogger m, MonadIO m) - => Path Abs -- ^ Path to the unpacked GHC bindist (where the configure script resides) - -> Path Abs -- ^ Path to install to - -> Excepts '[ProcessError] m () -installGHC path inst = do - lift $ $(logInfo) [s|Installing GHC (this may take a while)|] - lEM $ liftIO $ execLogged [s|./configure|] - False - [[s|--prefix=|] <> toFilePath inst] - ([rel|ghc-configure.log|] :: Path Rel) - (Just path) - Nothing - lEM $ liftIO $ execLogged [s|make|] - True - [[s|install|]] - ([rel|ghc-make.log|] :: Path Rel) - (Just path) - Nothing - pure () - - --- | Install an unpacked cabal distribution. -installCabal :: (MonadLogger m, MonadCatch m, MonadIO m) - => Path Abs -- ^ Path to the unpacked cabal bindist (where the executable resides) - -> Path Abs -- ^ Path to install to - -> Excepts '[FileError] m () -installCabal path inst = do - lift $ $(logInfo) [s|Installing cabal|] - let cabalFile = [rel|cabal|] :: Path Rel - liftIO $ createDirIfMissing newDirPerms inst - handleIO (throwE . CopyError . show) $ liftIO $ copyFile - (path cabalFile) - (inst cabalFile) - Overwrite + where + -- | Install an unpacked cabal distribution. + installCabal' :: (MonadLogger m, MonadCatch m, MonadIO m) + => Path Abs -- ^ Path to the unpacked cabal bindist (where the executable resides) + -> Path Abs -- ^ Path to install to + -> Excepts '[CopyError] m () + installCabal' path inst = do + lift $ $(logInfo) [s|Installing cabal|] + let cabalFile = [rel|cabal|] :: Path Rel + liftIO $ createDirIfMissing newDirPerms inst + handleIO (throwE . CopyError . show) $ liftIO $ copyFile + (path cabalFile) + (inst cabalFile) + Overwrite @@ -195,7 +221,7 @@ installCabal path inst = do -- -- Additionally creates a ~/.ghcup/share -> ~/.ghcup/ghc//share symlink -- for `SetGHCOnly` constructor. -setGHC :: (MonadThrow m, MonadFail m, MonadIO m) +setGHC :: (MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> SetGHC -> Excepts '[NotInstalled] m () @@ -207,7 +233,12 @@ setGHC ver sghc = do bindir <- liftIO $ ghcupBinDir liftIO $ hideError AlreadyExists $ createDirRecursive newDirPerms bindir - when (sghc == SetGHCOnly) $ liftE (delOldSymlinks bindir) + -- first delete the old symlinks (this fixes compatibility issues + -- with old ghcup) + case sghc of + SetGHCOnly -> liftE $ rmPlain ver + SetGHCMajor -> lift $ rmMajorSymlinks ver + SetGHCMinor -> lift $ rmMinorSymlinks ver -- for ghc tools (ghc, ghci, haddock, ...) verfiles <- ghcToolFiles ver @@ -221,45 +252,39 @@ setGHC ver sghc = do <$> getGHCMajor ver parseRel (toFilePath file <> B.singleton _hyphen <> major') SetGHCMinor -> parseRel (toFilePath file <> B.singleton _hyphen <> verBS) - liftIO $ hideError doesNotExistErrorType $ deleteFile - (bindir targetFile) - liftIO $ createSymlink (bindir targetFile) - (ghcLinkDestination (toFilePath file) ver) + + -- create symlink + let fullF = bindir targetFile + let destL = ghcLinkDestination (toFilePath file) ver + lift $ $(logDebug) [i|ln -s #{destL} #{toFilePath fullF}|] + liftIO $ createSymlink fullF destL -- create symlink for share dir - liftIO $ symlinkShareDir ghcdir verBS + lift $ symlinkShareDir ghcdir verBS pure () where - symlinkShareDir :: Path Abs -> ByteString -> IO () + symlinkShareDir :: (MonadIO m, MonadLogger m) + => Path Abs + -> ByteString + -> m () symlinkShareDir ghcdir verBS = do - destdir <- ghcupBaseDir + destdir <- liftIO $ ghcupBaseDir case sghc of SetGHCOnly -> do let sharedir = [rel|share|] :: Path Rel let fullsharedir = ghcdir sharedir - whenM (doesDirectoryExist fullsharedir) $ do - liftIO $ hideError doesNotExistErrorType $ deleteFile - (destdir sharedir) - createSymlink - (destdir sharedir) - ([s|./ghc/|] <> verBS <> [s|/|] <> toFilePath sharedir) + whenM (liftIO $ doesDirectoryExist fullsharedir) $ do + let fullF = destdir sharedir + let targetF = [s|./ghc/|] <> verBS <> [s|/|] <> toFilePath sharedir + $(logDebug) [i|rm -f #{fullF}|] + liftIO $ hideError doesNotExistErrorType $ deleteFile fullF + $(logDebug) [i|ln -s #{targetF} #{fullF}|] + liftIO $ createSymlink fullF targetF _ -> pure () - -- The old tool symlinks might be different (e.g. more) than the - -- requested version. Have to avoid "stray" symlinks. - delOldSymlinks :: forall m - . (MonadThrow m, MonadFail m, MonadIO m) - => Path Abs - -> Excepts '[] m () - delOldSymlinks bindir = catchLiftLeft (\NotInstalled{} -> pure ()) $ do - mv <- ghcSet - for_ mv $ \ver' -> do - verfiles <- ghcToolFiles ver' - for_ verfiles $ \f -> liftIO $ deleteFile (bindir f) - @@ -278,17 +303,18 @@ data ListResult = ListResult , lTag :: [Tag] , lInstalled :: Bool , lSet :: Bool + , fromSrc :: Bool } deriving Show -availableToolVersions :: BinaryDownloads -> Tool -> [(Version, [Tag])] +availableToolVersions :: GHCupDownloads -> Tool -> [(Version, [Tag])] availableToolVersions av tool = toListOf (ix tool % to (fmap (\(v, vi) -> (v, (_viTags vi))) . Map.toList) % folded) av -listVersions :: BinaryDownloads +listVersions :: GHCupDownloads -> Maybe Tool -> Maybe ListCriteria -> IO [ListResult] @@ -298,7 +324,8 @@ listVersions av lt criteria = case lt of Nothing -> do ghcvers <- listVersions av (Just GHC) criteria cabalvers <- listVersions av (Just Cabal) criteria - pure (ghcvers <> cabalvers) + ghcupvers <- listVersions av (Just GHCup) criteria + pure (ghcvers <> cabalvers <> ghcupvers) where toListResult :: Tool -> (Version, [Tag]) -> IO ListResult @@ -306,11 +333,17 @@ listVersions av lt criteria = case lt of GHC -> do lSet <- fmap (maybe False (== v)) $ ghcSet lInstalled <- ghcInstalled v + fromSrc <- ghcSrcInstalled v pure ListResult { lVer = v, lTag = tags, lTool = t, .. } Cabal -> do lSet <- fmap (== v) $ cabalSet lInstalled <- cabalInstalled v - pure ListResult { lVer = v, lTag = tags, lTool = t, .. } + pure ListResult { lVer = v, lTag = tags, lTool = t, fromSrc = False, .. } + GHCup -> do + let lSet = prettyPVP ghcUpVer == prettyVer v + let lInstalled = True + pure ListResult { lVer = v, lTag = tags, lTool = t, fromSrc = False, .. } + filter' :: [ListResult] -> [ListResult] filter' lr = case criteria of @@ -320,8 +353,6 @@ listVersions av lt criteria = case lt of - - -------------- --[ GHC rm ]-- -------------- @@ -335,9 +366,8 @@ rmGHCVer ver = do isSetGHC <- fmap (maybe False (== ver)) $ ghcSet dir <- liftIO $ ghcupGHCDir ver let d' = toFilePath dir - exists <- liftIO $ doesDirectoryExist dir + exists <- liftIO $ doesDirectoryExist dir - toolsFiles <- liftE $ ghcToolFiles ver if exists then do @@ -346,59 +376,27 @@ rmGHCVer ver = do liftIO $ deleteDirRecursive dir lift $ $(logInfo) [i|Removing ghc-x.y.z symlinks|] - liftIO $ rmMinorSymlinks + lift $ rmMinorSymlinks ver lift $ $(logInfo) [i|Removing/rewiring ghc-x.y symlinks|] - liftE fixMajorSymlinks + -- first remove + lift $ rmMajorSymlinks ver + -- then fix them (e.g. with an earlier version) + (mj, mi) <- getGHCMajor ver + getGHCForMajor mj mi >>= mapM_ (\v -> liftE $ setGHC v SetGHCMajor) - when isSetGHC $ liftE $ do + + when isSetGHC $ do lift $ $(logInfo) [i|Removing ghc symlinks|] - rmPlain toolsFiles + liftE $ rmPlain ver liftIO $ ghcupBaseDir >>= hideError doesNotExistErrorType . deleteFile . ( ([rel|share|] :: Path Rel)) - else throwE (NotInstalled $ ToolRequest GHC ver) + else throwE (NotInstalled GHC ver) - where - -- e.g. ghc-8.6.5 - rmMinorSymlinks :: IO () - rmMinorSymlinks = do - bindir <- ghcupBinDir - files <- getDirsFiles' bindir - let myfiles = filter - (\x -> ([s|-|] <> verToBS ver) `B.isSuffixOf` toFilePath x) - files - forM_ myfiles $ \f -> deleteFile (bindir f) - - -- E.g. ghc, if this version is the set one. - -- This reads `ghcupGHCDir`. - rmPlain :: (MonadThrow m, MonadFail m, MonadIO m) - => [Path Rel] -- ^ tools files - -> Excepts '[NotInstalled] m () - rmPlain files = do - bindir <- liftIO $ ghcupBinDir - forM_ files $ \f -> liftIO $ deleteFile (bindir f) - - -- e.g. ghc-8.6 - fixMajorSymlinks :: (MonadFail m, MonadThrow m, MonadIO m) - => Excepts '[NotInstalled] m () - fixMajorSymlinks = do - (mj, mi) <- getGHCMajor ver - let v' = E.encodeUtf8 $ intToText mj <> [s|.|] <> intToText mi - - bindir <- liftIO $ ghcupBinDir - - -- first delete them - files <- liftIO $ getDirsFiles' bindir - let myfiles = - filter (\x -> ([s|-|] <> v') `B.isSuffixOf` toFilePath x) files - forM_ myfiles $ \f -> liftIO $ deleteFile (bindir f) - - -- then fix them (e.g. with an earlier version) - getGHCForMajor mj mi >>= mapM_ (\v -> liftE $ setGHC v SetGHCMajor) @@ -409,7 +407,7 @@ rmGHCVer ver = do getDebugInfo :: (MonadLogger m, MonadCatch m, MonadReader Settings m, MonadIO m) => Excepts - '[PlatformResultError , NoCompatibleArch , DistroNotFound] + '[NoCompatiblePlatform , NoCompatibleArch , DistroNotFound] m DebugInfo getDebugInfo = do @@ -430,38 +428,37 @@ getDebugInfo = do --------------- -compileGHC :: ( MonadReader Settings m +compileGHC :: ( MonadMask m + , MonadReader Settings m , MonadThrow m , MonadResource m , MonadLogger m , MonadIO m , MonadFail m ) - => SourceDownloads + => GHCupDownloads -> Version -- ^ version to install -> Version -- ^ version to bootstrap with -> Maybe Int -- ^ jobs -> Maybe (Path Abs) -- ^ build config -> Excepts '[ AlreadyInstalled - , NotInstalled - , GHCNotFound - , ArchiveError - , ProcessError - , URLException + , BuildFailed , DigestError - , BuildConfigNotFound + , DownloadFailed + , GHCupSetError + , NoDownload + , UnknownArchive ] m () compileGHC dls tver bver jobs mbuildConfig = do - let treq = ToolRequest GHC tver lift $ $(logDebug) [i|Requested to compile: #{tver} with #{bver}|] - alreadyInstalled <- liftIO $ toolAlreadyInstalled treq - when alreadyInstalled $ (throwE $ AlreadyInstalled treq) + whenM (liftIO $ toolAlreadyInstalled GHC tver) + (throwE $ AlreadyInstalled GHC tver) -- download source tarball - dlInfo <- preview (ix tver) dls ?? GHCNotFound + dlInfo <- preview (ix GHC % ix tver % viSourceDL % _Just) dls ?? NoDownload dl <- liftE $ downloadCached dlInfo Nothing -- unpack @@ -470,43 +467,20 @@ compileGHC dls tver bver jobs mbuildConfig = do bghc <- parseRel ([s|ghc-|] <> verToBS bver) let workdir = maybe id (flip ()) (view dlSubdir dlInfo) $ tmpUnpack - ghcdir <- liftIO $ ghcupGHCDir tver - if - | tver >= [vver|8.8.0|] -> do - cEnv <- liftIO $ getEnvironment - spaths <- catMaybes . fmap parseAbs <$> liftIO getSearchPath - bghcPath <- (liftIO $ searchPath spaths bghc) !? GHCNotFound - let newEnv = ([s|GHC|], toFilePath bghcPath) : cEnv - lEM $ liftIO $ exec [s|./configure|] - False - [[s|--prefix=|] <> toFilePath ghcdir] - (Just workdir) - (Just newEnv) - | otherwise -> do - lEM $ liftIO $ exec - [s|./configure|] - False - [ [s|--prefix=|] <> toFilePath ghcdir - , [s|--with-ghc=|] <> toFilePath bghc - ] - (Just workdir) - Nothing - let build_mk = workdir ([rel|mk/build.mk|] :: Path Rel) - case mbuildConfig of - Just bc -> liftIO $ copyFile bc build_mk Overwrite - Nothing -> liftIO $ writeFile build_mk (Just newFilePerms) defaultConf + catchAllE + (\es -> + liftIO (hideError doesNotExistErrorType $ deleteDirRecursive ghcdir) + >> throwE (BuildFailed workdir es) + ) + $ compile bghc ghcdir workdir + markSrcBuilt ghcdir workdir - lEM $ liftIO $ exec [s|make|] - True - (maybe [] (\j -> [[s|-j|] <> fS (show j)]) jobs) - (Just workdir) - Nothing + -- only clean up dir if the build succeeded + liftIO $ deleteDirRecursive tmpUnpack - lEM $ liftIO $ exec [s|make|] True [[s|install|]] (Just workdir) Nothing - - liftE $ postGHCInstall tver + reThrowAll GHCupSetError $ postGHCInstall tver pure () where @@ -518,28 +492,160 @@ BUILD_SPHINX_PDF = NO HADDOCK_DOCS = YES GhcWithLlvmCodeGen = YES|] + compile :: (MonadCatch m, MonadLogger m, MonadIO m) + => Path Rel + -> Path Abs + -> Path Abs + -> Excepts + '[NoDownload , FileDoesNotExistError , ProcessError] + m + () + compile bghc ghcdir workdir = do + lift $ $(logInfo) [i|configuring build|] + if + | tver >= [vver|8.8.0|] -> do + spaths <- catMaybes . fmap parseAbs <$> liftIO getSearchPath + bghcPath <- (liftIO $ searchPath spaths bghc) !? NoDownload + newEnv <- addToCurrentEnv [([s|GHC|], toFilePath bghcPath)] + lEM $ liftIO $ execLogged [s|./configure|] + False + [[s|--prefix=|] <> toFilePath ghcdir] + ([rel|ghc-configure.log|] :: Path Rel) + (Just workdir) + (Just newEnv) + | otherwise -> do + lEM $ liftIO $ execLogged + [s|./configure|] + False + [ [s|--prefix=|] <> toFilePath ghcdir + , [s|--with-ghc=|] <> toFilePath bghc + ] + ([rel|ghc-configure.log|] :: Path Rel) + (Just workdir) + Nothing + + case mbuildConfig of + Just bc -> liftIOException + doesNotExistErrorType + (FileDoesNotExistError $ toFilePath bc) + (liftIO $ copyFile bc (build_mk workdir) Overwrite) + Nothing -> + liftIO $ writeFile (build_mk workdir) (Just newFilePerms) defaultConf + + lift + $ $(logInfo) + [i|Building (this may take a while)... Run 'tail -f ~/.ghcup/logs/ghc-make.log' to see the progress.|] + lEM $ liftIO $ execLogged [s|make|] + True + (maybe [] (\j -> [[s|-j|] <> fS (show j)]) jobs) + ([rel|ghc-make.log|] :: Path Rel) + (Just workdir) + Nothing + + lift $ $(logInfo) [i|Installing...|] + lEM $ liftIO $ execLogged [s|make|] + True + [[s|install|]] + ([rel|ghc-make.log|] :: Path Rel) + (Just workdir) + Nothing + + markSrcBuilt ghcdir workdir = do + let dest = (ghcdir ghcUpSrcBuiltFile) + liftIO $ copyFile (build_mk workdir) dest Overwrite + + build_mk workdir = workdir ([rel|mk/build.mk|] :: Path Rel) - --------------- - --[ Set GHC ]-- - --------------- +compileCabal :: ( MonadReader Settings m + , MonadResource m + , MonadMask m + , MonadLogger m + , MonadIO m + ) + => GHCupDownloads + -> Version -- ^ version to install + -> Version -- ^ GHC version to build with + -> Maybe Int + -> Excepts + '[ BuildFailed + , DigestError + , DownloadFailed + , NoDownload + , UnknownArchive + ] + m + () +compileCabal dls tver bver jobs = do + lift $ $(logDebug) [i|Requested to compile: #{tver} with ghc-#{bver}|] + + -- download source tarball + dlInfo <- preview (ix Cabal % ix tver % viSourceDL % _Just) dls ?? NoDownload + dl <- liftE $ downloadCached dlInfo Nothing + + -- unpack + tmpUnpack <- lift mkGhcupTmpDir + liftE $ unpackToDir tmpUnpack dl + + let workdir = maybe id (flip ()) (view dlSubdir dlInfo) $ tmpUnpack + + reThrowAll (BuildFailed workdir) $ compile workdir + + -- only clean up dir if the build succeeded + liftIO $ deleteDirRecursive tmpUnpack + + pure () + + where + compile :: (MonadLogger m, MonadIO m) + => Path Abs + -> Excepts '[ProcessError] m () + compile workdir = do + lift + $ $(logInfo) + [i|Building (this may take a while)... Run 'tail -f ~/.ghcup/logs/cabal-bootstrap.log' to see the progress.|] + + let v' = verToBS bver + cabal_bin <- liftIO $ ghcupBinDir + newEnv <- lift $ addToCurrentEnv + [ ([s|GHC|] , [s|ghc-|] <> v') + , ([s|GHC_PKG|], [s|ghc-pkg-|] <> v') + , ([s|GHC_VER|], v') + , ([s|PREFIX|] , toFilePath cabal_bin) + ] + + lEM $ liftIO $ execLogged [s|./bootstrap.sh|] + False + (maybe [] (\j -> [[s|-j|], fS (show j)]) jobs) + ([rel|cabal-bootstrap.log|] :: Path Rel) + (Just workdir) + (Just newEnv) -upgradeGHCup :: ( MonadReader Settings m + + + --------------------- + --[ Upgrade GHCup ]-- + --------------------- + + +upgradeGHCup :: ( MonadMask m + , MonadReader Settings m , MonadCatch m , MonadLogger m , MonadThrow m , MonadResource m , MonadIO m ) - => BinaryDownloads + => GHCupDownloads -> Maybe (Path Abs) -- ^ full file destination to write ghcup into -> Excepts - '[ DigestError - , URLException + '[ CopyError + , DigestError , DistroNotFound - , PlatformResultError + , DownloadFailed , NoCompatibleArch + , NoCompatiblePlatform , NoDownload ] m @@ -547,14 +653,16 @@ upgradeGHCup :: ( MonadReader Settings m upgradeGHCup dls mtarget = do lift $ $(logInfo) [i|Upgrading GHCup...|] let latestVer = head $ getTagged dls GHCup Latest - dli <- liftE $ getDownloadInfo dls (ToolRequest GHCup latestVer) Nothing + dli <- liftE $ getDownloadInfo dls GHCup latestVer Nothing tmp <- lift withGHCupTmpDir let fn = [rel|ghcup|] :: Path Rel p <- liftE $ download dli tmp (Just fn) case mtarget of Nothing -> do dest <- liftIO $ ghcupBinDir - liftIO $ copyFile p (dest fn) Overwrite + handleIO (throwE . CopyError . show) $ liftIO $ copyFile p + (dest fn) + Overwrite Just fullDest -> liftIO $ copyFile p fullDest Overwrite pure latestVer @@ -565,8 +673,9 @@ upgradeGHCup dls mtarget = do ------------- --- | Creates ghc-x.y.z and ghc-x.y symlinks. -postGHCInstall :: (MonadThrow m, MonadFail m, MonadIO m) +-- | Creates ghc-x.y.z and ghc-x.y symlinks. This is used for +-- both installing from source and bindist. +postGHCInstall :: (MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m () postGHCInstall ver = do diff --git a/lib/GHCup/Download.hs b/lib/GHCup/Download.hs index cf31d85..6ba9245 100644 --- a/lib/GHCup/Download.hs +++ b/lib/GHCup/Download.hs @@ -4,6 +4,7 @@ {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeApplications #-} module GHCup.Download where @@ -33,6 +34,7 @@ import Data.ByteString.Builder import Data.IORef import Data.Maybe import Data.String.Interpolate +import Data.Text.Read import Data.Versions import GHC.IO.Exception import HPath @@ -52,9 +54,12 @@ import "unix-bytestring" System.Posix.IO.ByteString ( fdWrite ) import System.Posix.RawFilePath.Directory.Errors ( hideError ) +import System.ProgressBar import URI.ByteString import URI.ByteString.QQ +import qualified Data.Binary.Builder as B +import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as L import qualified Data.Text.Encoding as E import qualified System.IO.Streams as Streams @@ -69,6 +74,11 @@ ghcupURL = + ------------------ + --[ High-level ]-- + ------------------ + + -- | Downloads the download information! getDownloads :: ( FromJSONKey Tool , FromJSONKey Version @@ -78,19 +88,16 @@ getDownloads :: ( FromJSONKey Tool , MonadReader Settings m , MonadLogger m ) - => Excepts - '[FileDoesNotExistError , URLException , JSONError] - m - GHCupDownloads + => Excepts '[JSONError , DownloadFailed] m GHCupDownloads getDownloads = do urlSource <- lift getUrlSource lift $ $(logDebug) [i|Receiving download info from: #{urlSource}|] case urlSource of GHCupURL -> do - bs <- liftE $ downloadBS ghcupURL + bs <- reThrowAll DownloadFailed $ downloadBS ghcupURL lE' JSONDecodeError $ eitherDecode' bs (OwnSource url) -> do - bs <- liftE $ downloadBS url + bs <- reThrowAll DownloadFailed $ downloadBS url lE' JSONDecodeError $ eitherDecode' bs (OwnSpec av) -> pure $ av @@ -101,18 +108,19 @@ getDownloadInfo :: ( MonadLogger m , MonadIO m , MonadReader Settings m ) - => BinaryDownloads - -> ToolRequest + => GHCupDownloads + -> Tool + -> Version -> Maybe PlatformRequest -> Excepts '[ DistroNotFound - , PlatformResultError + , NoCompatiblePlatform , NoCompatibleArch , NoDownload ] m DownloadInfo -getDownloadInfo bDls (ToolRequest t v) mpfReq = do +getDownloadInfo bDls t v mpfReq = do (PlatformRequest arch' plat ver) <- case mpfReq of Just x -> pure x Nothing -> do @@ -132,7 +140,7 @@ getDownloadInfo' :: Tool -- ^ user platform -> Maybe Versioning -- ^ optional version of the platform - -> BinaryDownloads + -> GHCupDownloads -> Either NoDownload DownloadInfo getDownloadInfo' t v a p mv dls = maybe (Left NoDownload) @@ -155,15 +163,21 @@ getDownloadInfo' t v a p mv dls = maybe -- 2. otherwise create a random file -- -- The file must not exist. -download :: (MonadReader Settings m, MonadThrow m, MonadLogger m, MonadIO m) +download :: ( MonadMask m + , MonadReader Settings m + , MonadThrow m + , MonadLogger m + , MonadIO m + ) => DownloadInfo -> Path Abs -- ^ destination dir -> Maybe (Path Rel) -- ^ optional filename - -> Excepts '[DigestError , URLException] m (Path Abs) -download dli dest mfn | scheme == [s|https|] = dl True - | scheme == [s|http|] = dl False - | scheme == [s|file|] = cp - | otherwise = throwE UnsupportedURL + -> Excepts '[DigestError , DownloadFailed] m (Path Abs) +download dli dest mfn + | scheme == [s|https|] = dl + | scheme == [s|http|] = dl + | scheme == [s|file|] = cp + | otherwise = throwE $ DownloadFailed (variantFromValue UnsupportedScheme) where scheme = view (dlUri % uriSchemeL' % schemeBSL') dli @@ -174,16 +188,12 @@ download dli dest mfn | scheme == [s|https|] = dl True fromFile <- parseAbs path liftIO $ copyFile fromFile destFile Strict pure destFile - dl https = do + dl = do let uri' = E.decodeUtf8 (serializeURIRef' (view dlUri dli)) lift $ $(logInfo) [i|downloading: #{uri'}|] - host <- - preview (dlUri % authorityL' % _Just % authorityHostL' % hostBSL') dli - ?? UnsupportedURL - let port = preview - (dlUri % authorityL' % _Just % authorityPortL' % _Just % portNumberL') - dli + (https, host, fullPath, port) <- reThrowAll DownloadFailed + $ uriToQuadruple (view dlUri dli) -- destination dir must exist liftIO $ hideError AlreadyExists $ createDirRecursive newDirPerms dest @@ -192,11 +202,9 @@ download dli dest mfn | scheme == [s|https|] = dl True -- download fd <- liftIO $ createRegularFileFd newFilePerms destFile let stepper = fdWrite fd - liftIO $ flip finally (closeFd fd) $ downloadInternal https - host - path - port - stepper + flip finally (liftIO $ closeFd fd) + $ reThrowAll DownloadFailed + $ downloadInternal True https host fullPath port stepper -- TODO: verify md5 during download liftE $ checkDigest dli destFile @@ -211,7 +219,8 @@ download dli dest mfn | scheme == [s|https|] = dl True -- | Download into tmpdir or use cached version, if it exists. If filename -- is omitted, infers the filename from the url. -downloadCached :: ( MonadResource m +downloadCached :: ( MonadMask m + , MonadResource m , MonadThrow m , MonadLogger m , MonadIO m @@ -219,7 +228,7 @@ downloadCached :: ( MonadResource m ) => DownloadInfo -> Maybe (Path Rel) -- ^ optional filename - -> Excepts '[DigestError , URLException] m (Path Abs) + -> Excepts '[DigestError , DownloadFailed] m (Path Abs) downloadCached dli mfn = do cache <- lift getCache case cache of @@ -238,11 +247,24 @@ downloadCached dli mfn = do liftE $ download dli tmp mfn + + + ------------------ + --[ Low-level ]-- + ------------------ + + -- | This is used for downloading the JSON. downloadBS :: (MonadCatch m, MonadIO m) => URI -> Excepts - '[FileDoesNotExistError , URLException] + '[ FileDoesNotExistError + , HTTPStatusError + , URIParseError + , UnsupportedScheme + , NoLocationHeader + , TooManyRedirs + ] m L.ByteString downloadBS uri' @@ -251,10 +273,10 @@ downloadBS uri' | scheme == [s|http|] = dl False | scheme == [s|file|] - = liftException doesNotExistErrorType (FileDoesNotExistError path) - $ (liftIO $ RD.readFile path :: MonadIO m => Excepts '[] m L.ByteString) + = liftIOException doesNotExistErrorType (FileDoesNotExistError path) + $ (liftIO $ RD.readFile path) | otherwise - = throwE UnsupportedURL + = throwE UnsupportedScheme where scheme = view (uriSchemeL' % schemeBSL') uri' @@ -262,55 +284,144 @@ downloadBS uri' dl https = do host <- preview (authorityL' % _Just % authorityHostL' % hostBSL') uri' - ?? UnsupportedURL + ?? UnsupportedScheme let port = preview (authorityL' % _Just % authorityPortL' % _Just % portNumberL') uri' - liftIO $ downloadBS' https host path port + liftE $ downloadBS' https host path port -- | Load the result of this download into memory at once. -downloadBS' :: Bool -- ^ https? +downloadBS' :: MonadIO m + => Bool -- ^ https? -> ByteString -- ^ host (e.g. "www.example.com") - -> ByteString -- ^ path (e.g. "/my/file") + -> ByteString -- ^ path (e.g. "/my/file") including query -> Maybe Int -- ^ optional port (e.g. 3000) - -> IO (L.ByteString) + -> Excepts + '[ HTTPStatusError + , URIParseError + , UnsupportedScheme + , NoLocationHeader + , TooManyRedirs + ] + m + (L.ByteString) downloadBS' https host path port = do - bref <- newIORef (mempty :: Builder) + bref <- liftIO $ newIORef (mempty :: Builder) let stepper bs = modifyIORef bref (<> byteString bs) - downloadInternal https host path port stepper - readIORef bref <&> toLazyByteString + downloadInternal False https host path port stepper + liftIO (readIORef bref <&> toLazyByteString) -downloadInternal :: Bool - -> ByteString - -> ByteString - -> Maybe Int - -> (ByteString -> IO a) -- ^ the consuming step function - -> IO () -downloadInternal https host path port consumer = do - c <- case https of - True -> do - ctx <- baselineContextSSL - openConnectionSSL ctx host (fromIntegral $ fromMaybe 443 port) - False -> openConnection host (fromIntegral $ fromMaybe 80 port) +downloadInternal :: MonadIO m + => Bool -- ^ whether to show a progress bar + -> Bool -- ^ https? + -> ByteString -- ^ host + -> ByteString -- ^ path with query + -> Maybe Int -- ^ optional port + -> (ByteString -> IO a) -- ^ the consuming step function + -> Excepts + '[ HTTPStatusError + , URIParseError + , UnsupportedScheme + , NoLocationHeader + , TooManyRedirs + ] + m + () +downloadInternal = go (5 :: Int) - let q = buildRequest1 $ http GET path + where + go redirs progressBar https host path port consumer = do + r <- liftIO $ bracket acquire release' action + veitherToExcepts r >>= \case + Just r' -> + if redirs > 0 then followRedirectURL r' else throwE TooManyRedirs + Nothing -> pure () + where + acquire = case https of + True -> do + ctx <- baselineContextSSL + openConnectionSSL ctx host (fromIntegral $ fromMaybe 443 port) + False -> openConnection host (fromIntegral $ fromMaybe 80 port) - sendRequest c q emptyBody + release' = closeConnection - receiveResponse - c - (\_ i' -> do - outStream <- Streams.makeOutputStream + action c = do + let q = buildRequest1 $ http GET path + + sendRequest c q emptyBody + + receiveResponse + c + (\r i' -> runE $ do + let scode = getStatusCode r + if + | scode >= 200 && scode < 300 -> downloadStream r i' >> pure Nothing + | scode >= 300 && scode < 400 -> case getHeader r [s|Location|] of + Just r' -> pure $ Just $ r' + Nothing -> throwE NoLocationHeader + | otherwise -> throwE $ HTTPStatusError scode + ) + + followRedirectURL bs = case parseURI strictURIParserOptions bs of + Right uri' -> do + (https', host', fullPath', port') <- liftE $ uriToQuadruple uri' + go (redirs - 1) progressBar https' host' fullPath' port' consumer + Left e -> throwE e + + downloadStream r i' = do + let size = case getHeader r [s|Content-Length|] of + Just x' -> case decimal $ E.decodeUtf8 x' of + Left _ -> 0 + Right (r', _) -> r' + Nothing -> 0 + + mpb <- if progressBar + then Just <$> (liftIO $ newProgressBar defStyle 10 (Progress 0 size ())) + else pure Nothing + + outStream <- liftIO $ Streams.makeOutputStream (\case - Just bs -> void $ consumer bs + Just bs -> do + forM_ mpb $ \pb -> incProgress pb (BS.length bs) + void $ consumer bs Nothing -> pure () ) - Streams.connect i' outStream - ) + liftIO $ Streams.connect i' outStream - closeConnection c + + +-- | Extracts from a URI type: (https?, host, path+query, port) +uriToQuadruple :: Monad m + => URI + -> Excepts + '[UnsupportedScheme] + m + (Bool, ByteString, ByteString, Maybe Int) +uriToQuadruple URI {..} = do + let scheme = view schemeBSL' uriScheme + + host <- + preview (_Just % authorityHostL' % hostBSL') uriAuthority + ?? UnsupportedScheme + + https <- if + | scheme == [s|https|] -> pure True + | scheme == [s|http|] -> pure False + | otherwise -> throwE UnsupportedScheme + + let + queryBS = + BS.intercalate [s|&|] + . fmap (\(x, y) -> encodeQuery x <> [s|=|] <> encodeQuery y) + $ (queryPairs uriQuery) + port = + preview (_Just % authorityPortL' % _Just % portNumberL') uriAuthority + fullpath = + if BS.null queryBS then uriPath else uriPath <> [s|?|] <> queryBS + pure (https, host, fullpath, port) + where encodeQuery = L.toStrict . B.toLazyByteString . urlEncodeQuery checkDigest :: (MonadIO m, MonadLogger m, MonadReader Settings m) @@ -326,4 +437,3 @@ checkDigest dli file = do let cDigest = E.decodeUtf8 . toHex . digest (digestByName "sha256") $ c eDigest = view dlHash dli when ((cDigest /= eDigest) && verify) $ throwE (DigestError cDigest eDigest) - diff --git a/lib/GHCup/Errors.hs b/lib/GHCup/Errors.hs index 75dfcb8..a479ed5 100644 --- a/lib/GHCup/Errors.hs +++ b/lib/GHCup/Errors.hs @@ -1,3 +1,8 @@ +{-# LANGUAGE ExistentialQuantification #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE DataKinds #-} + module GHCup.Errors where import GHCup.Types @@ -5,59 +10,115 @@ import GHCup.Types import Control.Exception.Safe import Data.ByteString ( ByteString ) import Data.Text ( Text ) +import Data.Versions +import Haskus.Utils.Variant import HPath + + ------------------------ + --[ Low-level errors ]-- + ------------------------ + + + -- | A compatible platform could not be found. -data PlatformResultError = NoCompatiblePlatform String -- the platform we got +data NoCompatiblePlatform = NoCompatiblePlatform String -- the platform we got deriving Show +-- | Unable to find a download for the requested versio/distro. data NoDownload = NoDownload deriving Show +-- | The Architecture is unknown and unsupported. data NoCompatibleArch = NoCompatibleArch String deriving Show +-- | Unable to figure out the distribution of the host. data DistroNotFound = DistroNotFound deriving Show -data ArchiveError = UnknownArchive ByteString +-- | The archive format is unknown. We don't know how to extract it. +data UnknownArchive = UnknownArchive ByteString deriving Show -data URLException = UnsupportedURL +-- | The scheme is not supported (such as ftp). +data UnsupportedScheme = UnsupportedScheme deriving Show -data FileError = CopyError String +-- | Unable to copy a file. +data CopyError = CopyError String deriving Show +-- | Unable to find a tag of a tool. data TagNotFound = TagNotFound Tag Tool deriving Show -data AlreadyInstalled = AlreadyInstalled ToolRequest +-- | The tool (such as GHC) is already installed with that version. +data AlreadyInstalled = AlreadyInstalled Tool Version deriving Show -data NotInstalled = NotInstalled ToolRequest - deriving Show - -data NotSet = NotSet Tool +-- | The tool is not installed. Some operations rely on a tool +-- to be installed (such as setting the current GHC version). +data NotInstalled = NotInstalled Tool Version deriving Show +-- | JSON decoding failed. data JSONError = JSONDecodeError String deriving Show +-- | A file that is supposed to exist does not exist +-- (e.g. when we use file scheme to "download" something). +data FileDoesNotExistError = FileDoesNotExistError ByteString + deriving Show + +-- | File digest verification failed. +data DigestError = DigestError Text Text + deriving Show + +-- | Unexpected HTTP status. +data HTTPStatusError = HTTPStatusError Int + deriving Show + +-- | The 'Location' header was expected during a 3xx redirect, but not found. +data NoLocationHeader = NoLocationHeader + deriving Show + +-- | Too many redirects. +data TooManyRedirs = TooManyRedirs + deriving Show + + + + ------------------------- + --[ High-level errors ]-- + ------------------------- + +-- | A download failed. The underlying error is encapsulated. +data DownloadFailed = forall es . Show (V es) => DownloadFailed (V es) + +deriving instance Show DownloadFailed + + +-- | A build failed. +data BuildFailed = forall es . Show (V es) => BuildFailed (Path Abs) (V es) + +deriving instance Show BuildFailed + + +-- | Setting the current GHC version failed. +data GHCupSetError = forall es . Show (V es) => GHCupSetError (V es) + +deriving instance Show GHCupSetError + + + --------------------------------------------- + --[ True Exceptions (e.g. for MonadThrow) ]-- + --------------------------------------------- + + +-- | Parsing failed. data ParseError = ParseError String deriving Show instance Exception ParseError - -data FileDoesNotExistError = FileDoesNotExistError ByteString - deriving Show - -data GHCNotFound = GHCNotFound - deriving Show - -data BuildConfigNotFound = BuildConfigNotFound (Path Abs) - deriving Show - -data DigestError = DigestError Text Text - deriving Show diff --git a/lib/GHCup/Platform.hs b/lib/GHCup/Platform.hs index 6e14dea..f0ce7a5 100644 --- a/lib/GHCup/Platform.hs +++ b/lib/GHCup/Platform.hs @@ -54,7 +54,7 @@ getArchitecture = case arch of getPlatform :: (MonadLogger m, MonadCatch m, MonadIO m) => Excepts - '[PlatformResultError , DistroNotFound] + '[NoCompatiblePlatform , DistroNotFound] m PlatformResult getPlatform = do diff --git a/lib/GHCup/Types.hs b/lib/GHCup/Types.hs index 1fce98d..330eee5 100644 --- a/lib/GHCup/Types.hs +++ b/lib/GHCup/Types.hs @@ -43,8 +43,9 @@ data Tag = Latest deriving (Ord, Eq, Show) data VersionInfo = VersionInfo - { _viTags :: [Tag] - , _viArch :: ArchitectureSpec + { _viTags :: [Tag] -- ^ version specific tag + , _viSourceDL :: Maybe DownloadInfo -- ^ source tarball + , _viArch :: ArchitectureSpec -- ^ descend for binary downloads per arch } deriving (Eq, Show) @@ -56,17 +57,10 @@ data DownloadInfo = DownloadInfo deriving (Eq, Show) data Tool = GHC - | GHCSrc | Cabal | GHCup deriving (Eq, GHC.Generic, Ord, Show) -data ToolRequest = ToolRequest - { _trTool :: Tool - , _trVersion :: Version - } - deriving (Eq, Show) - data Architecture = A_64 | A_32 deriving (Eq, GHC.Generic, Ord, Show) @@ -111,17 +105,9 @@ type PlatformVersionSpec = Map (Maybe Versioning) DownloadInfo type PlatformSpec = Map Platform PlatformVersionSpec type ArchitectureSpec = Map Architecture PlatformSpec type ToolVersionSpec = Map Version VersionInfo -type BinaryDownloads = Map Tool ToolVersionSpec - -type SourceDownloads = Map Version DownloadInfo - -data GHCupDownloads = GHCupDownloads { - _binaryDownloads :: BinaryDownloads - , _sourceDownloads :: SourceDownloads -} deriving Show +type GHCupDownloads = Map Tool ToolVersionSpec data URLSource = GHCupURL | OwnSource URI | OwnSpec GHCupDownloads deriving Show - diff --git a/lib/GHCup/Types/JSON.hs b/lib/GHCup/Types/JSON.hs index 8a901f8..a876cfa 100644 --- a/lib/GHCup/Types/JSON.hs +++ b/lib/GHCup/Types/JSON.hs @@ -40,7 +40,6 @@ deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''VUnit deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''VersionInfo deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''Tag deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''DownloadInfo -deriveJSON defaultOptions { fieldLabelModifier = removeLensFieldLabel } ''GHCupDownloads instance ToJSON URI where diff --git a/lib/GHCup/Types/Optics.hs b/lib/GHCup/Types/Optics.hs index c732475..5d02918 100644 --- a/lib/GHCup/Types/Optics.hs +++ b/lib/GHCup/Types/Optics.hs @@ -15,11 +15,9 @@ makePrisms ''Platform makePrisms ''Tag makeLenses ''PlatformResult -makeLenses ''ToolRequest makeLenses ''DownloadInfo makeLenses ''Tag makeLenses ''VersionInfo -makeLenses ''GHCupDownloads uriSchemeL' :: Lens' (URIRef Absolute) Scheme @@ -45,3 +43,6 @@ hostBSL' = lensVL hostBSL pathL' :: Lens' (URIRef a) ByteString pathL' = lensVL pathL + +queryL' :: Lens' (URIRef a) Query +queryL' = lensVL queryL diff --git a/lib/GHCup/Utils.hs b/lib/GHCup/Utils.hs index a29f60b..1978067 100644 --- a/lib/GHCup/Utils.hs +++ b/lib/GHCup/Utils.hs @@ -43,6 +43,7 @@ import Prelude hiding ( abs , writeFile ) import Safe +import System.IO.Error import System.Posix.FilePath ( takeFileName ) import System.Posix.Files.ByteString ( readSymbolicLink ) import URI.ByteString @@ -83,6 +84,51 @@ ghcLinkVersion = either (throwM . ParseError) pure . parseOnly parser Right r -> pure r +-- e.g. ghc-8.6.5 +rmMinorSymlinks :: (MonadIO m, MonadLogger m) => Version -> m () +rmMinorSymlinks ver = do + bindir <- liftIO $ ghcupBinDir + files <- liftIO $ getDirsFiles' bindir + let myfiles = + filter (\x -> ([s|-|] <> verToBS ver) `B.isSuffixOf` toFilePath x) files + forM_ myfiles $ \f -> do + let fullF = (bindir f) + $(logDebug) [i|rm -f #{toFilePath fullF}|] + liftIO $ hideError doesNotExistErrorType $ deleteFile fullF + +-- E.g. ghc, if this version is the set one. +-- This reads `ghcupGHCDir`. +rmPlain :: (MonadLogger m, MonadThrow m, MonadFail m, MonadIO m) + => Version + -> Excepts '[NotInstalled] m () +rmPlain ver = do + files <- liftE $ ghcToolFiles ver + bindir <- liftIO $ ghcupBinDir + forM_ files $ \f -> do + let fullF = (bindir f) + lift $ $(logDebug) [i|rm -f #{toFilePath fullF}|] + liftIO $ hideError doesNotExistErrorType $ deleteFile fullF + -- old ghcup + let hdc_file = (bindir [rel|haddock-ghc|]) + lift $ $(logDebug) [i|rm -f #{toFilePath hdc_file}|] + liftIO $ hideError doesNotExistErrorType $ deleteFile hdc_file + +-- e.g. ghc-8.6 +rmMajorSymlinks :: (MonadLogger m, MonadIO m) => Version -> m () +rmMajorSymlinks ver = do + (mj, mi) <- liftIO $ getGHCMajor ver + let v' = E.encodeUtf8 $ intToText mj <> [s|.|] <> intToText mi + + bindir <- liftIO ghcupBinDir + + files <- liftIO $ getDirsFiles' bindir + let myfiles = filter (\x -> ([s|-|] <> v') `B.isSuffixOf` toFilePath x) files + forM_ myfiles $ \f -> do + let fullF = (bindir f) + $(logDebug) [i|rm -f #{toFilePath fullF}|] + liftIO $ hideError doesNotExistErrorType $ deleteFile fullF + + ----------------------------------- @@ -90,12 +136,25 @@ ghcLinkVersion = either (throwM . ParseError) pure . parseOnly parser ----------------------------------- +toolAlreadyInstalled :: Tool -> Version -> IO Bool +toolAlreadyInstalled tool ver = case tool of + GHC -> ghcInstalled ver + Cabal -> cabalInstalled ver + GHCup -> pure True + + ghcInstalled :: Version -> IO Bool ghcInstalled ver = do ghcdir <- ghcupGHCDir ver doesDirectoryExist ghcdir +ghcSrcInstalled :: Version -> IO Bool +ghcSrcInstalled ver = do + ghcdir <- ghcupGHCDir ver + doesFileExist (ghcdir ghcUpSrcBuiltFile) + + ghcSet :: (MonadIO m, MonadThrow m) => m (Maybe Version) ghcSet = do ghcBin <- ( ([rel|ghc|] :: Path Rel)) <$> liftIO ghcupBinDir @@ -108,10 +167,8 @@ ghcSet = do cabalInstalled :: Version -> IO Bool cabalInstalled ver = do - cabalbin <- ( ([rel|cabal|] :: Path Rel)) <$> ghcupBinDir - mc <- executeOut cabalbin [[s|--numeric-version|]] Nothing - let reportedVer = fst . B.spanEnd (== _lf) . _stdOut $ mc - pure (reportedVer == (verToBS ver)) + reportedVer <- cabalSet + pure (reportedVer == ver) cabalSet :: (MonadIO m, MonadThrow m) => m Version cabalSet = do @@ -169,7 +226,7 @@ getGHCForMajor major' minor' = do unpackToDir :: (MonadLogger m, MonadIO m, MonadThrow m) => Path Abs -- ^ destination dir -> Path Abs -- ^ archive path - -> Excepts '[ArchiveError] m () + -> Excepts '[UnknownArchive] m () unpackToDir dest av = do let fp = E.decodeUtf8 (toFilePath av) lift $ $(logInfo) [i|Unpacking: #{fp}|] @@ -198,7 +255,7 @@ unpackToDir dest av = do -- | Get the tool versions that have this tag. -getTagged :: BinaryDownloads -> Tool -> Tag -> [Version] +getTagged :: GHCupDownloads -> Tool -> Tag -> [Version] getTagged av tool tag = toListOf ( ix tool % to (Map.filter (\VersionInfo {..} -> elem tag _viTags)) @@ -207,10 +264,10 @@ getTagged av tool tag = toListOf ) av -getLatest :: BinaryDownloads -> Tool -> Maybe Version +getLatest :: GHCupDownloads -> Tool -> Maybe Version getLatest av tool = headOf folded $ getTagged av tool Latest -getRecommended :: BinaryDownloads -> Tool -> Maybe Version +getRecommended :: GHCupDownloads -> Tool -> Maybe Version getRecommended av tool = headOf folded $ getTagged av tool Recommended @@ -241,24 +298,33 @@ urlBaseName = parseRel . snd . B.breakEnd (== _slash) . urlDecode False -- Get tool files from ~/.ghcup/bin/ghc//bin/* -- while ignoring *- symlinks. +-- +-- Returns unversioned relative files, e.g.: +-- ["hsc2hs","haddock","hpc","runhaskell","ghc","ghc-pkg","ghci","runghc","hp2ps"] ghcToolFiles :: (MonadThrow m, MonadFail m, MonadIO m) => Version -> Excepts '[NotInstalled] m [Path Rel] ghcToolFiles ver = do ghcdir <- liftIO $ ghcupGHCDir ver + let bindir = ghcdir [rel|bin|] -- fail if ghc is not installed whenM (fmap not $ liftIO $ doesDirectoryExist ghcdir) - (throwE (NotInstalled $ ToolRequest GHC ver)) + (throwE (NotInstalled GHC ver)) - files <- liftIO $ getDirsFiles' (ghcdir ([rel|bin|] :: Path Rel)) + files <- liftIO $ getDirsFiles' bindir -- figure out the suffix, because this might not be `Version` for -- alpha/rc releases, but x.y.a.somedate. (Just symver) <- (B.stripPrefix [s|ghc-|] . takeFileName) - <$> (liftIO $ readSymbolicLink $ toFilePath - (ghcdir ([rel|bin/ghc|] :: Path Rel)) - ) + <$> (liftIO $ readSymbolicLink $ toFilePath (bindir [rel|ghc|])) when (B.null symver) (throwIO $ userError $ "Fatal: ghc symlink target is broken") + pure $ filter (\x -> not $ symver `B.isSuffixOf` toFilePath x) files + + +-- | This file, when residing in ~/.ghcup/ghc// signals that +-- this GHC was built from source. It contains the build config. +ghcUpSrcBuiltFile :: Path Rel +ghcUpSrcBuiltFile = [rel|.ghcup_src_built|] diff --git a/lib/GHCup/Utils/Dirs.hs b/lib/GHCup/Utils/Dirs.hs index c8ddb45..c1cf712 100644 --- a/lib/GHCup/Utils/Dirs.hs +++ b/lib/GHCup/Utils/Dirs.hs @@ -76,7 +76,6 @@ withGHCupTmpDir :: (MonadResource m, MonadThrow m, MonadIO m) => m (Path Abs) withGHCupTmpDir = snd <$> allocate mkGhcupTmpDir deleteDirRecursive - -------------- --[ Others ]-- -------------- diff --git a/lib/GHCup/Utils/File.hs b/lib/GHCup/Utils/File.hs index 933acc8..37b9211 100644 --- a/lib/GHCup/Utils/File.hs +++ b/lib/GHCup/Utils/File.hs @@ -134,7 +134,7 @@ execLogged exe spath args lfile chdir env = do SPPB.getProcessStatus True True pid >>= \case - i@(Just (SPPB.Exited es)) -> pure $ toProcessError exe args i + i@(Just (SPPB.Exited _)) -> pure $ toProcessError exe args i i -> pure $ toProcessError exe args i diff --git a/lib/GHCup/Utils/Logger.hs b/lib/GHCup/Utils/Logger.hs index 49af2a4..a586b3a 100644 --- a/lib/GHCup/Utils/Logger.hs +++ b/lib/GHCup/Utils/Logger.hs @@ -4,6 +4,7 @@ module GHCup.Utils.Logger where import GHCup.Utils +import Control.Monad import Control.Monad.Logger import HPath import HPath.IO @@ -28,15 +29,15 @@ myLoggerT LoggerConfig {..} loggingt = runLoggingT loggingt mylogger mylogger _ _ level str' = do -- color output let l = case level of - LevelDebug -> if lcPrintDebug - then toLogStr (style Bold $ color Blue "[ Debug ]") - else mempty + LevelDebug -> toLogStr (style Bold $ color Blue "[ Debug ]") LevelInfo -> toLogStr (style Bold $ color Green "[ Info ]") LevelWarn -> toLogStr (style Bold $ color Yellow "[ Warn ]") LevelError -> toLogStr (style Bold $ color Red "[ Error ]") LevelOther t -> toLogStr "[ " <> toLogStr t <> toLogStr " ]" let out = fromLogStr (l <> toLogStr " " <> str' <> toLogStr "\n") - colorOutter out + + when (lcPrintDebug || (lcPrintDebug == False && not (level == LevelDebug))) + $ colorOutter out -- raw output let lr = case level of diff --git a/lib/GHCup/Utils/Prelude.hs b/lib/GHCup/Utils/Prelude.hs index d5dea54..ef74a7e 100644 --- a/lib/GHCup/Utils/Prelude.hs +++ b/lib/GHCup/Utils/Prelude.hs @@ -1,11 +1,12 @@ -{-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE TypeOperators #-} -{-# LANGUAGE DeriveLift #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveLift #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} module GHCup.Utils.Prelude where @@ -23,6 +24,7 @@ import Data.Versions import Haskus.Utils.Types.List import Haskus.Utils.Variant.Excepts import System.IO.Error +import System.Posix.Env.ByteString ( getEnvironment ) import qualified Data.ByteString.Lazy as L import qualified Data.Strict.Maybe as S @@ -136,17 +138,17 @@ fromEither :: Either a b -> VEither '[a] b fromEither = either (VLeft . V) VRight -liftException :: ( MonadCatch m - , MonadIO m - , Monad m - , e :< es' - , LiftVariant es es' - ) - => IOErrorType - -> e - -> Excepts es m a - -> Excepts es' m a -liftException errType ex = +liftIOException' :: ( MonadCatch m + , MonadIO m + , Monad m + , e :< es' + , LiftVariant es es' + ) + => IOErrorType + -> e + -> Excepts es m a + -> Excepts es' m a +liftIOException' errType ex = handleIO (\e -> if errType == ioeGetErrorType e then throwE ex else liftIO $ ioError e @@ -154,6 +156,19 @@ liftException errType ex = . liftE +liftIOException :: (MonadCatch m, MonadIO m, Monad m, e :< es') + => IOErrorType + -> e + -> m a + -> Excepts es' m a +liftIOException errType ex = + handleIO + (\e -> + if errType == ioeGetErrorType e then throwE ex else liftIO $ ioError e + ) + . lift + + hideErrorDef :: IOErrorType -> a -> IO a -> IO a hideErrorDef err def = handleIO (\e -> if err == ioeGetErrorType e then pure def else ioError e) @@ -174,6 +189,7 @@ hideExcept :: forall e es es' a m hideExcept _ a action = catchLiftLeft ((\_ -> pure a) :: (e -> Excepts es' m a)) action + hideExcept' :: forall e es es' m . (Monad m, e :< es, LiftVariant (Remove e es) es') => e @@ -183,6 +199,23 @@ hideExcept' _ action = catchLiftLeft ((\_ -> pure ()) :: (e -> Excepts es' m ())) action +reThrowAll :: forall e es es' a m + . (Monad m, e :< es') + => (V es -> e) + -> Excepts es m a + -> Excepts es' m a +reThrowAll f = catchAllE (throwE . f) + + +reThrowAllIO :: forall e es es' a m + . (MonadCatch m, Monad m, MonadIO m, e :< es') + => (V es -> e) + -> (IOException -> e) + -> Excepts es m a + -> Excepts es' m a +reThrowAllIO f g = handleIO (throwE . g) . catchAllE (throwE . f) + + throwEither :: (Exception a, MonadThrow m) => Either a b -> m b throwEither a = case a of Left e -> throwM e @@ -200,3 +233,11 @@ intToText = TL.toStrict . B.toLazyText . B.decimal removeLensFieldLabel :: String -> String removeLensFieldLabel str' = maybe str' T.unpack . T.stripPrefix (T.pack "_") . T.pack $ str' + + +addToCurrentEnv :: MonadIO m + => [(ByteString, ByteString)] + -> m [(ByteString, ByteString)] +addToCurrentEnv adds = do + cEnv <- liftIO $ getEnvironment + pure (adds ++ cEnv)