{-# 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 :: 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 SL.fromString String s type TextParser a = Parser TextLines a runTextParser :: TextParser a -> Text -> ParseResult a TextLines runTextParser :: TextParser a -> Text -> ParseResult a TextLines runTextParser TextParser a p Text s = Identity (ParseResult a TextLines) -> ParseResult a TextLines forall a. Identity a -> a runIdentity (Identity (ParseResult a TextLines) -> ParseResult a TextLines) -> Identity (ParseResult a TextLines) -> ParseResult a TextLines forall a b. (a -> b) -> a -> b $ TextParser a -> TextLines -> Identity (ParseResult a TextLines) forall s (m :: * -> *) a. ParserT s m a -> s -> m (ParseResult a s) runParserT TextParser a p (TextLines -> Identity (ParseResult a TextLines)) -> TextLines -> Identity (ParseResult a TextLines) forall a b. (a -> b) -> a -> b $ Text -> TextLines TL.fromText Text s