relude-1.2.0.0: Safe, performant, user-friendly and lightweight Haskell Standard Library
Copyright(c) 2016 Stephen Diehl
(c) 2016-2018 Serokell
(c) 2018-2023 Kowainik
LicenseMIT
MaintainerKowainik <xrom.xkov@gmail.com>
StabilityStable
PortabilityPortable
Safe HaskellSafe
LanguageHaskell2010

Relude.Monad.Either

Description

Utilities to work with Either data type.

Synopsis

Combinators

fromLeft :: a -> Either a b -> a #

Return the contents of a Left-value or a default value otherwise.

Examples

Expand

Basic usage:

>>> fromLeft 1 (Left 3)
3
>>> fromLeft 1 (Right "foo")
1

Since: base-4.10.0.0

fromRight :: b -> Either a b -> b #

Return the contents of a Right-value or a default value otherwise.

Examples

Expand

Basic usage:

>>> fromRight 1 (Right 3)
3
>>> fromRight 1 (Left "foo")
1

Since: base-4.10.0.0

maybeToLeft :: r -> Maybe l -> Either l r Source #

Maps Maybe to Either wrapping default value into Right.

>>> maybeToLeft True (Just "aba")
Left "aba"
>>> maybeToLeft True Nothing
Right True

maybeToRight :: l -> Maybe r -> Either l r Source #

Maps Maybe to Either wrapping default value into Left.

>>> maybeToRight True (Just "aba")
Right "aba"
>>> maybeToRight True Nothing
Left True

leftToMaybe :: Either l r -> Maybe l Source #

Maps left part of Either to Maybe.

>>> leftToMaybe (Left True)
Just True
>>> leftToMaybe (Right "aba")
Nothing

rightToMaybe :: Either l r -> Maybe r Source #

Maps right part of Either to Maybe.

>>> rightToMaybe (Left True)
Nothing
>>> rightToMaybe (Right "aba")
Just "aba"

whenLeft :: Applicative f => a -> Either l r -> (l -> f a) -> f a Source #

Applies given action to Either content if Left is given and returns the result. In case of Right the default value will be returned.

>>> whenLeft "bar" (Left 42) (\a -> "success!" <$ print a)
42
"success!"
>>> whenLeft "bar" (Right 42) (\a -> "success!" <$ print a)
"bar"

whenLeft_ :: Applicative f => Either l r -> (l -> f ()) -> f () Source #

Applies given action to Either content if Left is given.

>>> whenLeft_ (Right 42) putTextLn
>>> whenLeft_ (Left "foo") putTextLn
foo

Monadic combinators

whenLeftM :: Monad m => a -> m (Either l r) -> (l -> m a) -> m a Source #

Monadic version of whenLeft.

>>> whenLeftM "bar" (pure $ Left 42) (\a -> "success!" <$ print a)
42
"success!"
>>> whenLeftM "bar" (pure $ Right 42) (\a -> "success!" <$ print a)
"bar"

whenLeftM_ :: Monad m => m (Either l r) -> (l -> m ()) -> m () Source #

Monadic version of whenLeft_.

>>> whenLeftM_ (pure $ Right 42) putTextLn
>>> whenLeftM_ (pure $ Left "foo") putTextLn
foo

whenRight :: Applicative f => a -> Either l r -> (r -> f a) -> f a Source #

Applies given action to Either content if Right is given and returns the result. In case of Left the default value will be returned.

>>> whenRight "bar" (Left "foo") (\a -> "success!" <$ print a)
"bar"
>>> whenRight "bar" (Right 42) (\a -> "success!" <$ print a)
42
"success!"

whenRight_ :: Applicative f => Either l r -> (r -> f ()) -> f () Source #

Applies given action to Either content if Right is given.

>>> whenRight_ (Left "foo") print
>>> whenRight_ (Right 42) print
42

whenRightM :: Monad m => a -> m (Either l r) -> (r -> m a) -> m a Source #

Monadic version of whenRight.

>>> whenRightM "bar" (pure $ Left "foo") (\a -> "success!" <$ print a)
"bar"
>>> whenRightM "bar" (pure $ Right 42) (\a -> "success!" <$ print a)
42
"success!"

whenRightM_ :: Monad m => m (Either l r) -> (r -> m ()) -> m () Source #

Monadic version of whenRight_.

>>> whenRightM_ (pure $ Left "foo") print
>>> whenRightM_ (pure $ Right 42) print
42

Orphan instances

IsString str => MonadFail (Either str) Source #

For convenient work with MonadFail.

Since: 0.1.0

Instance details

Methods

fail :: String -> Either str a #