base- Basic libraries

Copyright(C) 2008-2014 Edward Kmett,
LicenseBSD-style (see the file LICENSE)
Safe HaskellSafe






class Bifunctor p where Source

Formally, the class Bifunctor represents a bifunctor from Hask -> Hask.

Intuitively 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 id idid

If you supply first and second, ensure:

first idid
second idid

If you supply both, you should also ensure:

bimap f g ≡ first f . second g

These ensure by parametricity:

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


Minimal complete definition

bimap | first, second


bimap :: (a -> b) -> (c -> d) -> p a c -> p b d Source

Map over both arguments at the same time.

bimap f g ≡ first f . second g

first :: (a -> b) -> p a c -> p b c Source

Map covariantly over the first argument.

first f ≡ bimap f id

second :: (b -> c) -> p a b -> p a c Source

Map covariantly over the second argument.

secondbimap id


Bifunctor Either 
Bifunctor (,) 
Bifunctor Const 
Bifunctor ((,,) x1) 
Bifunctor ((,,,) x1 x2) 
Bifunctor ((,,,,) x1 x2 x3) 
Bifunctor ((,,,,,) x1 x2 x3 x4) 
Bifunctor ((,,,,,,) x1 x2 x3 x4 x5)