Define types by giving descriptions (perhaps incomplete) of how they're built.
"...by how they're built" means applying arbitrary predicates (especially ones
about existence) to parts of structures.
The top-level namespaces contain what you need to use the library, including
simpler customizations.
The .assist namespaces are useful for more in-depth customizations.