-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parallel Parsing Processes -- -- Koen Claessen's PPP, Modified. @package parsek @version 1.0.3.0 module Text.ParserCombinators.Class -- | Parser class class (Monad p, Alternative p) => IsParser p where { type family SymbolOf p; } satisfy :: IsParser p => (SymbolOf p -> Bool) -> p (SymbolOf p) look :: IsParser p => p [SymbolOf p] label :: IsParser p => String -> p a -> p a (<<|>) :: IsParser p => p a -> p a -> p a infixr 3 <<|> -- | Label a parser () :: IsParser p => p a -> String -> p a infix 2 char :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p)) => SymbolOf p -> p (SymbolOf p) noneOf :: (IsParser p, SymbolOf p ~# Char) => [Char] -> p Char oneOf :: (IsParser p, SymbolOf p ~# Char) => [Char] -> p Char spaces :: (IsParser p, SymbolOf p ~# Char) => p () space :: (IsParser p, SymbolOf p ~# Char) => p Char newline :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p), SymbolOf p ~# Char) => p Char tab :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p), SymbolOf p ~# Char) => p Char upper :: (IsParser p, SymbolOf p ~# Char) => p Char lower :: (IsParser p, SymbolOf p ~# Char) => p Char alphaNum :: (IsParser p, SymbolOf p ~# Char) => p Char letter :: (IsParser p, SymbolOf p ~# Char) => p Char digit :: (IsParser p, SymbolOf p ~# Char) => p Char hexDigit :: (IsParser p, SymbolOf p ~# Char) => p Char octDigit :: (IsParser p, SymbolOf p ~# Char) => p Char anySymbol :: IsParser p => p (SymbolOf p) string :: (IsParser p, SymbolOf p ~ Char) => String -> p String choice :: Alternative f => [f a] -> f a option :: Alternative f => a -> f a -> f a between :: Applicative m => m x -> m y -> m a -> m a -- | Greedy repetition: match as many occurences as possible of the -- argument. manyGreedy :: IsParser m => m a -> m [a] skipMany1 :: Alternative f => f a -> f () skipMany :: Alternative f => f a -> f () sepBy :: Alternative f => f a1 -> f a2 -> f [a1] sepBy1 :: Alternative f => f a1 -> f a2 -> f [a1] count :: Applicative m => Int -> m a -> m [a] chainr :: (Alternative f, Monad f) => f a -> f (a -> a -> a) -> a -> f a chainl :: (Alternative f, Monad f) => f a -> f (a -> a -> a) -> a -> f a chainr1 :: (Monad f, Alternative f) => f t -> f (t -> t -> t) -> f t chainl1 :: (Alternative m, Monad m) => m b -> m (b -> b -> b) -> m b munch :: IsParser m => (SymbolOf m -> Bool) -> m [SymbolOf m] munch1 :: IsParser m => (SymbolOf m -> Bool) -> m [SymbolOf m] endOfFile :: IsParser p => p () -- | This module provides the Parsek library developed by Koen -- Claessen in his functional pearl article Parallel Parsing -- Processes, Journal of Functional Programming, 14(6), 741-757, -- Cambridge University Press, 2004: -- -- http://www.cs.chalmers.se/~koen/pubs/entry-jfp04-parser.html module Text.ParserCombinators.Parsek data Parser s a -- | An intersection (nesting) of things currently expected type Expect s = [(String, Maybe s)] type ParseMethod s a r = P s a -> [s] -> ParseResult s r type ParseResult s r = Either (Err s) r mapErrR :: (s -> s') -> ParseResult s r -> ParseResult s' r parseFromFile :: Parser Char a -> ParseMethod Char a r -> FilePath -> IO (ParseResult Char r) parse :: Parser s a -> ParseMethod s a r -> [s] -> ParseResult s r shortestResult :: ParseMethod s a a longestResult :: ParseMethod s a a longestResults :: ParseMethod s a [a] allResults :: ParseMethod s a [a] allResultsStaged :: ParseMethod s a [[a]] completeResults :: ParseMethod s a [a] shortestResultWithLeftover :: ParseMethod s a (a, [s]) longestResultWithLeftover :: ParseMethod s a (a, [s]) longestResultsWithLeftover :: ParseMethod s a ([a], Maybe [s]) allResultsWithLeftover :: ParseMethod s a [(a, [s])] -- | Conditional failure of Alternative computations. Defined by -- --
--   guard True  = pure ()
--   guard False = empty
--   
-- --

Examples

