Demystify

Suppose a function that reverses a List and a class called Banana that your local fruit man has on his server.

  <A> List<A> reverse(List<A> list)
  class Banana {}

It is correct to say that we can reverse a list of bananas, but it is incorrect to say that the reverse function is in some way related to bananas. Reversing a list of bananas is merely a single instance of an infinite possibility. For precisely this reason, it is also incorrect to say that monads are in some way related to I/O.

This metaphor might appear vague or inaccurate, but it is actually very (very) precise as you will see.