traverseSubRoot :: Applicative f => (Sub -> f Sub) -> Root -> f Root
along with similar functions for all the types nested inside
that depend on
Note that types with custom representations will not have
traversals generated automatically: if required, these must be
defined manually in the same module as the call to
otherwise the generated code will lead to scope errors.