happy-meta-0.1.1: src/ParseMonad.lhs
-----------------------------------------------------------------------------
The parser monad.
(c) 2001 Simon Marlow
-----------------------------------------------------------------------------
> module ParseMonad where
> data ParseResult a = OkP a | FailP String
> newtype P a = P (String -> Int -> ParseResult a)
> runP :: P a -> String -> Int -> ParseResult a
> runP (P f) = f
> lineP :: P Int
> lineP = P $ \_ l -> OkP l
> instance Monad P where
> return m = P $ \ _ _ -> OkP m
> m >>= k = P $ \s l -> case runP m s l of
> OkP a -> runP (k a) s l
> FailP err -> FailP err
> fail s = P $ \ _ _ -> FailP s