I don't think it's an issue with Nim then but more with async programming. Nim follows the semantics of C#, Python and Javascript async/await, and it also uses the type system to ensure there is no logical mistake in the code, like using a potentially empty async result in part of the code that cannot handle it (i.e. sync code).
Yes async code is viral, but introducing those boundaries between sync and async ensures that it is logically safe and you don't read garbage (future results not yet arrived) in your sync code. The added benefits is that within async code you can write in the same style as sync code. The alternative to async/await would be similar to Javascript Promises and the type would be worse you would have proc callbacks instead of Future.
