OOP is an attempt to manage global state and the mutation of it, lenses are essentially a convenient way of transforming values (without mutation) and are only superficially similar. Side effects are inherently non-compositional, so it's no surprise that they are not easy to model, but Monads are gradually teaching us the best way to handle them. The current state of the art appears to be a single monad parameterized with an effect algebra (supporting composition for some effect types). You are of course free to be a skeptic, but in doing so you are rejecting a large part of modern computer science.