build: Build systems a la carte

[ algorithms, data-structures, library, mit ] [ Propose Tags ]

A library for experimenting with build systems and incremental computation frameworks, based on the ideas presented in the ICFP 2018 paper "Build Systems a la Carte".

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.0.1,, 1.0
Dependencies algebraic-graphs (>=0.1.1 && <0.2), base (>=4.7 && <5), containers (>= && <0.6), extra (>=1.5.3 && <1.7), filepath (>= && <1.5), mtl (>=2.2.1 && <2.3), random (>=1.1 && <1.2), transformers (>= && <0.6) [details]
License MIT
Copyright Andrey Mokhov, Neil Mitchell, Simon Peyton Jones, 2018
Author Andrey Mokhov, Neil Mitchell, Simon Peyton Jones
Maintainer Andrey Mokhov <>, github: @snowleopard
Category Algorithms, Data Structures
Home page
Source repo head: git clone
Uploaded by snowleopard at 2018-07-06T22:11:34Z
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 2179 total (25 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-07-06 [all 1 reports]

Readme for build-1.0

[back to package description]

Build Systems à la Carte

Hackage version Linux & OS X status Windows status

This project provides an executable framework for developing and comparing build systems, viewing them as related points in landscape rather than as isolated phenomena. The code derives from the ICFP 2018 paper "Build Systems à la Carte".

Getting Started

You may be interested to:

  • Run stack test to execute all the provided build systems on a very simple example.
  • Run stack haddock to generate HTML documentation of all the interfaces.
  • Read the code, particularly System.hs which is the concrete implementation of all build systems. Following the imports (or the Haddock documentation) will lead you to all the constituent parts.

Further Activities

There aren't really any. The code served as a proving ground for ideas, and its existence both allows confirmation that our conclusions are valid, and opportunity to cheaply conduct further experiments. Although the code is a useful adjoint to the paper, it is not essential to it (other than we wouldn't have been able to discover what we did without an executable specification).

Background Information

The task abstraction is explored more completely in this blog post, and the motivation behind the project in an earlier blog post.