In the previous two chapters, we had quite a shift in perspective. In Chapter 6, Exploring Built-In Effects, we looked at a handful of implementations of the concrete effects available in the standard library. In Chapter 7, Understanding Algebraic Structures we jumped from the real to the theoretical and played with abstract algebraic structures.
Now that we are familiar with the process of working with abstractions defined by laws, we can finally deliver on the promise we gave in Chapter 6, Exploring Built-In Effects, and identify abstractions lying beneath the standard implementations we touched on there.
We'll define and implement a functor, an abstract concept that's useful in relation to any effect. Moreover, we’ll have three different flavors of them, so stay tuned!
By the end of this chapter, you'll be able to identify and implement...