Welcome! This repository contains the source of Haskell Optimization Handbook
In not so many words:
- Haskell is a great and fast language.
- Understanding the performance of Haskell programs is hard, because:
- Not many developers have direct experience with lazy evaluation.
- Resources for understanding performance are distributed around the web in wikis, blog posts etc.
- Performance optimization in Haskell requires a lot of up front knowledge, including profiling techniques, the memory model or understanding GHC's intermediate representations.
Our mission is to create a single resource that makes available information
previously reserved for the highest level of arcane functional programming
wizards. We envision a handbook that any Haskeller can turn to, to gain enough
actionable knowledge to begin performance optimization on their programs; with
topics ranging from profiling/debugging and choosing appropriate libraries to
low level optimization techniques such as exploiting Levity polymorphism
to
control memory representation and layout.
This work has been generously sponsored by IOG. We thank them for their contribution and enrichment of the Haskell ecosystem.
Yes! We need your help! It does not matter if you're a new Haskeller, a grey beard, or an arcane functional wizard, there is a way for you to contribute! Please see the Contributing guide.
How did you learn Haskell? Did you pick it up from Learn You a Haskell or one of the many other text books? This is your chance to give back to others who are beginning their Haskell Journey and to make the Haskell community a little bit better. Even if you do think you are not confident in your Haskell skills just reading and marking sections of text that are confusing would be a big help! Haskell has a reputation for being beginner unfriendly, and for a long learning curve, but this does not have to be the case. As a community we can, and should, do better, and you can begin doing that right now with this project.
The project is built with sphinx
and written in RestructuredText
. Make
sure the following is installed and available on $PATH
:
python 3.9
sphinx 4.5.0
If you're using nix
or NixOs
then you'll find the appropriate .nix
files in the root directory of the project.
Non-nix, run:
make html
With nix and flakes, run:
nix develop -c make html
With nix and no flakes, run:
nix-shell --run 'make html'
To rebuild the book everytime any *.rst*
file changes do:
find . -name "*.rst" | entr -sc '<your-build-command-here>'
or use the autobuild.sh
script in the scripts directory:
You can then check the output in result/index.html
or load that directory into whatever
browser you'd like:
firefox result/html/index.html
or use the sphinx-autobuild-wrapped.sh
script in the scripts directory.