In this chapter, we explore the more advanced topics of Haskell - functors, applicative functors and monads. These three concepts are typeclasses in Haskell that generalise ideas of function mapping, function application and programming with effects.