bytestring-lexing-0.4.3.3: Parse and produce literals efficiently from strict or lazy bytestrings.

CopyrightCopyright (c) 2008--2011 Don Stewart
LicenseBSD2/MIT
Maintainerwren@community.haskell.org
Stabilitystable
PortabilityHaskell98
Safe HaskellNone
LanguageHaskell98

Data.ByteString.Lex.Lazy.Double

Description

Efficiently parse floating point literals from a ByteString.

Synopsis

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)