types -is:module

Traverse all the types
Traverse all types in the given structure. For example, to update all Strings in a WTree (Maybe String) String, we can write
>>> myTree = WithWeight (Fork (Leaf (Just "hello")) (Leaf Nothing)) "world"

>>> over (types @String) (++ "!") myTree
WithWeight (Fork (Leaf (Just "hello!")) (Leaf Nothing)) "world!"
The traversal is deep, which means that not just the immediate children are visited, but all nested values too.
Types referenced by the schema.
Structure of types and their pointings (up to points, initially 0) Primitive types and empty types are mapped to an empty constructor list, and can be distinguished using dataTypeRep on the SomeData associated to it by xedni. The integer is a multiplicity which can be > 1 for pointings.
Given a list of pairs of types, are any two members of a pair surely apart, even after arbitrary type function evaluation and substitution?