Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Jason Dusek <jason.dusek <at> gmail.com>
Subject: ANN: ByteString Nums
Newsgroups: gmane.comp.lang.haskell.cafe
Date: Sunday 23rd August 2009 07:26:31 UTC (over 8 years ago)
This is a simple package for relatively careless parsing of
  numbers from ByteStrings. It works to parse out integer
  strings, floating point strings and hex strings.

    http://hackage.haskell.org/package/bytestring-nums

  For integer strings, an initial sign is detected and non-digit
  characters are ignored:

Prelude> :load Data.ByteString.Nums.Careless.Int
*Data.ByteString.Nums.Careless.Int> let strings = ["121.3040", "1o2",
"-a1", "0xff", "-0x30"]
*Data.ByteString.Nums.Careless.Int> fmap (int . pack) strings :: [Int]
[1213040,12,-1,0,-30]
*Data.ByteString.Nums.Careless.Int> fmap (int . pack) strings :: [Double]
[1213040.0,12.0,-1.0,0.0,-30.0]

  For hexadecimal strings, no signs are recognized and
  characters that aren't hex digits are ignored. One consequence
  of this is that an initial `0x` is skipped.

Prelude> :load Data.ByteString.Nums.Careless.Hex
*Data.ByteString.Nums.Careless.Hex> let strings = ["121.3040", "1o2",
"-a1", "0xff", "-0x30"]
*Data.ByteString.Nums.Careless.Hex> fmap (hex . pack) strings :: [Int]
[18952256,18,161,255,48]

  The float parser recognizes the last group of digits behind a
  comma or period as the fractional part; all preceding digits
  are treated as the integral part. Naturally, signs are
  handled.

Prelude> :load Data.ByteString.Nums.Careless.Float
*Data.ByteString.Nums.Careless.Float> let strings = ["121.3040",
"2.100,32", "1,o2", "-a1", "0xff", "-0x30"]
*Data.ByteString.Nums.Careless.Float> fmap (float . pack) strings ::
[Double]
[122.304,2100.32,1.2,-1.0,0.0,-30.0]
*Data.ByteString.Nums.Careless.Float> fmap (float . pack) strings ::
[Rational]
[15163 % 125,52508 % 25,6 % 5,(-1) % 1,0 % 1,(-30) % 1]

  I have not applied any `SPECIALIZE` or `INLINE` directives at
  this time; it'd be great to have some insight in to optimizing
  collections of small functions like this library.

--
Jason Dusek
 
CD: 3ms