packages feed

scientific-notation-0.1.6.1: scientific-notation.cabal

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