binary-parsers-0.2.2.0: Extends binary with parsec/attoparsec style parsing combinators.

Copyright Bryan O'Sullivan 2007-2015, Winterland 2016 BSD3 drkoster@qq.com experimental unknown None Haskell2010

Data.Binary.Parser.Numeric

Description

Simple, efficient combinator parsing for numeric values.

Synopsis

# Documentation

hexadecimal :: (Integral a, Bits a) => Get a Source

Parse and decode an unsigned hexadecimal number. The hex digits `'a'` through `'f'` may be upper or lower case.

This parser does not accept a leading `"0x"` string.

decimal :: Integral a => Get a Source

Parse and decode an unsigned decimal number.

signed :: Num a => Get a -> Get a Source

Parse a number with an optional leading `'+'` or `'-'` sign character.

rational :: Fractional a => Get a Source

Parse a rational number.

The syntax accepted by this parser is the same as for `double`.

Note: this parser is not safe for use with inputs from untrusted sources. An input with a suitably large exponent such as `"1e1000000000"` will cause a huge `Integer` to be allocated, resulting in what is effectively a denial-of-service attack.

In most cases, it is better to use `double` or `scientific` instead.

double :: Get Double Source

Parse a rational number and round to `Double`.

This parser accepts an optional leading sign character, followed by at least one decimal digit. The syntax similar to that accepted by the `read` function, with the exception that a trailing `'.'` or `'e'` not followed by a number is not consumed.

Examples with behaviour identical to `read`:

```parseOnly double "3"     == Right ("",1,3.0)
parseOnly double "3.1"   == Right ("",3,3.1)
parseOnly double "3e4"   == Right ("",3,30000.0)
parseOnly double "3.1e4" == Right ("",5,31000.0)```
```parseOnly double ".3"    == Left (".3",0,"takeWhile1")
parseOnly double "e3"    == Left ("e3",0,"takeWhile1")```

Examples of differences from `read`:

```parseOnly double "3.foo" == Right (".foo",1,3.0)
parseOnly double "3e"    == Right ("e",1,3.0)```

This function does not accept string representations of "NaN" or "Infinity".

scientific :: Get Scientific Source

Parse a scientific number.

The syntax accepted by this parser is the same as for `double`.

scientifically :: (Scientific -> a) -> Get a Source

Parse a scientific number and convert to result using a user supply function.

The syntax accepted by this parser is the same as for `double`.