starting module documentation
abuse liberal type synonyms to make nicer signatures and prepare for
talking about parametric, but non-constructor-based functors