module Control.Monad.Parser
  ( module Control.Monad.Parser.Class,
    ParserT (..),
    ParseResult (..),
    ParseError (..),
    ErrorDesc (..),
    Parser,
    StringParser,
    runParser,
    runStringParser,
  )
where

import Control.Monad.Identity
import Control.Monad.Parser.Class
import Control.Monad.Trans.Parser
import Data.Stream.StringLines (StringLines)
import qualified Data.Stream.StringLines as StringLines

type Parser s a = ParserT s Identity a

runParser :: Parser s a -> s -> ParseResult a s
runParser :: Parser s a -> s -> ParseResult a s
runParser Parser s a
p = Identity (ParseResult a s) -> ParseResult a s
forall a. Identity a -> a
runIdentity (Identity (ParseResult a s) -> ParseResult a s)
-> (s -> Identity (ParseResult a s)) -> s -> ParseResult a s
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser s a -> s -> Identity (ParseResult a s)
forall s (m :: * -> *) a. ParserT s m a -> s -> m (ParseResult a s)
runParserT Parser s a
p

type StringParser a = Parser StringLines a

runStringParser :: StringParser a -> String -> ParseResult a StringLines
runStringParser :: StringParser a -> String -> ParseResult a StringLines
runStringParser StringParser a
p String
s = Identity (ParseResult a StringLines) -> ParseResult a StringLines
forall a. Identity a -> a
runIdentity (Identity (ParseResult a StringLines) -> ParseResult a StringLines)
-> Identity (ParseResult a StringLines)
-> ParseResult a StringLines
forall a b. (a -> b) -> a -> b
$ StringParser a
-> StringLines -> Identity (ParseResult a StringLines)
forall s (m :: * -> *) a. ParserT s m a -> s -> m (ParseResult a s)
runParserT StringParser a
p (StringLines -> Identity (ParseResult a StringLines))
-> StringLines -> Identity (ParseResult a StringLines)
forall a b. (a -> b) -> a -> b
$ String -> StringLines
StringLines.fromString String
s