module Result
(
Result (..),
map,
map2,
map3,
map4,
map5,
andThen,
withDefault,
toMaybe,
fromMaybe,
mapError,
)
where
import Basics
import GHC.Generics (Generic)
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
$cshowsPrec :: forall error value.
(Show value, Show error) =>
Int -> Result error value -> ShowS
showsPrec :: Int -> Result error value -> ShowS
$cshow :: forall error value.
(Show value, Show error) =>
Result error value -> String
show :: Result error value -> String
$cshowList :: forall error value.
(Show value, Show error) =>
[Result error value] -> ShowS
showList :: [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
$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
/= :: Result error value -> Result error value -> Bool
Eq, (forall x. Result error value -> Rep (Result error value) x)
-> (forall x. Rep (Result error value) x -> Result error value)
-> Generic (Result error value)
forall x. Rep (Result error value) x -> Result error value
forall x. Result error value -> Rep (Result error value) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall error value x.
Rep (Result error value) x -> Result error value
forall error value x.
Result error value -> Rep (Result error value) x
$cfrom :: forall error value x.
Result error value -> Rep (Result error value) x
from :: forall x. Result error value -> Rep (Result error value) x
$cto :: forall error value x.
Rep (Result error value) x -> Result error value
to :: forall x. Rep (Result error value) x -> Result error value
Generic)
instance Prelude.Functor (Result error) where
fmap :: forall a b. (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 :: forall a. a -> Result error a
pure = a -> Result error a
forall error value. value -> Result error value
Ok
<*> :: forall a b.
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
>>= :: forall a b.
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 :: forall a b. 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 :: forall a value x. (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 :: forall a b value x.
(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 :: forall a b c value x.
(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 :: forall a b c d value x.
(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 :: forall a b c d e value x.
(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 :: forall a c b. (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 :: forall a b c. (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 :: forall a b. 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 :: forall a b. 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