Like with everything else, there's a plateau of productivity that's where most people feel confident and safe.
We've done a lot of experimenting with Arrow for the sake of it, mostly with MTL (Reader, Writer, EitherT, etc), but also recursion schemes and such. It ended in the incubator bucket for a reason.
If you stick to Either, Validated, nullable, collections, lambdas (what is arrow-core) and optics you have most of the tools to do single-threaded programming.
For concurrent behavior we have arrow-fx, which gives you constructs that feel single-threaded but aren't. No semaphores, no actors, no locked sections. Mostly high level constructs like thread-safe mutable variables, run-in-parallel, and run-in-another-thread-because-the-framework-requires-it.