packages feed

happy-meta-0.2.0.2: src/ParseMonad.lhs












> 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