Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/haskellfoundation/hs-opt-handbook.github.io
The Haskell Optimization Handbook
https://github.com/haskellfoundation/hs-opt-handbook.github.io
Last synced: 15 days ago
JSON representation
The Haskell Optimization Handbook
- Host: GitHub
- URL: https://github.com/haskellfoundation/hs-opt-handbook.github.io
- Owner: haskellfoundation
- License: cc-by-4.0
- Created: 2022-02-16T19:18:34.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-09-26T18:32:06.000Z (4 months ago)
- Last Synced: 2025-01-03T03:06:10.561Z (23 days ago)
- Language: HTML
- Homepage: https://haskell.foundation/hs-opt-handbook.github.io/
- Size: 12.8 MB
- Stars: 176
- Watchers: 23
- Forks: 12
- Open Issues: 83
-
Metadata Files:
- Readme: README.rst
- Contributing: Contributing.rst
- License: LICENSE
Awesome Lists containing this project
README
*****************************
Haskell Optimization Handbook
*****************************Welcome! This repository contains the source of `Haskell Optimization Handbook
`_What is the Point?
==================In not so many words:
1. Haskell is a great and fast language.
2. Understanding the performance of Haskell programs is hard, because:1. Not many developers have direct experience with lazy evaluation.
2. Resources for understanding performance are distributed around the web in
wikis, blog posts etc.
3. Performance optimization in Haskell requires a lot of up front knowledge,
including profiling techniques, the memory model or understanding GHC's
intermediate representations.The Goal
========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.Sponsors
========This work has been generously sponsored by `IOG `_. We thank
them for their contribution and enrichment of the Haskell ecosystem.Contributing
============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
`_.What's in it for me?
--------------------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.Building
========Requirements
------------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.Invocations
-----------
Non-nix, run:.. code:: shell
make html
With nix and flakes, run:
.. code-block:: bash
nix develop -c make html
With nix and no flakes, run:
.. code-block:: bash
nix-shell --run 'make html'
To rebuild the book everytime any ``*.rst*`` file changes do:
.. code-block:: bash
find . -name "*.rst" | entr -sc ''
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:.. code-block:: bash
firefox result/html/index.html
or use the ``sphinx-autobuild-wrapped.sh`` script in the scripts directory.