November 28, 2025
Kernel Wars: Choose Your Fighter
Comparing xeus-Haskell and ihaskell kernels
Haskell in Jupyter gets spicy: dev AMA, install chaos, speed vs purity
TLDR: Two ways to run Haskell in Jupyter—IHaskell vs xeus‑haskell—sparked a lively debate. Comments fixated on painful installs, whether MicroHS is fast enough, and the dev’s AMA; readers care because it affects teaching and data work, and whether notebooks are practical instead of headache magnets.
Two rival ways to run Haskell in Jupyter lit up the comments: old‑school IHaskell (do everything yourself) versus xeus‑haskell (plug into a shared engine). The vibe? Pure kernel drama. The xeus‑haskell author jumped in with “AMA” energy. Purists cheered IHaskell’s “all in Haskell” pride; pragmatists clapped for “reuse the machinery” and fewer moving parts. Battle‑scarred users recounted install horror stories, with one commenter admitting they hacked a websocket workaround to make multiline definitions behave. Jokes flew: “ZeroMQ? More like zero patience,” and “Haskell in a notebook is like teaching a cat to swim.”
The article breaks it down in simple terms: Jupyter is the stage, the kernel is the backstage actor that reads your code and sends the results over five message lanes. That set the scene for the real fight: speed and compatibility. One side demands benchmarks, asking if the MicroHS interpreter can rival “warm” compiled Haskell; the other just wants installations that don’t explode. Teachers crave easy demos; data scientists want fast runs and libraries that behave. IHaskell feels heavier but loyal to Haskell; xeus‑haskell feels lighter and deployable. With the dev answering live, the crowd kept chanting: fewer installs, more wow. Benchmarks, please, and fewer yak shaves.
Key Points
- •IHaskell and xeus-haskell are two distinct Haskell kernels for Jupyter with different internal architectures.
- •IHaskell implements the Jupyter protocol directly in Haskell and drives GHC; xeus-haskell uses the Xeus C++ framework and MicroHs.
- •Jupyter’s kernel model relies on a protocol over ZeroMQ with five channels: Shell, IOPub, Stdin, Control, and Heartbeat.
- •Jupyter discovers and starts kernels via a kernelspec (kernel.json) and an ephemeral connection file specifying ports, transport, and security.
- •Security in kernel communications uses a key and signature_scheme (HMAC-SHA256) to sign messages and prevent spoofing.