To make the point more explicit.
Usually people use actors or agents because they want effect isolation, but in Haskell nothing is going to escape your notice on that front.
If you want to expand the scope of what in your codebase is *pure*, thereby relegating side-effects to only the functions that *have* to be side-effecting, then you might consider turning your problem into a Free Monad, where there's a pure DSL and pure functions that manipulate only the DSL with a separate effectful interpreter for execution. New people without a firm grasp of monadic DSLs can sometimes find the concept alien, so it's not something you should feel is obligatory. I would first seek to simply write code that solves your problem in Haskell, maybe with the use of Async, then refine afterward with a couple of tests written.
Relevant links:
Cheers,
Chris