Subscribe Free

Join 2670+ others. No spamming.
I promise!

We are currently under high development. Follow us at github.

Looking for Python Tutorials?
Check these awesome tutorials



sdiehl / kaleidoscope


Haskell LLVM Kaleidoscope Tutorial


A short guide to building a tiny programming language in Haskell with LLVM.

Stephen Diehl

Haskell LLVM Tutorial

Build Status MIT License

Read Online:

Building with Stack ( Recommended )

Using the LLVM toolchain requires several system libraries:

$ apt-get install llvm-3.5
$ apt-get install libedit-dev

The resulting page and chapter samples can be built using the given Makefile.

$ stack build
$ stack ghc preprocessor.hs -- -o preprocessor 
$ stack exec make

Building with Cabal

$ apt-get install llvm-3.5
$ apt-get install libedit-dev

Install the dependencies:

$ cabal sandbox init

If you just want to compile the examples then configure with the following command. Ensure that llvm-config is on your $PATH.

$ cabal configure

If you want to build the tutorial text locally configure with the following. This will install pandoc from source which will take a while.

$ cabal configure --flags=tutorial

Then install the dependencies:

$ cabal install --only-dependencies

Source Code

The source code for the example compiler of each chapter is included in the /src folder. With the dependencies installed these can be built using the Makefile at the root level or with cabal.

$ cabal run chapter2
$ cabal run chapter6
$ make chapter2
$ make chapter6

A smaller version of the code without the parser frontend can be found in the llvm-tutorial-standalone repository. The LLVM code generation technique is identical.


This is an open source project, patches and corrections always welcome.

To generate the HTML page:

$ make tutorial.html

A standalone PDF can also be generated with:

$ make tutorial.pdf


Text is adapted from the LLVM tutorial and is subsequently licensed under the LLVM license.

The Haskell source files are released under the MIT license. Copyright (c) 2013-2016, Stephen Diehl