cabal-version: 2.2
name: scientific-notation
version: 0.1.6.1
synopsis: Scientific notation intended for tokenization
description:
This library provides a type used to represent a number in
scientific notation. This is most frequently useful when
tokenizing or parsing a language. Languages like JSON and SQL
support numberic literals written in scientific notation, even
though backends frequently reject numbers outside a given range.
This library provides a compact representation of numbers in
scientific notation. In the common case of the coefficient and
then exponent each being small enough to be represented by a
machine word, this library avoids the need for any indirections
to retrieve the number. Consider some tokenization scheme:
`data Token = ... | Number {-# UNPACK #-} !Scientific`.
In this case, the unboxed coefficient and exponent are unpacked
into the `Number` data constructor if they can each be represented
by a machine word.
.
The internal representation does not normalize numbers. That is,
parsing `300e-2` resulting in a representation that uses `300` and
`-2` rather than `3` and `0`.
This work is deferred with the expectation that a number in scientific
notation is consumed either zero or one times. This library is not
optimized for use-cases that consume a `Scientific` more than once
since normalization is reapplied every time.
.
The primary library that operates in this same space is `scientific`.
Compared to `scientific`, this library distinguishes itself from
`scientific` in the following ways:
.
* Correctness: `scientific` does not correctly handle large exponents. See
<https://github.com/basvandijk/scientific/issues/62 issue #62>.
.
* Parsing: The `scientific-notation` parser outperforms the `scientific`
parser that ships with `aeson` by a factor of five on small numbers.
homepage: https://github.com/byteverse/scientific-notation
bug-reports: https://github.com/byteverse/scientific-notation/issues
license: BSD-3-Clause
license-file: LICENSE
author: Andrew Martin
maintainer: amartin@layer3com.com
copyright: 2019 Andrew Martin
category: Data
extra-doc-files: CHANGELOG.md
common build-settings
default-language: Haskell2010
ghc-options: -Wall -Wunused-packages
library
import: build-settings
exposed-modules: Data.Number.Scientific
build-depends:
, base >=4.17.1 && <5
, bytebuild >=0.3.5 && <0.4
, byteslice >=0.2.6 && <0.3
, bytesmith >=0.3 && <0.4
, bytestring >=0.10.12
, natural-arithmetic >=0.1.1 && <0.3
, primitive >=0.7.1
, text-short >=0.1.3
, word-compat >=0.0.2
hs-source-dirs: src
ghc-options: -O2
test-suite test
import: build-settings
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Main.hs
build-depends:
, base >=4.12.0.0 && <5
, byteslice
, bytesmith
, primitive
, scientific-notation
, tasty >=1.2.3
, tasty-hunit >=0.10.0.2
, tasty-quickcheck
benchmark bench
import: build-settings
type: exitcode-stdio-1.0
build-depends:
, attoparsec
, attoparsec-aeson
, base
, byteslice >=0.1.2
, bytesmith
, bytestring
, gauge >=0.2.4
, primitive
, run-st
, scientific
, scientific-notation
ghc-options: -O2
hs-source-dirs: bench
main-is: Main.hs
source-repository head
type: git
location: git://github.com/byteverse/scientific-notation.git