Overview For developers integrating Haskell into data science workflows or interactive documentation, the Jupyter notebook is the standard interface. Currently, there are two primary ways to run Haskell in Jupyter: IHaskell and xeus-haskell. While both achieve the same end user experience (executing Haskell code in cells) their internal architectures represent fundamentally different engineering trade-offs: IHaskell: “Do everything in Haskell.” It is a monolithic kernel that speaks the Jupyter protocol itself and drives GHC directly. xeus-haskell: “Reuse the protocol machinery.” It delegates all protocol handling to a shared C++ framework (Xeus) and focuses only on connecting that framework to a Haskell interpreter (MicroHs). This article explores those architectures side-by-side, with a focus on: How they plug into the Jupyter kernel model. What their design implies for performance, deployment, and library compatibility. Which one is likely the better fit for different use cases (data science, teaching, documentation, client-side execution, etc.). The Jupyter Kernel Architecture Jupyter is essentially a front-end that communicates with a computation server via a protocol (aptly called the Jupyter protocol). This computation server is called a kernel. All jupyter needs to know about a kernel is which ports to use to communicate different kinds of messages. To understand the difference between IHaskell and xeus-haskell, we must first look at the “Kernel” abstraction. Jupyter is essentially a decoupled frontend (the web UI) that communicates with a computation engine (the Kernel) via a standardized protocol over ZeroMQ (ØMQ). The Jupyter stack looks like this: JupyterLab / Notebook frontend (browser): Renders notebooks, lets you edit cells, handles user events. Jupyter server (Python): Manages files, launches kernels, proxies messages. Kernel (language backend): Actually executes your code. The frontend and the kernel do not share memory. They talk over five distinct ...
First seen: 2025-11-28 08:40
Last seen: 2025-11-28 11:40