I follow the same principle in my code, but doesn't the "functional core, imperative shell" pattern already push the async stuff out of the core?<p>What would be an example of an async operation that doesn't perform a side-effect (thereby needing a place in the imperative shell rather than the functional core)?<p>I think pushing async to the shell is really a subset of pushing imperative code to the shell.