{-|
Module      : Network.BitSetWord8
Copyright   : (c) Naoto Shimazaki 2017
License     : MIT (see the file LICENSE)

Maintainer  : https://github.com/nshimaza
Stability   : experimental

Space efficient set of 'Word8' and some pre-canned sets useful for parsing HTTP related 'ByteString'.
This packaged is intended to provide O(1) membership test on any subset of ASCII and Latin-1 character set
in order to write efficient HTTP related parser.

=== Creating your own set

You can create your own set by 'fromList'.

@
myCharSet :: BitSetWord8
myCharSet = fromList [ 'Y', 'y', 'N', 'n' ]
@

You can create pre-evaluated set using Template Haskell.

@
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH.Syntax (Lift, lift)

myPreEvaluatedCharSet :: BitSetWord8
myPreEvaluatedCharSet = $(lift myCharSet)
@

=== Example Usage

@
import Data.Attoparsec.ByteString

-- | Parse RFC7230 token.
token :: Parser ByteString
token = takeWhile1 (member rfc7230TChar)
@
-}

module Data.BitSetWord8
    (
    -- * Types
      BitSetWord8
    -- * Useful charset constants in BitSetWord8
    , rfc3986UriReference
    , rfc7230TChar
    , rfc7230QDText
    , rfc7230QuotedPair
    -- * Source Constants
    , rfc3986UriReference'
    , rfc7230QDText'
    , rfc7230QuotedPair'
    , rfc5234Digit'
    , rfc2616UpAlpha'
    , rfc2616LoAlpha'
    , rfc5234Alpha'
    , rfc5234HexDig'
    , rfc5234VChar'
    , rfc5324Wsp'
    , rfc3986SubDelims'
    , rfc3986GenDelims'
    , rfc3986Reserved'
    , rfc3986Unreserved'
    , rfc3986PctEncodedChar'
    , rfc3986PChar'
    , rfc7230TChar'
    , rfc7230ObsText'
    -- * Functions
    , fromList
    , member
    ) where

import           Data.BitSetWord8.CharSets
import           Data.BitSetWord8.Internal