Haskell tooling for the age of AI-authored code.
hx is a fast package manager written in Rust. BHC is a compiler built to check everything it can. When generating code is cheap, correctness has to be checkable.
curl -fsSL https://arcanist.sh/hx/install.sh | shTools
The Haskell package manager
A fast Haskell package and project manager written in Rust. Build, test, run, format, lint, and publish from one tool, with managed GHC and BHC toolchains.
The Basel Haskell Compiler
A clean-slate, compatibility-first Haskell compiler written in Rust, with runtime profiles and native and WebAssembly backends. It compiles all 221 modules of Pandoc to a binary that runs.
Why we are doing this
The model does not need to be right. It needs to be checkable.
Haskell has been called niche for thirty years. That framing assumes a world where humans write all the code. In a world where AI writes most of it, the language that wins is the one where correctness is checkable. Haskell is not niche in that framing. It is early.
Read the full thesis →Writing
All writing →- BHC The Writer Runs End to EndPandoc's HTML writer executes a three-deep monad transformer stack — StateT over ExceptT over StateT — and BHC now runs the whole thing to completion. Getting there meant chasing one crash that kept moving one monadic action deeper into the writer's do-block, through the transformer machinery, the monomorphizer, and a string comparison that read a struct as a linked list.
- arcanist.sh The Scorecard Is Right. The Weights Are Wrong.A programming language scorecard is making the rounds: five columns, ten languages, no 5/5. Haskell is not on it. Here is where it would land, why arcanist.sh exists, where hx and BHC actually stand against each column, and why the columns weigh differently once AI writes the code.
- arcanist.sh Compiling PandocBHC now compiles all 221 modules of Pandoc to native code and links a binary that runs. Why we picked Pandoc as the north star, what compiling it actually demands of a compiler, and where this sits on the road to a complete Haskell toolchain.
- BHC The Crash Ladder: a Day Inside readMarkdownBHC-compiled Pandoc stopped failing at compile time and started failing at runtime — which is progress. Six distinct crashes, each one deeper into the real Markdown parser than the last, starting from a single missing dictionary that shifted every argument one slot.
Questions, answered
Why Haskell in 2026?
Haskell has been called niche for thirty years, but that framing assumes humans write all the code. When AI writes most of it, the language that wins is the one where correctness is checkable — where types are proofs and the compiler is the proof checker. Haskell is not niche in that framing. It is early.
Why build a Haskell toolchain in Rust?
A toolchain should not share its dependencies with the thing it manages. Haskell's tooling problems are partly caused by tooling written in Haskell, which creates bootstrap problems and long compile times. A Rust binary starts in milliseconds, ships as a single static executable, and cross-compiles trivially. We write the tooling in Rust, but we think in Haskell.
What is BHC, and how is it different from GHC?
BHC, the Basel Haskell Compiler, is a clean-slate compiler for Haskell. It compiles the same language with the same type safety, but adds runtime profiles — default, server, numeric and edge, with realtime and embedded planned — each with a different performance contract. It is compatibility-first, aiming to match GHC's semantics, and already compiles all 221 modules of Pandoc to a running binary.
Is this just speculation about AI?
No. The thesis is grounded in shipped tooling. hx delivers 5.6x faster cold builds and deterministic lockfiles today, and both hx and BHC were themselves built with AI coding agents. The thesis tested itself during its own construction.
What if you are wrong, and Haskell never revives?
We have a conviction, not a crystal ball. Even if the broader bet does not land, the work stands on its own: fast Rust-based tooling, deterministic builds, runtime profiles, and structured, machine-readable errors are valuable for any Haskell project today.
If AI writes the code, what do humans do?
We define constraints. We shape intent. We evaluate outcomes. The unit of work becomes the obligation, not the function — closer to architecture than to authorship. The compiler still has to verify the result, and Haskell makes that verification load-bearing.
Is arcanist.sh open source?
Yes. hx is MIT-licensed and BHC is BSD-3-Clause, and both are developed in public on GitHub, with open issues, roadmaps, and design decisions.
How do I get started?
Install hx, pick your compiler, and build. hx manages the toolchain, resolves dependencies, and drives builds, while BHC is available as a compiler backend. See the documentation to set up your first project.