Generalize Category to have arbitrary constraints on objects
Added convenience module AltMonad
Show that [] forms a monad