-- -- Common uses of guard include conditionally signaling an error -- in an error monad and conditionally rejecting the current choice in an -- Alternative-based parser. -- -- As an example of signaling an error in the error monad Maybe, -- consider a safe division function safeDiv x y that returns -- Nothing when the denominator y is zero and -- Just (x `div` y) otherwise. For example: -- --
--   >>> safeDiv 4 0
--   Nothing
--   >>> safeDiv 4 2
--   Just 2
--   
-- -- A definition of safeDiv using guards, but not guard: -- --
--   safeDiv :: Int -> Int -> Maybe Int
--   safeDiv x y | y /= 0    = Just (x `div` y)
--               | otherwise = Nothing
--   
-- -- A definition of safeDiv using guard and Monad -- do-notation: -- --
--   safeDiv :: Int -> Int -> Maybe Int
--   safeDiv x y = do
--     guard (y /= 0)
--     return (x `div` y)
--   
guard :: Alternative f => Bool -> f () -- | forM_ is mapM_ with its arguments flipped. For a version -- that doesn't ignore the results see forM. -- -- As of base 4.8.0.0, forM_ is just for_, specialized to -- Monad. forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () -- | In many situations, the liftM operations can be replaced by -- uses of ap, which promotes function application. -- --
--   return f `ap` x1 `ap` ... `ap` xn
--   
-- -- is equivalent to -- --
--   liftMn f x1 x2 ... xn
--   
ap :: Monad m => m (a -> b) -> m a -> m b -- | Monads that also support choice and failure. class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type) -- | The identity of mplus. It should also satisfy the equations -- --
--   mzero >>= f  =  mzero
--   v >> mzero   =  mzero
--   
-- -- The default definition is -- --
--   mzero = empty
--   
mzero :: MonadPlus m => m a -- | An associative operation. The default definition is -- --
--   mplus = (<|>)
--   
mplus :: MonadPlus m => m a -> m a -> m a instance GHC.Base.Functor (Text.ParserCombinators.Parsek.Parser s) instance GHC.Base.Monad (Text.ParserCombinators.Parsek.Parser s) instance Control.Monad.Fail.MonadFail (Text.ParserCombinators.Parsek.Parser s) instance GHC.Base.MonadPlus (Text.ParserCombinators.Parsek.Parser s) instance GHC.Base.Applicative (Text.ParserCombinators.Parsek.Parser s) instance GHC.Base.Alternative (Text.ParserCombinators.Parsek.Parser s) instance Text.ParserCombinators.Class.IsParser (Text.ParserCombinators.Parsek.Parser s) module Text.ParserCombinators.Parsek.Position -- | Conditional failure of Alternative computations. Defined by -- --
--   guard True  = pure ()
--   guard False = empty
--   
-- --

Examples

-- -- Common uses of guard include conditionally signaling an error -- in an error monad and conditionally rejecting the current choice in an -- Alternative-based parser. -- -- As an example of signaling an error in the error monad Maybe, -- consider a safe division function safeDiv x y that returns -- Nothing when the denominator y is zero and -- Just (x `div` y) otherwise. For example: -- --
--   >>> safeDiv 4 0
--   Nothing
--   >>> safeDiv 4 2
--   Just 2
--   
-- -- A definition of safeDiv using guards, but not guard: -- --
--   safeDiv :: Int -> Int -> Maybe Int
--   safeDiv x y | y /= 0    = Just (x `div` y)
--               | otherwise = Nothing
--   
-- -- A definition of safeDiv using guard and Monad -- do-notation: -- --
--   safeDiv :: Int -> Int -> Maybe Int
--   safeDiv x y = do
--     guard (y /= 0)
--     return (x `div` y)
--   
guard :: Alternative f => Bool -> f () -- | Replace all locations in the input with the same value. The default -- definition is fmap . const, but this may be -- overridden with a more efficient version. (<$) :: Functor f => a -> f b -> f a infixl 4 <$ -- | A functor with application, providing operations to -- -- -- -- A minimal complete definition must include implementations of -- pure and of either <*> or liftA2. If it -- defines both, then they must behave the same as their default -- definitions: -- --
--   (<*>) = liftA2 id
--   
-- --
--   liftA2 f x y = f <$> x <*> y
--   
-- -- Further, any definition must satisfy the following: -- -- -- -- The other methods have the following default definitions, which may be -- overridden with equivalent specialized implementations: -- -- -- -- As a consequence of these laws, the Functor instance for -- f will satisfy -- -- -- -- It may be useful to note that supposing -- --
--   forall x y. p (q x y) = f x . g y
--   
-- -- it follows from the above that -- --
--   liftA2 p (liftA2 q u v) = liftA2 f u . liftA2 g v
--   
-- -- If f is also a Monad, it should satisfy -- -- -- -- (which implies that pure and <*> satisfy the -- applicative functor laws). class Functor f => Applicative (f :: Type -> Type) -- | Lift a value. pure :: Applicative f => a -> f a -- | Sequential application. -- -- A few functors support an implementation of <*> that is -- more efficient than the default one. (<*>) :: Applicative f => f (a -> b) -> f a -> f b -- | Lift a binary function to actions. -- -- Some functors support an implementation of liftA2 that is more -- efficient than the default one. In particular, if fmap is an -- expensive operation, it is likely better to use liftA2 than to -- fmap over the structure and then use <*>. liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c -- | Sequence actions, discarding the value of the first argument. (*>) :: Applicative f => f a -> f b -> f b -- | Sequence actions, discarding the value of the second argument. (<*) :: Applicative f => f a -> f b -> f a infixl 4 <*> infixl 4 *> infixl 4 <* -- | One or none. optional :: Alternative f => f a -> f (Maybe a) newtype WrappedMonad (m :: Type -> Type) a WrapMonad :: m a -> WrappedMonad a [unwrapMonad] :: WrappedMonad a -> m a newtype WrappedArrow (a :: Type -> Type -> Type) b c WrapArrow :: a b c -> WrappedArrow b c [unwrapArrow] :: WrappedArrow b c -> a b c -- | Lists, but with an Applicative functor based on zipping. newtype ZipList a ZipList :: [a] -> ZipList a [getZipList] :: ZipList a -> [a] -- | The Const functor. newtype Const a (b :: k) :: forall k. () => Type -> k -> Type Const :: a -> Const a [getConst] :: Const a -> a -- | forM_ is mapM_ with its arguments flipped. For a version -- that doesn't ignore the results see forM. -- -- As of base 4.8.0.0, forM_ is just for_, specialized to -- Monad. forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () -- | An infix synonym for fmap. -- -- The name of this operator is an allusion to $. Note the -- similarities between their types: -- --
--    ($)  ::              (a -> b) ->   a ->   b
--   (<$>) :: Functor f => (a -> b) -> f a -> f b
--   
-- -- Whereas $ is function application, <$> is -- function application lifted over a Functor. -- --

