Better names for the classes of categories
When I first wrote the hierarchy, I didn't take good care to pick names that match the underlying mathematical terms. Thus, for example, Cartesian describes a symmetric monoidal category. Morphism doesn't have any more to do with morphisms than any of the other classes.
This keeps bugging me again and again. I will rename the classes some time later this year (hopefully).
Anybody who wants to chime in on what particular names to choose, feel free. I do still want to retain almost-compatibility with base:Control.Arrow, but it's perhaps not that important.
As far as I can tell, there is no functionality in this package that corresponds to a real Cartesian category? In particular I'd like fork :: cat a b -> cat a c -> cat a (b * c).
@isovector that would be &&& from PreArrow. (Which, yes, is a bad name.)
The fact that the product is hard-coded to tuples, and the sum to Either, which also means we're effectively locked itto the kind Type, is of course another decision of mine that is debateable – though it does have some advantages for type inference and compatibility with standard Haskell structures. Even when the natural choice of object is in some other kind, you can generally wrap it into a data with phantom argument.