'let :=' for immediate evaluation in assignment. Does this work for included files? Also ?= to only override if not already defined. Default parameters, ie: goal foo (name, release = true) = ... You might only allow defaults to be added to the end, or you might allow goals to be called with labelled parameters. Deleting target files if goals is interrupted, but only if the timestamp changes (what about non-*files?). Also: atomic code. This will delete the target if the code doesn't run to completion. (make doesn't do this, but probably it should). Parallel builds: On failure, wait for other jobs to finish. Conditional sections (same as "ifeq" etc in make). Let within functions and goals, eg: function foo () = let temp = "%bar%baz"; { .... } Unclear if this would be helpful or not. Implement more make functions, see: https://www.gnu.org/software/make/manual/html_node/Functions.html#Functions Make re-execs itself if the Makefile (or any include) changes, and goals should do something similar. See: https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html Code should be an expression, eg this ought to work: let foo = { echo "hello" } and/or anonymous functions: let foo = function (arg) { ... } Infinite loop when you have this goal: goal pod2man (page, section) = "docs/%page.%section" : "docs/%page.pod" { ... } This is caused by %section matching "pod" so the rule is called again, even if the local file docs/%page.pod actually exists.