Data.Bifunctor

base-4.8.2.0: Basic libraries

Copyright | (C) 2008-2014 Edward Kmett,
License | BSD-style (see the file LICENSE)
Maintainer | libraries@haskell.org
Stability | provisional
Portability | portable
Safe Haskell | Safe
Language | Haskell2010

Data.Bifunctor

Description

Since: 4.8.0.0

Synopsis

- class Bifunctor p where
  - bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
  - first :: (a -> b) -> p a c -> p b c
  - second :: (b -> c) -> p a b -> p a c

# Documentation

class Bifunctor p where

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 id ≡ id

If you supply `first` and `second`, ensure:

    first id ≡ id
    second id ≡ id

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

Since: 4.8.0.0

Minimal complete definition

bimap | first, second

Methods

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

Map over both arguments at the same time.

    bimap f g ≡ first f . second g

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

Map covariantly over the first argument.

    first f ≡ bimap f id

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

Map covariantly over the second argument.

    second ≡ bimap id

Instances

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) |