module Antelude.Either
( Either (..)
, Either.either
, Either.isLeft
, Either.isRight
, filterLefts
, filterRights
, fromMaybe
, fromResult
, leftWithDefault
, mapLeft
, mapRight
, partition
, rightWithDefault
, swap
) where
import safe Antelude.Internal.TypesClasses
( Either (..)
, List
, Maybe (..)
, Result (..)
)
import safe qualified Data.Either as Either
fromResult :: Result err ok -> Either err ok
fromResult :: forall err ok. Result err ok -> Either err ok
fromResult = \case
Err err
err -> err -> Either err ok
forall a b. a -> Either a b
Left err
err
Ok ok
ok -> ok -> Either err ok
forall a b. b -> Either a b
Right ok
ok
fromMaybe :: Maybe a -> Either () a
fromMaybe :: forall a. Maybe a -> Either () a
fromMaybe = \case
Just a
a -> a -> Either () a
forall a b. b -> Either a b
Right a
a
Maybe a
Nothing -> () -> Either () a
forall a b. a -> Either a b
Left ()
mapLeft :: (left -> newLeft) -> Either left right -> Either newLeft right
mapLeft :: forall left newLeft right.
(left -> newLeft) -> Either left right -> Either newLeft right
mapLeft left -> newLeft
leftFn (Left left
left) = newLeft -> Either newLeft right
forall a b. a -> Either a b
Left (left -> newLeft
leftFn left
left)
mapLeft left -> newLeft
_ (Right right
right) = right -> Either newLeft right
forall a b. b -> Either a b
Right right
right
mapRight :: (right -> newRight) -> Either left right -> Either left newRight
mapRight :: forall right newRight left.
(right -> newRight) -> Either left right -> Either left newRight
mapRight right -> newRight
rightFn (Right right
right) = newRight -> Either left newRight
forall a b. b -> Either a b
Right (right -> newRight
rightFn right
right)
mapRight right -> newRight
_ (Left left
left) = left -> Either left newRight
forall a b. a -> Either a b
Left left
left
swap :: Either left right -> Either right left
swap :: forall left right. Either left right -> Either right left
swap (Left left
a) = left -> Either right left
forall a b. b -> Either a b
Right left
a
swap (Right right
a) = right -> Either right left
forall a b. a -> Either a b
Left right
a
leftWithDefault :: a -> Either a b -> a
leftWithDefault :: forall a b. a -> Either a b -> a
leftWithDefault a
dflt = \case
Left a
a -> a
a
Right b
_ -> a
dflt
rightWithDefault :: b -> Either a b -> b
rightWithDefault :: forall b a. b -> Either a b -> b
rightWithDefault b
dflt = \case
Left a
_ -> b
dflt
Right b
b -> b
b
partition :: List (Either left right) -> (List left, List right)
partition :: forall left right.
List (Either left right) -> (List left, List right)
partition = [Either left right] -> ([left], [right])
forall left right.
List (Either left right) -> (List left, List right)
Either.partitionEithers
filterLefts :: List (Either left right) -> List left
filterLefts :: forall left right. List (Either left right) -> List left
filterLefts = [Either left right] -> [left]
forall left right. List (Either left right) -> List left
Either.lefts
filterRights :: List (Either left right) -> List right
filterRights :: forall left right. List (Either left right) -> List right
filterRights = [Either left right] -> [right]
forall left right. List (Either left right) -> List right
Either.rights