Monad As Metaphor

Mathematical structure like functors and monads could be seen as providing Abstract Source Domains. But are they really Experiential Gestalts?

Certainly, a Haskell programmer might say `IO Is a Monad`. But how does that affect reasoning and understanding?

Given How Do Metaphors Work, it seems a programmer with a programming problem would think, "Well, the equivalent situation in the Source Domain of the mathematical structure called a `Monad` is X<sub>S</sub>, so the solution in the Target Domain should come from the equivalent X<sub>T</sub>."

However, for that programmer, probably the source and target domains are the *same*: Haskell programming. She probably has no experience with the *mathematical* use of programming, so there's no separate reservoir of experience to draw on.

Suppose the `IO` monad is the first one the programmer learns (likely). Then the governing metaphor is more likely to be `Monad Is IO`. That is, when encountering a new use of monads, reasoning will fall back on experience with `IO`, not on the mathematical properties of monads. Worse, the reasoning is likely to turn on *incidental* properties of `IO`, not the ones derived from the `Monad` typeclass.