haskell-toolchain-miselisted
Install: claude install-skill ivelten/claude-haskell-skills
# Haskell Toolchain with mise + GHCup
The native alternative to the devcontainer: the toolchain runs directly on the host, with no Docker, no VM and no bind-mount I/O penalty. `mise` owns the pinnable binaries and puts them on `PATH` per project; `ghcup` owns GHC and HLS, which mise cannot install.
## Detection — check before asking
```bash
ls mise.toml .mise.toml 2>/dev/null # project pin present?
mise ls 2>/dev/null | grep -E '^(ghcup|cabal|ormolu)'
ghcup list -c installed -t ghc 2>/dev/null
```
If `mise.toml` pins `ghcup`/`cabal` → the native path is already set up. Acknowledge it and proceed.
## Division of labor
| Tool | Provisioned by | Why |
|---|---|---|
| `ghcup` | mise (`aqua:haskell/ghcup-hs`) | pinnable per project, bootstraps the rest |
| `cabal` | mise (`aqua:haskell/cabal/cabal-install`) | exact versions available, switches per project |
| `ormolu` | mise (`github:tweag/ormolu`) | ships an `aarch64-darwin` binary |
| **GHC** | **ghcup** | not installable via mise: the `ghc` registry entry is `conda:ghc` (needs conda) and the `mise-ghcup` asdf plugin was archived in Nov 2025. `mise ls-remote ghc` returns nothing |
| **HLS** | **ghcup** | bindists are compiled against specific GHC *patch* versions; ghcup is the only thing that matches them correctly |
| `hlint` | Homebrew or cabal | **not** via mise — see the Apple Silicon note below |
| `cabal-gild`, `hoogle`, `fast-tags`, `doctest`, DAP adapters | `cabal install` | not in the mise registry; the