base-4.7.0.2: Basic libraries

Copyright | (c) The University of Glasgow 2001
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | portable
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Either

Description

The Either type, and associated operations.

Synopsis

- data Either a b
  - = Left a
  - | Right b
- either :: (a -> c) -> (b -> c) -> Either a b -> c
- lefts :: [Either a b] -> [a]
- rights :: [Either a b] -> [b]
- isLeft :: Either a b -> Bool
- isRight :: Either a b -> Bool
- partitionEithers :: [Either a b] -> ([a], [b])

# Documentation

data Either a b

The `Either` type represents values with two possibilities: a value of type ``Either` a b` is either ``Left` a` or ``Right` b`.

The `Either` type is sometimes used to represent a value which is either correct or an error; by convention, the `Left` constructor is used to hold an error value and the `Right` constructor is used to hold a correct value (mnemonic: "right" also means "correct").

Constructors

Left a |
Right b |

Instances

Monad (Either e) |
Functor (Either a) |
MonadFix (Either e) |
Applicative (Either e) |
Foldable (Either a) |
Traversable (Either a) |
Generic1 (Either a) |
(Eq a, Eq b) => Eq (Either a b) |
(Data a, Data b) => Data (Either a b) |
(Ord a, Ord b) => Ord (Either a b) |
(Read a, Read b) => Read (Either a b) |
(Show a, Show b) => Show (Either a b) |
Generic (Either a b) |
Typeable (* -> * -> *) Either |
type Rep1 (Either a) |
type Rep (Either a b) |
type (==) (Either k k1) a b |

either :: (a -> c) -> (b -> c) -> Either a b -> c

Case analysis for the `Either` type. If the value is ``Left` a`, apply the first function to `a`; if it is ``Right` b`, apply the second function to `b`.

lefts :: [Either a b] -> [a]

Extracts from a list of `Either` all the `Left` elements All the `Left` elements are extracted in order.

rights :: [Either a b] -> [b]

Extracts from a list of `Either` all the `Right` elements All the `Right` elements are extracted in order.

isLeft :: Either a b -> Bool

Return `True` if the given value is a `Left`-value, `False` otherwise.

Since: 4.7.0.0

isRight :: Either a b -> Bool

Return `True` if the given value is a `Right`-value, `False` otherwise.

Since: 4.7.0.0

partitionEithers :: [Either a b] -> ([a], [b])

Partitions a list of `Either` into two lists All the `Left` elements are extracted, in order, to the first component of the output. Similarly the `Right` elements are extracted to the second component of the output.