-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Parsec combinators for parsing Haskell numeric types.
--
-- Please see README.md
@package parsec-numeric
@version 0.1.0.0
-- | adjusted and portable number parsers stolen from
-- Text.ParserCombinators.Parsec.Token
--
-- The basic top-level number parsers are decimal, nat,
-- int, fractional, decimalFract, natFract,
-- floating, decimalFloat, natFloat.
--
-- natFloat parses numeric literals as defined for Haskell. All
-- numbers are unsigned, i.e. non-negative. Leading zeros are allowed. At
-- least a single digit is required. A decimal point must be preceded and
-- followed by at least one digit.
--
-- A result type (Either Integer Double) can be converted to a
-- final Double using (either fromInteger id) as is
-- done for the parsers fractional2 and floating2.
--
-- The parser nat, natFract and natFloat parse
-- hexadecimal and octal integrals (beginning with 0x,
-- 0X, 0o or 0O) that are disallowed when
-- using decimal, decimalFract and decimalFloat.
--
-- The parsers decimalFract and natFract only allow a
-- decimal point, whereas decimalFloat and natFloat also
-- allow the exponent notation using e or E.
--
-- The parser fractional requires a decimal point between at least
-- two digits and floating requires either a decimal point or the
-- exponent notation using e or E. (Both parsers do not
-- return integral values and do not support hexadecimal or octal
-- values).
--
-- Signed numbers can be parsed using "ap sign" as is done
-- for the int parser.
--
-- A couple of parsers have been added that take a Bool
-- argument, where False does not require any digit following
-- the decimal dot. The parsers fractional3 and floating3
-- allow even to start a number with the decimal dot. Also parsers
-- hexFract, binFract, hexFloat and binFloat
-- for hexadecimal or binary fractions and floats have been added.
--
-- Note that most top-level parsers succeed on a string like
-- "1.0e-100", but only the floating point parsers consume the
-- whole string. The fractional parsers stop before the exponent and the
-- integral parsers before the decimal point. You may wish to check for
-- the end of a string using eof, i.e. "liftM2 const nat
-- eof".
--
-- The returned values may be inaccurate. Int may overflow.
-- Fractional numbers should be accurate as only one division is
-- performed. Floating point numbers with decimal exponents may be
-- inaccurate due to using **. Rational numbers are needed for
-- correct conversions, but large positive or negative exponents may be a
-- problem and the class RealFloat is needed to check for minimal
-- and maximal exponents.
module Text.ParserCombinators.Parsec.Numeric
-- | parse a decimal unsigned floating point number containing a dot, e or
-- E
floating :: (Floating f, Stream s m Char) => ParsecT s u m f
-- | parse a floating point number possibly containing a decimal dot, e or
-- E
floating2 :: (Floating f, Stream s m Char) => Bool -> ParsecT s u m f
-- | parse a floating point number possibly starting with a decimal dot.
-- Note, that a single decimal point or a number starting with
-- .E is illegal.
floating3 :: (Floating f, Stream s m Char) => Bool -> ParsecT s u m f
-- | same as floating but returns a non-negative integral wrapped by
-- Left if a fractional part and exponent is missing
decimalFloat :: (Integral i, Floating f, Stream s m Char) => ParsecT s u m (Either i f)
-- | same as floating but returns a non-negative integral wrapped by
-- Left if a fractional part and exponent is missing
decFloat :: (Integral i, Floating f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | parse a hexadecimal floating point number
hexFloat :: (Integral i, Floating f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | parse a binary floating point number
binFloat :: (Integral i, Floating f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | parse hexadecimal, octal or decimal integrals or floating
natFloat :: (Integral i, Floating f, Stream s m Char) => ParsecT s u m (Either i f)
-- | parse any hexadecimal, octal, decimal or floating point number
-- following a zero
zeroNumFloat :: (Integral i, Floating f, Stream s m Char) => ParsecT s u m (Either i f)
-- | parse a floating point number given the number before a dot, e or E
fractExponent :: (Floating f, Stream s m Char) => Integer -> ParsecT s u m f
-- | parse a hex floating point number given the number before a dot, p or
-- P
hexFractExp :: (Floating f, Stream s m Char) => Integer -> Bool -> ParsecT s u m f
-- | parse a binary floating point number given the number before a dot, p
-- or P
binFractExp :: (Floating f, Stream s m Char) => Integer -> Bool -> ParsecT s u m f
-- | parse a floating point number given the number before a dot, e or E
fractExp :: (Floating f, Stream s m Char) => Integer -> Bool -> ParsecT s u m f
-- | parse a floating point number given the number before the fraction and
-- exponent
genFractExp :: (Floating f, Stream s m Char) => Integer -> ParsecT s u m f -> ParsecT s u m (f -> f) -> ParsecT s u m f
-- | parse a floating point number given the number before the fraction and
-- exponent that must follow the fraction
genFractAndExp :: (Floating f, Stream s m Char) => f -> ParsecT s u m f -> ParsecT s u m (f -> f) -> ParsecT s u m f
-- | parse a floating point exponent starting with e or E
exponentFactor :: (Floating f, Stream s m Char) => ParsecT s u m (f -> f)
-- | parse a hexadecimal floating point starting with p (IEEE 754)
hexExponentFactor :: (Floating f, Stream s m Char) => ParsecT s u m (f -> f)
-- | parse a signed decimal and compute the exponent factor given a base.
-- For hexadecimal exponential notation (IEEE 754) the base is 2 and the
-- leading character a p.
extExponentFactor :: (Floating f, Stream s m Char) => Int -> ParsecT s u m (f -> f)
-- | compute the factor given by the number following e or E. This
-- implementation uses ** rather than ^ for more
-- efficiency for large integers.
exponentValue :: Floating f => Int -> Integer -> f
-- | parse a fractional number containing a decimal dot
fractional :: (Fractional f, Stream s m Char) => ParsecT s u m f
-- | parse a fractional number possibly containing a decimal dot
fractional2 :: (Fractional f, Stream s m Char) => Bool -> ParsecT s u m f
-- | parse a fractional number possibly starting with a decimal dot
fractional3 :: (Fractional f, Stream s m Char) => Bool -> ParsecT s u m f
-- | a decimal fractional
decFract :: (Integral i, Fractional f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | a hexadecimal fractional
hexFract :: (Integral i, Fractional f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | a binary fractional
binFract :: (Integral i, Fractional f, Stream s m Char) => Bool -> ParsecT s u m (Either i f)
-- | same as fractional but returns a non-negative integral wrapped
-- by Left if a fractional part is missing
decimalFract :: (Integral i, Fractional f, Stream s m Char) => ParsecT s u m (Either i f)
-- | parse hexadecimal, octal or decimal integrals or fractional
natFract :: (Integral i, Fractional f, Stream s m Char) => ParsecT s u m (Either i f)
-- | parse any hexadecimal, octal, decimal or fractional number following a
-- zero
zeroNumFract :: (Integral i, Fractional f, Stream s m Char) => ParsecT s u m (Either i f)
-- | parse a fractional number given the number before the dot
fractFract :: (Fractional f, Stream s m Char) => Integer -> Bool -> ParsecT s u m f
-- | combine the given number before the dot with a parser for the
-- fractional part
genFractFract :: (Fractional f, Stream s m Char) => Integer -> ParsecT s u m f -> ParsecT s u m f
-- | parse a dot followed by decimal digits as fractional part
fraction :: (Fractional f, Stream s m Char) => Bool -> ParsecT s u m f
-- | parse a dot followed by hexadecimal digits as fractional part
hexFraction :: (Fractional f, Stream s m Char) => Bool -> ParsecT s u m f
-- | parse a dot followed by binary digits as fractional part
binFraction :: (Fractional f, Stream s m Char) => Bool -> ParsecT s u m f
-- | parse a dot followed by base dependent digits as fractional part
baseFraction :: (Fractional f, Stream s m Char) => Bool -> Int -> ParsecT s u m Char -> ParsecT s u m f
-- | compute the fraction given by a sequence of digits following the dot.
-- Only one division is performed and trailing zeros are ignored.
fractionValue :: Fractional f => Int -> String -> f
-- | parse an optional sign immediately followed by a nat.
-- Note, that in Daan Leijen's code the sign was wrapped as lexeme in
-- order to skip comments and spaces in between.
int :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse an optional plus or minus sign, returning negate or
-- id
sign :: (Num a, Stream s m Char) => ParsecT s u m (a -> a)
-- | parse plain non-negative decimal numbers given by a non-empty sequence
-- of digits
decimal :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse 0 or 1
binDigit :: (Stream s m Char) => ParsecT s u m Char
-- | parse a binary number
binary :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse non-negative hexadecimal, octal or decimal numbers nat ::
-- Integral i => ParsecT s u m i
nat :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse a nat syntactically starting with a zero zeroNumber ::
-- Integral i => ParsecT s u m i
zeroNumber :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | hexadecimal or octal number
hexOrOct :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse a hexadecimal number preceded by an x or X character
hexadecimal :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse a hexadecimal number
hexnum :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse an octal number preceded by an o or O character
octal :: (Integral i, Stream s m Char) => ParsecT s u m i
-- | parse a non-negative number given a base and a parser for the digits
number :: (Integral i, Stream s m Char) => Int -> ParsecT s u m Char -> ParsecT s u m i
-- | compute the value from a string of digits using a base
numberValue :: Integral i => Int -> String -> i