Clojure’s core async library recently added a namespace called ‘flow’.
The point of flow is to provide abstractions for building easily composable systems where separate processes can be easily connected together. It is supposed to make these kind of stateful, ‘parallel’ type systems more ‘functional’, and therefore more easy to reason about and test.