&gt; I am trying to say, however, that it&#x27;s not some grand trick that frees the user from thinking about monads.<p>This brings us back to the discussion of what it means to be &quot;thinking about monads&quot;. When a cashier hands me change, is he &quot;thinking about groups&quot;? Is a Rubik&#x27;s Cube whiz thinking about groups? Sometimes people are better at something by thinking about it in a completely different way. That is the exact meaning of duality: two things are the same, but different circumstances may make looking at it in one way more useful than the other. A &quot;push&quot; API (of which &quot;PFP monads&quot; or the &quot;monadic style&quot; as I call it, is an example) and a &quot;pull&quot; API are also duals, yet I believe that when writing concurrent code in imperative languages, the pull shape is style preferable.<p>As discussions about cognition might make some PFP people uncomfortable -- we all should just think &quot;in math&quot;, right? (I&#x27;m kidding. Mostly ;)) -- we can take this back to theory and say that switching between different representations requires computation. In fact, it can be argued that <i>all</i> computation is simply about changing representations and encoding things. 4 <i>is</i> 2 x 2, but going from representing that same thing as &quot;2x2&quot; to &quot;4&quot; is what computation does (and the lambda calculus computes just by substitution -- namely, by &quot;doing nothing&quot; from a mathematical point of view). All this is to say that going from looking at something one way to looking at it another way actually requires some computational power and is not free.