There's a reason most complex software uses OOP. Functional programming is nice, sometimes, but as projects grow it ends up using patterns that do essentially the same thing as OOP. A monad is basically an OOP object.
To see a language that is purely OOP but also forces you to be very explicit about accessing state, check out Pony language.
i think it's the other way- an OOP object is a poor imitation of monadic algebra that cannot be generalized with mathematical rules to guarantee certain properties.
To see a language that is purely OOP but also forces you to be very explicit about accessing state, check out Pony language.