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.