I think it's fine not to unify to early, this allows code to diverge and specialize for their specific use-case.
In particular here, you can't unify due to closures using the GC. Also tasks are guaranteed unique and can use move semantics. And hopefully in the future you can optimize allocation away: <https://github.com/nim-lang/RFCs/issues/443>. We could also do that for closure but in a different scenario, when they don't escape their scope.
