A generic structure for a type with two possibilities: a Left a or
a Right b.
An Either is right-biased, so most operations will be applied to
the Right.
This is similar to Result type in core, but is more generic.
If your looking for a data type to do error handling, you should
use Result instead.
Apply a function to an Either. If the argument is Right, it
will be converted. If the argument is an Left, the same left value
will propogate through.
map ((+) 1) <| Left "Hello" == Left "Hello"
map ((+) 1) <| Right 2 == Right 3Apply a function to two eithers, if both arguments are Right.
If not, the first argument which is a Left will propagate through.
Also known as liftA2.
map2 (+) (Left "Hello") <| Left "World" == Left "Hello"
map2 (+) (Left "Hello") <| Right 3 == Left "Hello"
map2 (+) (Right 2) <| Left "World" == Left "World"
map2 (+) (Right 2) <| Right 3 == Right 5Like map2, but with 3 eithers. Also known as liftA3
Apply a function to the Left of an Either.
mapLeft ((+) 1) <| Left 2 == Left 3
mapLeft ((+) 1) <| Right 2 == Right 2Alias for map.
Apply the first argument function to a Left and the second
argument function to a Right of an Either.
mapBoth (flip (++) "!") ((+) 1) <| Left "Hello" == Left "Hello!"
mapBoth (flip (++) "!") ((+) 1) <| Right 2 == Right 3Apply a function to Right value. If argument was a Left use the
default value. Equivalent to Either.map >> Either.fromRight.
mapDefault 99 ((+) 1) <| Left "Hello" == 99
mapDefault 99 ((+) 1) <| Right 2 == 3Create a singleton from a value to an Either with a Right
of the same type. Also known as pure.
singleton 2 == Right 2Apply the function that is inside Either to a value that is inside
Either. Return the result inside Either. If one of the Either
arguments is Left x, return Left x. Also known as apply.
Left "Hello" `andMap` Left "World" == Left "Hello"
Left "Hello" `andMap` Right 2 == Left "Hello"
Right ((+) 1) `andMap` Left "World" == Left "World"
Right ((+) 1) `andMap` Right 2 == Right 3Chain together in many computations that will stop computing if
a chain is on a Left. Also known as bind.
Left "Hello" `andThen` ((+) 1 >> Right) == Left "Hello"
Right 2 `andThen` ((+) 1 >> Right) == Right 3Converts a List of Either a x to a List of a.
lefts [ Left "Hello", Right 2 ] == [ "Hello" ]Converts a List of Either x b to a List of b.
rights [ Left "Hello", Right 2 ] == [ 2 ]Converts a List of Either a b, into a tuple2 where
the first value is a List a and the second is List b.
partition [ Left "Hello", Right 2 ] == ( [ "Hello" ], [ 2 ] )Maybe get the Right side of an Either.
toMaybe <| Left "World" == Nothing
toMaybe <| Right 2 == Just 2Maybe get the Left side of an Either.
leftToMaybe <| Left "World" == Just "World"
leftToMaybe <| Right 2 == NothingAlias for toMaybe.
Convert from a Maybe to Either with a default value
for Left for Nothing.
fromMaybe "Hello" <| Just 2 == Right 2
fromMaybe "Hello" Nothing == Left "Hello"Convert from a Maybe to Either with a default value
for Right for Nothing.
leftFromMaybe 3 <| Just "World" == Left "World"
leftFromMaybe 3 Nothing == Right 3Alias for fromMaybe.
Convert from Either to Result.
toResult <| Left "World" == Err "World"
toResult <| Right 2 == Ok 2Convert from Result to Either.
fromResult <| Err "World" == Left "World"
fromResult <| Ok 2 == Right 2Returns True if argument is Left _
isLeft <| Left "World" == True
isLeft <| Right 2 == FalseReturns True if argument is Right _
isRight <| Left "World" == False
isRight <| Right 2 == TrueExtract left value or a default.
fromLeft "World" <| Left "Hello" == "Hello"
fromLeft "World" <| Right 2 == "World"Extract right value or a default.
fromRight 3 <| Left "Hello" == 3
fromRight 3 <| Right 2 == 2Alias for fromRight
Given a function for both Left and Right to to type a generic
type c, collapse down the Either to a value of that type.
elim identity toString <| Left "World" == "World"
elim identity toString <| Right 2 == "2"Alias for elim.
Swap the Left and Right sides of an Either.
swap <| Left "World" == Right "World"
swap <| Right 2 == Left 2