comparse-0.2.0.0: Control/Monad/Parser.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeFamilies #-}
module Control.Monad.Parser
( module Control.Monad.Parser.Class,
ParserT (..),
ParseResult (..),
ParseError (..),
ErrorDesc (..),
Parser,
StringParser,
ParserOf,
CharParser,
runParser,
runStringParser,
runTextParser,
)
where
import Control.Monad.Identity
import Control.Monad.Parser.Class
import Control.Monad.Trans.Parser
import Data.Stream (Stream (Item))
import Data.Stream.StringLines (StringLines)
import qualified Data.Stream.StringLines as SL
import Data.Stream.TextLines
import qualified Data.Stream.TextLines as TL
import Data.Text (Text)
type ParserOf i p = (MonadParser p, Item (Input p) ~ i)
type CharParser p = ParserOf Char p
type Parser s a = ParserT s Identity a
runParser :: Parser s a -> s -> ParseResult a s
runParser p = runIdentity . runParserT p
type StringParser a = Parser StringLines a
runStringParser :: StringParser a -> String -> ParseResult a StringLines
runStringParser p s = runIdentity $ runParserT p $ SL.fromString s
type TextParser a = Parser TextLines a
runTextParser :: TextParser a -> Text -> ParseResult a TextLines
runTextParser p s = runIdentity $ runParserT p $ TL.fromText s