But effects do need to satisfy the laws if the &quot;natural&quot; way of writing them is to make sense, so I&#x27;d rather that were enforced (compare the confusing results one gets when using Set in a scala for&#x2F;yield, because it doesn&#x27;t obey the monad laws). Unless you&#x27;re restricting the &quot;interpreters&quot; such that the implementation of a given action is necessarily monadic?<p>(Have you seen the &quot;freer monad, more extensible effects&quot; paper? I think they end up in a similar place, though from the opposite direction - using a single structure typed by a (type-level) list of possible effects to represent an effectful operation, and then you supply an interpretation for each effect to run it)