The main benefit of &quot;free monads&quot; and &quot;extensible effects&quot; is that every piece of side-effecting code comes with a convenient way to substitute your own effect handlers. For example, you could capture all I&#x2F;O from a function and redirect it somewhere else, or intercept every time the function touches a global variable, etc. And you could do it cleanly, in a way that&#x27;s enforced by the language. I think that&#x27;s pretty exciting.