# ghcup A rewrite of ghcup in haskell. This can be used as a library and may be redistributed as a binary in the future. ## Motivation ghcup has increasingly become difficult to maintain. A few reasons: * few maintainers * increasing LOC * platform incompatibilities regularly causing breaking bugs: * [Mktemp not working properly on macOS](https://gitlab.haskell.org/haskell/ghcup/issues/130) * [ln: illegal option -- T on macOS Catalina](https://gitlab.haskell.org/haskell/ghcup/issues/123) * [Wrong tar flag on darwin](https://gitlab.haskell.org/haskell/ghcup/issues/119)) * refactoring being difficult due to POSIX sh More benefits of a rewrite: * Features such as installing [release candidates](https://gitlab.haskell.org/haskell/ghcup/issues/94) or [HEAD builds](https://gitlab.haskell.org/haskell/ghcup/issues/65) can be more conveniently implemented in a rewrite * Refactoring will be easier * Better tool support (such as linting the downloads file) * saner downloads file format (such as JSON) However, the downside will be: * building static binaries for all platforms (and possibly causing SSL/DNS problems) * still bootstrapping those binaries via a POSIX sh script ## Goals * Correct low-level code * Good exception handling * Easier user interface (possibly interactive and non-interactive ones)