What are functors and monads?
In the previous chapter, we discussed the concept of function purity. A function should not produce any side effects and should be idempotent. In this chapter, we have seen how structs can be made immutable, and how this ties into function purity. As mentioned earlier, even in a purely functional language, in which side effects are eliminated as much as possible, you still have desirable side effect behavior. For example, getting input from a user, or writing data to a database, are both side effects that add value to a program.
In this section, we will try to build an understanding of how pure functional languages can achieve this. We’ll also look at an implementation in Go to achieve the same results, building on top of our knowledge about immutable structs and pure functions.
To preface this section, it is commonly said that there are too many monad explanations already and all of them are wrong or lacking in some manner. There are many...