Rock

Rock is a build system and library for Haskell, intended to be used to implement demand-driven compilation. Rock is based on Build Systems à la Carte, and takes inspiration from existing libraries Shake (Haskell) and Salsa (Rust).

Issues

Use with monads and effects

See #12.

Error handling

See #10. An single satisfying way to handle errors arising within Rock queries has yet to be found. The solution Rock's author settled on in Sixty and Sixten is to attempt to recover from nearly every error.

My general approach has recently been to try to always return something of the right type, even if it's just a dummy value. Usually you can replace only part of the result with some error sentinel, e.g. put a parse error in the syntax tree where the parse error happened.

source

In SydML, Ollef's approach is mixed with the niceties of integration with Effectful. With a proper effect system, one can simply include a Writer effect for tracking accumulated errors, and/or an Error effect for fatality.