In this recipe, we will work with two type classes, Traversable, and Foldable. Both these classes are the generalization of the functions that we have seen when working with Lists. Traversable, as the name suggests, allows us to browse a data structure to traverse from left to right. Similarly, the Foldable type class allows us to fold the elements of a data type.
In fact, in previous versions of GHC, traversals and folding were defined for lists. In recent versions, those functions are generalized to include Traversable and Foldable, making them applicable to a wide range of data structures.
We will also define Traversable and Foldable instances for a tree.