A promise is a value, and values are by definition not machines.
Phase Distinctions, Machines, Higher Order Functions,
Tools for composing systems
In CS: a phase distinction is a boundary code goes through on it's way to being run. We write the prime artifact, "the code," but to run a machine, this code is transformed by machines, often many machines transforming, taking whatever the current code is, making decisions about what that code looks like, what it represents, and outputting a new code closer to the final execution target. This is the compilation pipeline goes go through to get executed on the target machine. Phase distinction is applied to types, as types change as code goes through the pipeline, but in general all aspects of the code are going through phasal distinctions as they become closer to being run.
Higher order functions: composing complexity
Async- the most popular library on the planet for helping to deal with functional programming- is a library dedicated to composing functio