I was inspired, after reading the excellent blog post Let Futures Be Futures, by the author’s thought experiment of a language in which all functions are coroutines and this is used to express asynchronicity: async functions can yield a type called Pending when awaiting some async action, while pure, synchronous functions can yield Never, indicating that they never yield at all. The more I thought about this, the more I realized that a strongly-typed language in which every function is a co...