Examples

-- -- Convert from a Maybe Int to a -- Maybe String using show: -- --
--   >>> show <$> Nothing
--   Nothing
--   
--   >>> show <$> Just 3
--   Just "3"
--   
-- -- Convert from an Either Int Int to -- an Either Int String using -- show: -- --
--   >>> show <$> Left 17
--   Left 17
--   
--   >>> show <$> Right 17
--   Right "17"
--   
-- -- Double each element of a list: -- --
--   >>> (*2) <$> [1,2,3]
--   [2,4,6]
--   
-- -- Apply even to the second element of a pair: -- --
--   >>> even <$> (2,2)
--   (2,True)
--   
(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 <$> -- | In many situations, the liftM operations can be replaced by -- uses of ap, which promotes function application. -- --
--   return f `ap` x1 `ap` ... `ap` xn
--   
-- -- is equivalent to -- --
--   liftMn f x1 x2 ... xn
--   
ap :: Monad m => m (a -> b) -> m a -> m b -- | Lift a ternary function to actions. liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d -- | Lift a function to actions. This function may be used as a value for -- fmap in a Functor instance. liftA :: Applicative f => (a -> b) -> f a -> f b -- | A variant of <*> with the arguments reversed. (<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 <**> -- | A monoid on applicative functors. -- -- If defined, some and many should be the least solutions -- of the equations: -- -- class Applicative f => Alternative (f :: Type -> Type) -- | The identity of <|> empty :: Alternative f => f a -- | An associative binary operation (<|>) :: Alternative f => f a -> f a -> f a -- | One or more. some :: Alternative f => f a -> f [a] -- | Zero or more. many :: Alternative f => f a -> f [a] infixl 3 <|> -- | Monads that also support choice and failure. class (Alternative m, Monad m) => MonadPlus (m :: Type -> Type) -- | The identity of mplus. It should also satisfy the equations -- --
--   mzero >>= f  =  mzero
--   v >> mzero   =  mzero
--   
-- -- The default definition is -- --
--   mzero = empty
--   
mzero :: MonadPlus m => m a -- | An associative operation. The default definition is -- --
--   mplus = (<|>)
--   
mplus :: MonadPlus m => m a -> m a -> m a -- | Parser class class (Monad p, Alternative p) => IsParser p where { type family SymbolOf p; } satisfy :: IsParser p => (SymbolOf p -> Bool) -> p (SymbolOf p) look :: IsParser p => p [SymbolOf p] label :: IsParser p => String -> p a -> p a (<<|>) :: IsParser p => p a -> p a -> p a infixr 3 <<|> -- | Label a parser () :: IsParser p => p a -> String -> p a infix 2 char :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p)) => SymbolOf p -> p (SymbolOf p) noneOf :: (IsParser p, SymbolOf p ~# Char) => [Char] -> p Char oneOf :: (IsParser p, SymbolOf p ~# Char) => [Char] -> p Char spaces :: (IsParser p, SymbolOf p ~# Char) => p () space :: (IsParser p, SymbolOf p ~# Char) => p Char newline :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p), SymbolOf p ~# Char) => p Char tab :: (IsParser p, Eq (SymbolOf p), Show (SymbolOf p), SymbolOf p ~# Char) => p Char upper :: (IsParser p, SymbolOf p ~# Char) => p Char lower :: (IsParser p, SymbolOf p ~# Char) => p Char alphaNum :: (IsParser p, SymbolOf p ~# Char) => p Char letter :: (IsParser p, SymbolOf p ~# Char) => p Char digit :: (IsParser p, SymbolOf p ~# Char) => p Char hexDigit :: (IsParser p, SymbolOf p ~# Char) => p Char octDigit :: (IsParser p, SymbolOf p ~# Char) => p Char anySymbol :: IsParser p => p (SymbolOf p) string :: (IsParser p, SymbolOf p ~ Char) => String -> p String choice :: Alternative f => [f a] -> f a option :: Alternative f => a -> f a -> f a between :: Applicative m => m x -> m y -> m a -> m a -- | Greedy repetition: match as many occurences as possible of the -- argument. manyGreedy :: IsParser m => m a -> m [a] skipMany1 :: Alternative f => f a -> f () skipMany :: Alternative f => f a -> f () sepBy :: Alternative f => f a1 -> f a2 -> f [a1] sepBy1 :: Alternative f => f a1 -> f a2 -> f [a1] count :: Applicative m => Int -> m a -> m [a] chainr :: (Alternative f, Monad f) => f a -> f (a -> a -> a) -> a -> f a chainl :: (Alternative f, Monad f) => f a -> f (a -> a -> a) -> a -> f a chainr1 :: (Monad f, Alternative f) => f t -> f (t -> t -> t) -> f t chainl1 :: (Alternative m, Monad m) => m b -> m (b -> b -> b) -> m b munch :: IsParser m => (SymbolOf m -> Bool) -> m [SymbolOf m] munch1 :: IsParser m => (SymbolOf m -> Bool) -> m [SymbolOf m] endOfFile :: IsParser p => p () type ParseResult s r = Either (Err s) r type ParseMethod s a r = P s a -> [s] -> ParseResult s r -- | An intersection (nesting) of things currently expected type Expect s = [(String, Maybe s)] mapErrR :: (s -> s') -> ParseResult s r -> ParseResult s' r shortestResult :: ParseMethod s a a longestResult :: ParseMethod s a a longestResults :: ParseMethod s a [a] allResultsStaged :: ParseMethod s a [[a]] allResults :: ParseMethod s a [a] completeResults :: ParseMethod s a [a] shortestResultWithLeftover :: ParseMethod s a (a, [s]) longestResultWithLeftover :: ParseMethod s a (a, [s]) longestResultsWithLeftover :: ParseMethod s a ([a], Maybe [s]) allResultsWithLeftover :: ParseMethod s a [(a, [s])] data SourcePos Loc :: !FilePath -> !Int -> !Int -> SourcePos [sourceName] :: SourcePos -> !FilePath [sourceLine] :: SourcePos -> !Int [sourceCol] :: SourcePos -> !Int EOF :: SourcePos data Parser a getPosition :: Parser SourcePos parse :: FilePath -> Parser a -> (forall s. ParseMethod s a r) -> String -> ParseResult SourcePos r parseFromFile :: Parser a -> (forall s. ParseMethod s a r) -> FilePath -> IO (ParseResult SourcePos r) maybePosToPos :: Maybe SourcePos -> SourcePos anyChar :: IsParser p => p (SymbolOf p) instance GHC.Base.MonadPlus Text.ParserCombinators.Parsek.Position.Parser instance GHC.Base.Functor Text.ParserCombinators.Parsek.Position.Parser instance GHC.Base.Monad Text.ParserCombinators.Parsek.Position.Parser instance GHC.Base.Applicative Text.ParserCombinators.Parsek.Position.Parser instance GHC.Base.Alternative Text.ParserCombinators.Parsek.Position.Parser instance GHC.Classes.Eq Text.ParserCombinators.Parsek.Position.SourcePos instance GHC.Classes.Ord Text.ParserCombinators.Parsek.Position.SourcePos instance Text.ParserCombinators.Class.IsParser Text.ParserCombinators.Parsek.Position.Parser instance GHC.Show.Show Text.ParserCombinators.Parsek.Position.SourcePos