Module DA.Bifunctor¶
Typeclasses¶
class Bifunctor p where
A bifunctor is a type constructor that takes two type arguments and is a functor in /both/ arguments. That is, unlike with ‘Functor’, a type constructor such as ‘Either’ does not need to be partially applied for a ‘Bifunctor’ instance, and the methods in this class permit mapping functions over the ‘Left’ value or the ‘Right’ value, or both at the same time.
It is a bifunctor where both the first and second arguments are covariant.
You can define a ‘Bifunctor’ by either defining ‘bimap’ or by defining both ‘first’ and ‘second’.
If you supply ‘bimap’, you should ensure that:
If you supply ‘first’ and ‘second’, ensure:
If you supply both, you should also ensure:
- bimap
: (a -> b) -> (c -> d) -> p a c -> p b d
Map over both arguments at the same time.
Examples:
- first
: (a -> b) -> p a c -> p b c
Map covariantly over the first argument.
- second
: (b -> c) -> p a b -> p a c
Map covariantly over the second argument.
Examples:
instance Bifunctor ()
instance Bifunctor x1
instance Bifunctor (x1, x2)
instance Bifunctor (x1, x2, x3)
instance Bifunctor (x1, x2, x3, x4)
instance Bifunctor (x1, x2, x3, x4, x5)