module ParseMonad where
import Control.Monad.Reader
type ParseResult = Either String
type P a = ReaderT (String, Int) ParseResult a
mkP :: (String -> Int -> ParseResult a) -> P a
mkP = ReaderT . uncurry
runP :: P a -> String -> Int -> ParseResult a
runP f s l = runReaderT f (s, l)
lineP :: P Int
lineP = asks snd >>= return