module Result
(
Result (..),
map,
map2,
map3,
map4,
map5,
andThen,
withDefault,
toMaybe,
fromMaybe,
mapError,
)
where
import Basics
import qualified Internal.Shortcut as Shortcut
import Maybe (Maybe (..))
import Prelude (fmap)
import qualified Prelude
data Result error value
= Ok value
| Err error
deriving (Int -> Result error value -> ShowS
[Result error value] -> ShowS
Result error value -> String
(Int -> Result error value -> ShowS)
-> (Result error value -> String)
-> ([Result error value] -> ShowS)
-> Show (Result error value)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall error value.
(Show value, Show error) =>
Int -> Result error value -> ShowS
forall error value.
(Show value, Show error) =>
[Result error value] -> ShowS
forall error value.
(Show value, Show error) =>
Result error value -> String
showList :: [Result error value] -> ShowS
$cshowList :: forall error value.
(Show value, Show error) =>
[Result error value] -> ShowS
show :: Result error value -> String
$cshow :: forall error value.
(Show value, Show error) =>
Result error value -> String
showsPrec :: Int -> Result error value -> ShowS
$cshowsPrec :: forall error value.
(Show value, Show error) =>
Int -> Result error value -> ShowS
Prelude.Show, Result error value -> Result error value -> Bool
(Result error value -> Result error value -> Bool)
-> (Result error value -> Result error value -> Bool)
-> Eq (Result error value)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall error value.
(Eq value, Eq error) =>
Result error value -> Result error value -> Bool
/= :: Result error value -> Result error value -> Bool
$c/= :: forall error value.
(Eq value, Eq error) =>
Result error value -> Result error value -> Bool
== :: Result error value -> Result error value -> Bool
$c== :: forall error value.
(Eq value, Eq error) =>
Result error value -> Result error value -> Bool
Eq)
instance Prelude.Functor (Result error) where
fmap :: (a -> b) -> Result error a -> Result error b
fmap a -> b
func Result error a
result =
case Result error a
result of
Ok a
value -> b -> Result error b
forall error value. value -> Result error value
Ok (a -> b
func a
value)
Err error
error -> error -> Result error b
forall error value. error -> Result error value
Err error
error
instance Prelude.Applicative (Result error) where
pure :: a -> Result error a
pure = a -> Result error a
forall error value. value -> Result error value
Ok
<*> :: Result error (a -> b) -> Result error a -> Result error b
(<*>) Result error (a -> b)
r1 Result error a
r2 =
case (Result error (a -> b)
r1, Result error a
r2) of
(Ok a -> b
func, Ok a
a) -> b -> Result error b
forall error value. value -> Result error value
Ok (a -> b
func a
a)
(Err error
error, Result error a
_) -> error -> Result error b
forall error value. error -> Result error value
Err error
error
(Ok a -> b
_, Err error
error) -> error -> Result error b
forall error value. error -> Result error value
Err error
error
instance Prelude.Monad (Result error) where
>>= :: Result error a -> (a -> Result error b) -> Result error b
(>>=) Result error a
result a -> Result error b
func =
case Result error a
result of
Ok a
value -> a -> Result error b
func a
value
Err error
error -> error -> Result error b
forall error value. error -> Result error value
Err error
error
withDefault :: a -> Result b a -> a
withDefault :: a -> Result b a -> a
withDefault a
fallback Result b a
result =
case Result b a
result of
Ok a
value -> a
value
Err b
_ -> a
fallback
map :: (a -> value) -> Result x a -> Result x value
map :: (a -> value) -> Result x a -> Result x value
map =
(a -> value) -> Result x a -> Result x value
forall (m :: * -> *) a value.
Functor m =>
(a -> value) -> m a -> m value
Shortcut.map
map2 :: (a -> b -> value) -> Result x a -> Result x b -> Result x value
map2 :: (a -> b -> value) -> Result x a -> Result x b -> Result x value
map2 =
(a -> b -> value) -> Result x a -> Result x b -> Result x value
forall (m :: * -> *) a b value.
Applicative m =>
(a -> b -> value) -> m a -> m b -> m value
Shortcut.map2
map3 :: (a -> b -> c -> value) -> Result x a -> Result x b -> Result x c -> Result x value
map3 :: (a -> b -> c -> value)
-> Result x a -> Result x b -> Result x c -> Result x value
map3 =
(a -> b -> c -> value)
-> Result x a -> Result x b -> Result x c -> Result x value
forall (m :: * -> *) a b c value.
Applicative m =>
(a -> b -> c -> value) -> m a -> m b -> m c -> m value
Shortcut.map3
map4 :: (a -> b -> c -> d -> value) -> Result x a -> Result x b -> Result x c -> Result x d -> Result x value
map4 :: (a -> b -> c -> d -> value)
-> Result x a
-> Result x b
-> Result x c
-> Result x d
-> Result x value
map4 =
(a -> b -> c -> d -> value)
-> Result x a
-> Result x b
-> Result x c
-> Result x d
-> Result x value
forall (m :: * -> *) a b c d value.
Applicative m =>
(a -> b -> c -> d -> value) -> m a -> m b -> m c -> m d -> m value
Shortcut.map4
map5 :: (a -> b -> c -> d -> e -> value) -> Result x a -> Result x b -> Result x c -> Result x d -> Result x e -> Result x value
map5 :: (a -> b -> c -> d -> e -> value)
-> Result x a
-> Result x b
-> Result x c
-> Result x d
-> Result x e
-> Result x value
map5 =
(a -> b -> c -> d -> e -> value)
-> Result x a
-> Result x b
-> Result x c
-> Result x d
-> Result x e
-> Result x value
forall (m :: * -> *) a b c d e value.
Applicative m =>
(a -> b -> c -> d -> e -> value)
-> m a -> m b -> m c -> m d -> m e -> m value
Shortcut.map5
andThen :: (a -> Result c b) -> Result c a -> Result c b
andThen :: (a -> Result c b) -> Result c a -> Result c b
andThen =
(a -> Result c b) -> Result c a -> Result c b
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
Shortcut.andThen
mapError :: (a -> b) -> Result a c -> Result b c
mapError :: (a -> b) -> Result a c -> Result b c
mapError a -> b
func Result a c
result =
case Result a c
result of
Ok c
value -> c -> Result b c
forall error value. value -> Result error value
Ok c
value
Err a
error -> b -> Result b c
forall error value. error -> Result error value
Err (a -> b
func a
error)
toMaybe :: Result a b -> Maybe b
toMaybe :: Result a b -> Maybe b
toMaybe Result a b
result =
case Result a b
result of
Ok b
value -> b -> Maybe b
forall a. a -> Maybe a
Just b
value
Err a
_ -> Maybe b
forall a. Maybe a
Nothing
fromMaybe :: a -> Maybe b -> Result a b
fromMaybe :: a -> Maybe b -> Result a b
fromMaybe a
error Maybe b
maybe =
case Maybe b
maybe of
Just b
something -> b -> Result a b
forall error value. value -> Result error value
Ok b
something
Maybe b
Nothing -> a -> Result a b
forall error value. error -> Result error value
Err a
error