He also has two follow-up posts on his blog about build systems. They're both worth reading.<p>Small Project Build Systems
- <a href="https://neilmitchell.blogspot.com/2021/09/small-project-build-systems.html" rel="nofollow">https://neilmitchell.blogspot.com/2021/09/small-project-buil...</a><p>Huge Project Build Systems
- <a href="https://neilmitchell.blogspot.com/2021/09/huge-project-build-systems.html" rel="nofollow">https://neilmitchell.blogspot.com/2021/09/huge-project-build...</a>
I used shake for some simple build scripts and to work on a predecessor of the Haskell Language Server. Due to it's lack of hermetic builds I don't think it's really appropriate for any project you're going to share with more than one person.<p>That being said I think it's an absolutely amazing Haskell library for building complex systems with scheduling jobs and caching of intermediate results. Once you use it you get the sense that every large codebase has an ad hoc poorly specified build system nestled inside of it. I described the experience of using it briefly here:<p><a href="https://4ta.uk/p/shaking-up-the-ide" rel="nofollow">https://4ta.uk/p/shaking-up-the-ide</a>
A detailed example of dynamic dependencies would be nice. Does this just mean a file dependency where you don't know the exact set of filenames ahead of time? Or does it mean dynamic topology?