Portability | Haskell98 |
---|---|

Stability | stable |

Maintainer | wren@community.haskell.org |

Efficiently parse floating point literals from a `ByteString`

.

- readDouble :: ByteString -> Maybe (Double, ByteString)

# Documentation

readDouble :: ByteString -> Maybe (Double, ByteString)Source

Parse the initial portion of the ByteString as a Double precision floating point value. The expected form of the numeric literal is given by:

- An optional
`+`

or`-`

sign - Decimal digits, OR
- 0 [oO] and a sequence of octal digits, OR
- 0 [xX] and a sequence of hexadecimal digits, OR
- An optional decimal point, followed by a sequence of decimal digits,
- And an optional exponent

The result is returned as a pair of a double-precision floating
point value and the remaining input, or `Nothing`

should no parse
be found.

For example, to sum a file of floating point numbers, one per line,

import qualified Data.ByteString.Char8 as S import qualified Data.ByteString.Unsafe as S import Data.ByteString.Lex.Double main = print . go 0 =<< S.getContents where go n s = case readDouble s of Nothing -> n Just (k,rest) -> go (n+k) (S.tail rest)