haskell-project-setuplisted
Install: claude install-skill ivelten/claude-haskell-skills
# Haskell Project Setup
This skill encodes the build, layout, and language-extension defaults for a Haskell project.
## Development environment (first step)
Before anything else, the project needs a toolchain. The choice is made in the `haskell` router skill, which weighs the two options:
- **Native on the host** — `mise` pins ghcup/cabal/ormolu, ghcup provides GHC and HLS. See `haskell-toolchain-mise`.
- **Pre-built devcontainer** (`ivelten/haskell-devcontainer`) — see `haskell-devcontainer`.
This skill is agnostic to that choice: everything below applies once a toolchain is on `PATH`.
## The Stack (non-negotiable defaults)
Unless the user explicitly asks for something different, use:
- **Build tool**: `cabal` (with GHCup-provisioned GHC). Never `stack`, never Nix shells, unless requested.
- **GHC version**: 9.10.3 (pinned in `mise.toml`/`.tool-versions` and `cabal.project`). It is the only 9.10.x with an HLS 2.14 bindist — moving to 9.10.1 or 9.10.2 would break the language server.
- **Effects**: [`effectful`](https://hackage.haskell.org/package/effectful) — see `haskell-effectful` skill.
- **Testing**: `hspec` + `QuickCheck` + `hspec-discover` — see `haskell-testing`.
- **Logging**: `log-effectful` — see `haskell-logging`.
- **Formatter**: `ormolu` (zero-config, opinionated — no style debates) — see `haskell-quality-gates`.
- **Linter**: `hlint` — apply its suggestions by default unless they conflict with effectful/clarity.
- **Language server**: HLS, installed via