← ClaudeAtlas

haskell-quality-gateslisted

Configure Haskell formatting, linting, performance defaults, pre-commit hooks, and CI checks. Covers ormolu, hlint, cabal-gild, the .pre-commit-config.yaml template, CI workflow steps, strict-by-default field policy, Text/ByteString/Vector/Map preferences, profiling flags, and the "before declaring work done" checklist. Use when wiring up linting/formatting automation, setting up CI for a Haskell project, debugging space leaks, or running the final pre-commit checks.
ivelten/claude-haskell-skills · ★ 0 · Code & Development · score 60
Install: claude install-skill ivelten/claude-haskell-skills
# Haskell Quality Gates This skill covers the automation that keeps a Haskell project tidy: formatter, linter, performance defaults that prevent common pitfalls, and the pre-commit / CI / done-checklist that hold the line. ## Formatter and linter - **`ormolu`** — zero-config, opinionated. No style debates. Always run with `--mode inplace` before commits, or `--mode check` in CI. - **`hlint`** — apply its suggestions by default unless they conflict with `effectful` patterns or clarity. - **`cabal-gild`** — formats `.cabal` files. Keeps build configs readable and consistently structured. Prefer over `cabal-fmt`. The conventions are not negotiable: disagreement is settled by the tool, not by review. **Where these binaries come from.** All three must be on `PATH` before any hook or CI step can call them — the pre-commit hooks below use `language: system`, which means "already installed". On the native path `ormolu` is pinned in `mise.toml` while `hlint` comes from Homebrew and `cabal-gild` from `cabal install` (see `haskell-toolchain-mise`); the devcontainer image ships `ormolu` and `cabal-gild` but **not** `hlint` or `pre-commit`, so install those inside the container on first use. Keep the `ormolu` CLI in the series HLS bundles, or editor formatting and the CLI will disagree. ## Performance defaults These are the type-and-strictness choices that prevent the most common Haskell performance pitfalls. Apply them by default; deviate only with a reason. - **`Text`, never `St