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, 8.2, 8.4, and 8.6. 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.
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-devcurl -sSL https://get.haskellstack.org/ | sh
git clone https://github.com/gibiansky/IHaskell
cd IHaskell
pip3 install -r requirements.txt
# stack install gtk2hs-buildtools # Disabled for now because gtk2hs-buildtools doesn't work with lts-13 yet
stack install --fast
ihaskell install --stackif you want to use jupyterlab (right now only version ~0.33), you need to install the jupyterlab ihaskell extension to get syntax highlighting with:
jupyter labextension install ihaskell_jupyterlabRun Jupyter.
stack exec jupyter -- notebookYou 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 # Disabled for now because gtk2hs-buildtools doesn't work with lts-13 yet
stack install --fast
ihaskell install --stackIf 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.
Run Jupyter.
stack exec jupyter -- notebookTested on macOS Sierra (10.12.6)
To quickly run a Jupyter notebook with the IHaskell kernel, try the Dockerfile
in the top directory.
docker build -t ihaskell:latest .
docker run --rm -it -p8888:8888 ihaskell:latestIHaskell, being a Jupyter kernel, depends at runtime on a tall pile of software
provided by, traditionally, apt, pip, and npm.
To develop IHaskell, we want to be able to isolate and control all of the
dependencies. We can use
Stack's Docker integration
to install all of those runtime dependencies into an isolated environment.
- The system library dependencies installed with
aptwill be isolated in theihaskell-devDocker image. - Dependencies installed by
pipandnpmwill be isolated in theIHaskell/.stack-worksubdirectory. - All Stack build products and installed binaries will be isolated in the
IHaskell/.stack-worksubdirectory.
The following stack --docker commands require a Docker image
named ihaskell-dev, so build that image from the docker/Dockerfile with this
command:
docker build -t ihaskell-dev dockerInstall the ghc version specified by the Stack resolver.
stack --docker setupInstall Jupyter and all of its requirements.
stack --docker exec pip3 -- install jupyterBuild IHaskell and all of its packages.
stack --docker installDirect IHaskell to register itself as a Jupyter kernel.
stack --docker exec ihaskell -- install --stackOptionally, install JupyterLab and the IHaskell JupyterLab extension for
syntax highlighting. See the
ihaskell_labextension/README.md.
stack --docker exec pip3 -- install jupyterlab
stack --docker exec bash -- -c 'cd ihaskell_labextension;npm install;npm run build;jupyter labextension link .'Run the Jupyter notebook, with security disabled for testing.
stack --docker exec jupyter -- notebook --NotebookApp.token='' notebooksRun JupyterLab (if you installed it), with security disabled for testing.
stack --docker exec jupyter -- lab --NotebookApp.token='' notebooksEverything in Stackage can be installed by stack --docker install.
To install a local package, add it to the stack.yaml
file (See: "Where are my packages?" below).
Install the package with stack, then restart jupyter.
# after adding details about mypackage to stack.yaml
stack --docker install mypackageTo cleanly delete the entire Stack Docker development environment:
docker image rm ihaskell-dev
stack clean --fullIf 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-19.03.tar.gz release-8.6.nix --arg packages "haskellPackages: [ haskellPackages.lens ]"
<result path>
$ <result path>/bin/ihaskell-notebookIt 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:
$ NIXPKGS_ALLOW_BROKEN=1 nix-build -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz release-8.4.nix --arg packages "haskellPackages: [ haskellPackages.ihaskell-blaze haskellPackages.ihaskell-charts ]"We use GHC 8.4 here because not all dependencies have been updated to support GHC 8.6 yet.
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 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.
If you try to run a notebook with stack --docker and see an IHaskell kernel
error that looks like this:
ihaskell: /opt/ghc/8.6.5/lib/ghc-8.6.5/settings: openFile: does not exist
Then delete your ~/.stack directory and start over.



