-class (GArrow g (**) u,
- GArrow g (<*>) v) =>
- GArrowProd g (**) u (<*>) v
-
- -- fundep: in any given context, (<*>) may serve as the
- -- product for at most one GArrow
- | (**) -> (<*>),
- (<*>) -> v, v -> (<*>) where
- ga_prod_copy :: g x (x<*>x)
- ga_prod_drop :: g x v
-
-class (GArrow g (**) u,
- GArrow g (<+>) v) =>
- GArrowSum g (**) u (<+>) v
-
- -- fundep: in any given context, (<+>) may serve as the
- -- coproduct for at most one GArrow
- | (<+>) -> (**),
- (<+>) -> v, v -> (<+>) where
+class (GArrowDrop g (<*>) u,
+ GArrowCopy g (<*>) u) =>
+ GArrowProd g (<*>) u
+
+class GArrow g (<+>) u =>
+ GArrowSum g (<+>) u where