If you use a fonctionnal tool on top of a non functionnal one you will end up with a non fonctionnal tool. And make is not functionnal whatever you put on top of it won't make it functionnal.
Haskell standard library mostly use haskell and NOT C or C--. If you use C to implement your language any small language in C can strongly impact yours, nobody wants that. By the way the purpose of C-- is the GHC(because you don't want to be tightly coupled with C).
All variables in make which are not target-specific, are global. That 100 % non functionnal.
> And even then, make is mostly declarative.
The docker API is declarative but the reality is not, so everybody somehow use docker shell to do dirty stuff.
It's not like new build systems have to follow the paradigms of the old ones. Why do you think they write a new build system in the first place?