Blog
Updates, release notes, and engineering write-ups from across the arcanist.sh ecosystem — the hx toolchain and the BHC compiler.
RSS-
The Crash Ladder: a Day Inside readMarkdown
BHC-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.
Read on BHC → -
BHC Type-Checks All of Pandoc
bhc check now passes every one of Pandoc's 221 library modules — zero failed, zero skipped, Template Haskell included. Two days ago the number was 153. This is the story of the endgame: the 84-error module that was one missing feature, the bugs that hide by deleting themselves, and what a permissive type checker is actually for.
Read on BHC → -
Reading Pandoc for Compiler Bugs
bhc check now clears 153 of Pandoc's 221 library modules, up from 112 in late July. A large real-world library is a bug oracle: point the type checker at it, and it finds the holes in your front end faster than any hand-written test suite. Nine of the recent fixes, and the two techniques that found them.
Read on BHC → -
BHC runs on WebAssembly — and we can prove how much
BHC compiles Haskell to WebAssembly (WASI), and the WASM output matches the native binary on 236 of 243 differential-test fixtures — file I/O included. Here is the measurement, and the exceptions, stated plainly.
Read on BHC → -
hx 0.9.0: Build, Run, Test — on BHC, Dependencies and All
The BHC backend grows from compiling a single module to building a project and its dependencies from source into a package database — and running and testing the result. 0.9.0 makes build, run, and test work the same way on BHC, and fixes the plumbing underneath.
Read on hx → -
The Honest Hard Part: Type Classes and Hashable Code
Content-addressing a language means naming a definition by what it means, not by how it was typed. For a language with type classes, that requires elaborating instance resolution away first. Dictionary passing is that step — and BHC already does it.
Read on BHC → -
Verified Against Reality
hx 0.7.11 and 0.7.12 came out of pointing nightly CI at real Haskell projects and a real BHC toolchain. Correct by construction is the design; this is what it takes to keep it true.
Read on hx → -
hx 0.8.0: The Projects You Already Have
0.8.0 is a milestone of correctness. Across the 0.7 series, hx learned to adopt, lock, and build real Haskell projects of every shape — single packages, multi-package workspaces, conditional dependencies, custom Setup.hs — and to be honest when it cannot.
Read on hx → -
Building the Commons
The engineering underneath a content-addressed commons of verified Haskell: how a definition gets an address, why that address is its meaning under a contract, how type classes stay hashable, and why a vouch is worth nothing without a sandbox that can re-check it.
Read on arcanist.sh → -
Speaking BHC Natively
hx 0.7.0 drives BHC through its own command-line interface instead of approximating it with GHC flags — native build flags, a filesystem package database, and a pinned toolchain.
Read on hx → -
Introducing arcanist.sh
arcanist.sh is the home of hx and BHC — a unified, fast, modern Haskell ecosystem, built for a world where AI writes the code. Here is what it is and why it exists.
Read on arcanist.sh → -
hx at Zurihac 2026
hx will be at Zurihac 2026, 6–8 June in Rapperswil. What we'll demo, what install path to bring, and the questions most worth raising at the booth.
Read on hx → -
BHC at Zurihac 2026
We'll be at Zurihac 2026. Here is what compiles today, what we'll have running at the booth, and the questions that are most useful to bring.
Read on BHC → -
Four Parser Fixes, One Module
A week of chasing parser correctness bugs in BHC. Net effect on the Pandoc number: one module. Why each fix was still worth landing — and what the data says about where the real work is.
Read on BHC → -
BHC and the Verification Camp
agentlanguages.dev makes the emerging field of AI-authored programming languages visible. BHC belongs near the verification camp, but it makes a different bet from agent-native languages like Vera.
Read on BHC → -
All Ten Zentinel Modules Compile
BHC's multi-module pipeline now compiles all ten modules of zentinel-agent-policy to object code in one driver invocation. Cycles, qualified-name shadowing, and a missing IORef primitive — what changed between four out of ten and ten out of ten.
Read on BHC → -
BHC Runs a Real Haskell Library
We compiled zentinel-agent-policy — 10 modules, 1,500 lines, records and sum types across module boundaries — to a native binary that produces correct results at runtime. Here's the full story.
Read on BHC → -
BHC Parses All of Pandoc
We pointed BHC at Pandoc's 221 source files and got zero parse errors. Here's what we found, what broke, and what it means for the road to compiling real-world Haskell.
Read on BHC → -
Standing on the Shoulders of HBC
An email from Anthony Travers introduced us to HCT, his Haskell 98 translation of Lennart Augustsson's 1982 compiler. It gave BHC exactly the optimization roadmap we needed.
Read on BHC → -
One Developer, One Claude, One Month: Building a Haskell Compiler from Scratch
Anthropic built a C compiler with sixteen parallel Claude instances. I built a Haskell compiler with one Claude and a Max subscription. We arrived at the same conclusions about the future of software development.
Read on BHC → -
Zero-Config BHC Experience
hx 0.6.0 makes going from zero to a running BHC project effortless — auto-detected backends, bundled toolchain installs, and smarter doctor checks
Read on hx → -
Phase 2: Language Completeness is Complete
BHC now compiles real Haskell programs with pattern matching, closures, higher-order functions, recursion, type classes, and lazy evaluation. Here's what Phase 2 delivers.
Read on BHC → -
Using the BHC Compiler Backend
Learn how to use the Basel Haskell Compiler (BHC) with hx for optimized numeric and tensor workloads
Read on hx → -
Phase 1: Native Code Generation is Complete
BHC can now parse Haskell, type check, lower to Core IR, generate LLVM IR, link with the RTS, and produce working native executables. Here's what we've achieved.
Read on BHC →