Pardon my ignorance, but can't this be more easily translated into terms of (modern) object oriented programming, where you avoid mutating state?<p>Here, the "natural transformation" is a function that takes an input object which adheres to a specific interface (i.e. provides a set of specific methods), operates only on that input interface, and returns another object that conforms to the expected output interface.<p>Avoiding mutating state means that either those objects have no attributes, or that the state can only be set on construction. (In FP speak, this corresponds currying of common parameters. Or to an internal abstract type, if the constructor is private and you can only create it via a specific set of static methods).<p>Is this modern style of OOP equivalent to "Functor-Oriented Programming", or am I missing something?