simple-parser-0.2.0: src/SimpleParser/Result.hs
module SimpleParser.Result
( ParseResult (..)
, ParseValue (..)
, parseSuccessResult
, parseErrorResult
, parseValue
) where
-- | Strict 'Either' for parse results.
data ParseValue e a =
ParseError !e
| ParseSuccess !a
deriving (Eq, Show, Functor, Foldable, Traversable)
parseValue :: (e -> r) -> (a -> r) -> ParseValue e a -> r
parseValue onError onSuccess value =
case value of
ParseError e -> onError e
ParseSuccess a -> onSuccess a
-- | Strict pair of parse result and state at the time it was yielded.
data ParseResult e s a = ParseResult
{ prValue :: !(ParseValue e a)
, prState :: !s
} deriving (Eq, Show, Functor, Foldable, Traversable)
parseSuccessResult :: a -> s -> ParseResult e s a
parseSuccessResult = ParseResult . ParseSuccess
parseErrorResult :: e -> s -> ParseResult e s a
parseErrorResult = ParseResult . ParseError