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.

Hottest takes

"The author of Xeus-Haskell is here. Ask me anything." — tanimasa
"Jupyter+conda/anaconda is almost always not installable and broken for most of its kernels" — bmacho
"What is the performance difference between interpreted MicroHS and warm compiled Haskell" — sidkshatriya
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.