module Text.ParserCombinators.Poly.Result
(
Result(..)
, resultToEither
) where
data Result z a = Success z a
| Failure z String
| Committed (Result z a)
instance Functor (Result z) where
fmap :: (a -> b) -> Result z a -> Result z b
fmap a -> b
f (Success z
z a
a) = z -> b -> Result z b
forall z a. z -> a -> Result z a
Success z
z (a -> b
f a
a)
fmap a -> b
f (Failure z
z String
e) = z -> String -> Result z b
forall z a. z -> String -> Result z a
Failure z
z String
e
fmap a -> b
f (Committed Result z a
r) = Result z b -> Result z b
forall z a. Result z a -> Result z a
Committed ((a -> b) -> Result z a -> Result z b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f Result z a
r)
resultToEither :: Result z a -> (Either String a, z)
resultToEither :: Result z a -> (Either String a, z)
resultToEither (Success z
z a
a) = (a -> Either String a
forall a b. b -> Either a b
Right a
a, z
z)
resultToEither (Failure z
z String
e) = (String -> Either String a
forall a b. a -> Either a b
Left String
e, z
z)
resultToEither (Committed Result z a
r) = Result z a -> (Either String a, z)
forall z a. Result z a -> (Either String a, z)
resultToEither Result z a
r