    {-# LANGUAGE Safe #-}

    {-|
    Module      :  Text.Parsec
    Copyright   :  (c) Daan Leijen 1999-2001, (c) Paolo Martini 2007
    License     :  BSD-style (see the LICENSE file)

    Maintainer  :  aslatter@gmail.com
    Stability   :  provisional
    Portability :  portable

    This module includes everything you need to get started writing a
    parser.

    By default this module is set up to parse character data. If you'd like
    to parse the result of your own tokenizer you should start with the following
    imports:

    @
     import Text.Parsec.Prim
     import Text.Parsec.Combinator
    @

    Then you can implement your own version of 'satisfy' on top of the 'tokenPrim'
    primitive.

    -}

    module Text.Parsec
        ( -- * Parsers
          ParsecT
        , Parsec
        , token
        , tokens
        , runParserT
        , runParser
        , parse
        , parseTest
        , getPosition
        , getInput
        , getState
        , putState
        , modifyState
         -- * Combinators
        , (<|>)
        , (<?>)
        , label
        , labels
        , try
        , unexpected
        , choice
        , many
        , many1
        , skipMany
        , skipMany1
        , count
        , between
        , option
        , optionMaybe
        , optional
        , sepBy
        , sepBy1
        , endBy
        , endBy1
        , sepEndBy
        , sepEndBy1
        , chainl
        , chainl1
        , chainr
        , chainr1
        , eof
        , notFollowedBy
        , manyTill
        , lookAhead
        , anyToken
         -- * Character Parsing
        , module Text.Parsec.Char
         -- * Error messages
        , ParseError
        , errorPos
         -- * Position
        , SourcePos
        , SourceName, Line, Column
        , sourceName, sourceLine, sourceColumn
        , incSourceLine, incSourceColumn
        , setSourceLine, setSourceColumn, setSourceName
         -- * Debugging
         --
         -- | As a more comprehensive alternative for debugging Parsec parsers,
         -- there's also the [parsec-free](http://hackage.haskell.org/package/parsec-free)
         -- package.
         --
        , parserTrace, parserTraced
         -- * Low-level operations
        , manyAccum
        , tokenPrim
        , tokenPrimEx
        , runPT
        , unknownError
        , sysUnExpectError
        , mergeErrorReply
        , getParserState
        , setParserState
        , updateParserState
        , Stream (..)
        , runParsecT
        , mkPT
        , runP
        , Consumed (..)
        , Reply (..)
        , State (..)
        , setPosition
        , setInput
         -- * Other stuff
        , setState
        , updateState
        , parsecMap
        , parserReturn
        , parserBind
        , parserFail
        , parserZero
        , parserPlus
        ) where

    import Text.Parsec.Pos
    import Text.Parsec.Error
    import Text.Parsec.Prim
    import Text.Parsec.Char
    import Text.Parsec.Combinator