{-# 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