A Haskell kernel for IPython.
Haskell Jupyter Notebook Other
Failed to load latest commit information.
demo Removing old demo notebooks Apr 23, 2015
docker Bump resolver to lts-11.14 Jun 19, 2018
ghc-parser ghc-parser: bump version Mar 17, 2018
html Remove dependence on here, allow haskell-src-exts 1.17 Dec 8, 2015
ihaskell-display ihaskell-diagrams: Mar 17, 2018
images Adding documentation and removing Docker (for now) Mar 26, 2015
ipython-kernel ipython-kernel: use cryptonite instead of SHA May 30, 2018
main ihaskell: update Feb 8, 2018
notebooks Update the guide for the custom HomeBrew location (#872) Jun 8, 2018
src src/tests/IHaskell/Test/Parser.hs: add test for case-insensitive LANG… Apr 26, 2018
.dockerignore Added and tested Dockerfile and instructions on how to use it Feb 1, 2016
.ghci Remove default flags; they break ghci Mar 13, 2017
.gitignore Add nix derivations Jul 24, 2017
.travis.yml .travis.yml: set DISPLAY=false for GHC 8.4.1 Mar 17, 2018
Dockerfile Bump resolver to lts-11.14 Jun 19, 2018
LICENSE updating LICENSE and minor formatting fixes Dec 12, 2013
README.md README.md: update Nix command to use nixos-18.03 and release-8.2.nix Jun 13, 2018
Setup.hs Fix formatting with newer hindent Aug 25, 2015
build.sh Prevent re-use of ipython-package from hackage Nov 10, 2015
cabal.project cabal.project: init Apr 4, 2018
circle.yml extra libs Mar 12, 2017
ihaskell.cabal ihaskell: bump version Mar 17, 2018
macos-install.sh adjust for changes in Caskroom Apr 14, 2016
release-8.2.nix release*.nix: make pythonPackages configurable Jun 5, 2018
release-8.4.nix release*.nix: make pythonPackages configurable Jun 5, 2018
release.nix release.nix: prepend to existing $PATH Jun 11, 2018
requirements.txt requirements.txt: update Feb 13, 2018
root-deps.sh Remove redundant use of 'tr' Apr 18, 2015
stack-8.0.yaml stack*.yaml: add gfortran.cc.lib to packages Mar 13, 2018
stack-8.4.yaml stack-8.4.yaml: use latest resolver Jun 2, 2018
stack.yaml Bump resolver to lts-11.14 Jun 19, 2018
ubuntu-install.sh ihaskell-widgets and singletons >= 2.0 Oct 16, 2015
verify_formatting.py Apply an untested fix for ghc-7.8 Oct 7, 2015


jupyter IHaskell Build Status Binder


You can now try IHaskell directly in your browser at CoCalc or mybinder.org.

Alternatively, watch a talk and demo showing off IHaskell features.

IHaskell is a kernel for the Jupyter project, which allows you to use Haskell inside Jupyter frontends (including the console and notebook). It currently supports GHC 8 and 8.2. For GHC 7.10 support please use the GHC7 tag.

For a tour of some IHaskell features, check out the demo Notebook. More example notebooks are available on the wiki. The wiki also has more extensive documentation of IHaskell features.

IPython Console IPython Notebook

Interactive In-Browser Notebook

Note: IHaskell does not support Windows. To use on Windows, install Virtualbox, install Ubuntu or another Linux distribution, and proceed with the install instructions.



Some prerequisites; adapt to your distribution.

sudo apt-get install -y python3-pip git libtinfo-dev libzmq3-dev libcairo2-dev libpango1.0-dev libmagic-dev libblas-dev liblapack-dev
curl -sSL https://get.haskellstack.org/ | sh
git clone https://github.com/gibiansky/IHaskell
cd IHaskell
pip3 install -r requirements.txt
stack install gtk2hs-buildtools
stack install --fast
ihaskell install --stack


You need to have Homebrew installed. If you do not have it yet run /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" in your terminal.

You also need the Xcode command line tools. You can install them by running xcode-select --install in the terminal and following the prompts.

brew install python3 zeromq libmagic cairo pkg-config haskell-stack pango
git clone https://github.com/gibiansky/IHaskell
cd IHaskell
pip3 install -r requirements.txt
stack install gtk2hs-buildtools
stack install --fast
ihaskell install --stack

If you have Homebrew installed to a custom location, you'd need to specify --extra-include-dirs ${HOMEBREW_PREFIX}/include ----extra-lib-dir ${HOMEBREW_PREFIX}/lib to the stack command.

Tested on macOS Sierra (10.12.6)


stack exec jupyter -- notebook


If you prefer a Docker-based workflow, you can use it to create an IHaskell notebook environment. For example:

$ docker build -t ihaskell:latest .
$ docker run -it -p8888:8888 ihaskell:latest

Currently the component that takes the longest time to compile is ihaskell-widgets, so if you're in a hurry you may want to comment that out in stack.yaml.

Stack development with Docker

This is an alternative way to use Docker than above, taking advantage of stack's Docker support. Makes it easy to install new packages with stack --docker install <pkg> without having to rebuild a docker image. Like the other Docker workflow, this doesn't require any host dependecies to be installed.

docker build -t ihaskell-dev docker
stack --docker setup
stack --docker install
stack --docker exec ihaskell -- install --stack
stack --docker exec jupyter -- notebook --ip= notebooks

Everything in the LTS can be made available! To add a package outside the LTS, simply add it to the stack.yaml file (See: "Where are my packages?" below). Then install the package with stack before restarting jupyter

# after adding details about mypackage to stack.yaml
stack --docker install mypackage
stack --docker exec jupyter -- notebook notebooks


If you have the nix package manager installed, you can create an IHaskell notebook environment with one command. For example:

$ nix-build -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-18.03.tar.gz release-8.2.nix --arg packages "haskellPackages: [ haskellPackages.lens ]"
<result path>
$ <result path>/bin/ihaskell-notebook

It might take a while the first time, but subsequent builds will be much faster.

The IHaskell display modules are not loaded by default and have to be specified as additional packages:

$ nix-build release.nix --arg packages "haskellPackages: [ haskellPackages.ihaskell-blaze haskellPackages.ihaskell-charts ]"


Where are my packages? (IHaskell + Stack)

Stack manages separate environments for every package. By default your notebooks will only have access to a few packages that happen to be required for ihaskell. To make packages available add them to the stack.yaml in the ihaskell directory and run stack solver && stack install.

Packages should be added to the packages: section and can take the following form (reproduced here from the stack documentation). If you've already installed a package by stack install you can simply list its name even if it's local.

- package-name
- location: .
- location: dir1/dir2
- location: https://example.com/foo/bar/baz-0.0.2.tar.gz
- location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip
- location:
    git: git@github.com:commercialhaskell/stack.git
    commit: 6a86ee32e5b869a877151f74064572225e1a0398
- location:
    hg: https://example.com/hg/repo
    commit: da39a3ee5e6b4b0d3255bfef95601890afd80709

The kernel keeps dying (IHaskell + Stack)

The default instructions globally install IHaskell with support for only one version of GHC. If you've e.g. installed an lts-10 IHaskell and are using it with an lts-9 project the mismatch between GHC 8.2 and GHC 8.0 will cause this error. Stack also has the notion of a 'global project' located at ~/.stack/global-project/ and the stack.yaml for that project should be on the same LTS as the version of IHaskell installed to avoid this issue.