A pattern that tends to happen a lot when exploring how to represent something: 1. Start with an ad-hoc data type 2. Write a generalized fold for it 3. Factor it out such that the Functor structure is exposed, i.e. separate structure from content. This then yields Foldabale and Traversable.