Coadjute is a generic build tool, originally intended as a replacement for make that supports keeping track of command line arguments that tweak the build in some way.
Coadjute is written in Haskell, implemented solely as a library and thus providing an embedded domain-specific language or EDSL.
At this stage, years after I decided to release it, I don't actually recommend using Coadjute. It's not maintained and probably full of bugs, performance issues, etc. It's one of the first Haskell projects I wrote so the code quality is unlikely to be that great either. As Haskell EDSL build systems go, Shake is a better option, and as build systems in general go, I recommend looking at tup, and always thinking about the falsehoods programmers believe about build systems when you have the opportunity to choose.
The source code is available here: