DA.Bifunctor
Typeclasses
class Bifunctor p
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:
`bimap identity identity` ≡ `identity`
first identity ≡ identity
second identity ≡ identity
bimap f g ≡ first f . second g
bimap (f . g) (h . i) ≡ bimap f h . bimap g i
first (f . g) ≡ first f . first g
second (f . g) ≡ second f . second g
-
bimap: (a->b) -> (c->d) ->pac->pbdMap over both arguments at the same time.Examples:bimap f g ≡ first f . second g>>> bimap not (+1) (True, 3) (False,4) >>> bimap not (+1) (Left True) Left False >>> bimap not (+1) (Right 3) Right 4 -
first: (a->b) ->pac->pbcMap covariantly over the first argument.Examples:first f ≡ bimap f identity>>> first not (True, 3) (False,3) >>> first not (Left True : Either Bool Int) Left False -
second: (b->c) ->pab->pacMap covariantly over the second argument.Examples:second ≡ bimap identity>>> second (+1) (True, 3) (True,4) >>> second (+1) (Right 3 : Either Bool Int) Right 4