cabal-version: 2.4 name: scientific-notation version: 0.1.7.0 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 . . * 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 tested-with: GHC ==9.4.8 || ==9.6.3 || ==9.8.1 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