f . greads as “f after g”
A morphism that maps every object of its domain to every object of its co-domain.
A morphism mapping a domain to a strict-subset of the objects in the co-domain, i.e. there are objects in the co-domain which cannot be mapped to.
When moving between categories via monomorphisms, we can simplify to make some compositions equal even if the morphisms are not actually equal, e.g.
f x = mod x 20,
g1 x = x*2, and
g2 x = if x < 20 then x*2 else x*3, we can consider
g2 to be equal if they are composed after
g1 . f = g2 . f => g1 = g2.
In other circumstances
f . g1 = f . g2 => g1 = g2 might be a valid simplification.
A morphism with an inverse morphism: we can jump back and forth between the domain and co-domain. NB. It may still be a monomorphism so the categories may not be “identical”.
TODO: monad, functor, applicative, space https://wiki.haskell.org/Category_theory
TODO: partial order (poset), preorder (proset), lattice
Goes between categories. In Haskell terms, the Functor typeclass serves to “lift” a normal function into a Functor instance, thereby mapping a morphism in one (Hask sub-)category over to a morphism in another.