extend the number of cases in which a function is generated instead of using...
extend the number of cases in which a function is generated instead of using bimap when deriving generic functions, also permit constructor arguments that do not contain a type variable