Hi Jonathon,
Traversable instances do not change the shape of a data structure!
On the contrary, the whole purpose of traverse is to combine effectful computations, stored in a structure without changing its shape! While Foldable folds over the contents of a data structure (via Monoid), Traversable allows you to fold over the effects attached to the contents of that structure (via Applicative).
It turns out that by using Const applicative functor you can use traverse to perform foldMap! Thus every Traversable is trivially a Foldable (see foldMapDefault).
Similarly, every Traversable is trivially a Functor if you use Identity applicative functor (see fmapDefault).
This is why Traversable has those Functor and Foldable constraints, not because it relies on fmap or foldMap.
Kind regards,
Nick