Safe Haskell | None |
---|---|

Language | Haskell2010 |

Models of several build systems.

## Synopsis

- dumb :: Eq k => Build Monad () k v
- busy :: forall k v. Eq k => Build Monad () k v
- memo :: Ord k => Build Monad () k v
- make :: Ord k => Build Applicative (MakeInfo k) k v
- ninja :: (Ord k, Hashable v) => Build Applicative (VT k v) k v
- cloudBuild :: (Ord k, Hashable v) => Build Applicative (CT k v) k v
- buck :: (Ord k, Hashable v) => Build Applicative (DCT k v) k v
- excel :: Ord k => Build Monad (ExcelInfo k) k v
- shake :: (Ord k, Hashable v) => Build Monad (VT k v) k v
- cloudShake :: (Ord k, Hashable v) => Build Monad (CT k v) k v
- bazel :: (Ord k, Hashable v) => Build Monad (CT k v) k v
- nix :: (Ord k, Hashable v) => Build Monad (DCT k v) k v

# Toy build systems

dumb :: Eq k => Build Monad () k v Source #

This is not a correct build system: given a target key, it simply rebuilds it, without rebuilding any of its dependencies.

busy :: forall k v. Eq k => Build Monad () k v Source #

This is a correct but non-minimal build system: given a target key it recursively rebuilds its dependencies, even if they are already up to date. There is no memoisation, therefore the a key may be built multiple times.

memo :: Ord k => Build Monad () k v Source #

This is a correct but non-minimal build system: it will rebuild keys even if they are up to date. However, it performs memoization, therefore it never builds a key twice.

# Applicative build systems

make :: Ord k => Build Applicative (MakeInfo k) k v Source #

A model of Make: an applicative build system that uses file modification times to check if a key is up to date.

ninja :: (Ord k, Hashable v) => Build Applicative (VT k v) k v Source #

A model of Ninja: an applicative build system that uses verifying traces to check if a key is up to date.

cloudBuild :: (Ord k, Hashable v) => Build Applicative (CT k v) k v Source #

A model of CloudBuild: an applicative build system that uses constructive traces to check if a key is up to date as well as for caching build results.

buck :: (Ord k, Hashable v) => Build Applicative (DCT k v) k v Source #

A model of Buck: an applicative build system that uses deep constructive traces to check if a key is up to date as well as for caching build results.

# Monadic build systems

excel :: Ord k => Build Monad (ExcelInfo k) k v Source #

A model of Excel: a monadic build system that stores the calculation chain from the previuos build and approximate dependencies.

shake :: (Ord k, Hashable v) => Build Monad (VT k v) k v Source #

A model of Shake: a monadic build system that uses verifying traces to check if a key is up to date.

cloudShake :: (Ord k, Hashable v) => Build Monad (CT k v) k v Source #

A model of Cloud Shake: a monadic build system that uses constructive traces to check if a key is up to date as well as for caching build results.

bazel :: (Ord k, Hashable v) => Build Monad (CT k v) k v Source #

A model of Bazel: a monadic build system that uses constructive traces to check if a key is up to date as well as for caching build results. Note that Bazel currently does not allow users to write monadic build rules: only built-in rules have access to dynamic dependencies.