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.