packages feed

hashable-1.4.6.0: hashable.cabal

cabal-version:      2.2
name:               hashable
version:            1.4.6.0
synopsis:           A class for types that can be converted to a hash value
description:
  This package defines a class, 'Hashable', for types that can be converted to a hash value.
  This class exists for the benefit of hashing-based data structures.
  The package provides instances for basic types and a way to combine hash values.
  .
  'Hashable' is intended exclusively for use in in-memory data structures.
  .
  'Hashable' does /not/ have a fixed standard.
  This allows it to improve over time.
  .
  Because it does not have a fixed standard, different computers or computers on different versions of the code will observe different hash values.
  As such, 'hashable' is not recommended for use other than in-memory datastructures.
  Specifically, 'hashable' is not intended for network use or in applications which persist hashed values.
  For stable hashing use named hashes: sha256, crc32, xxhash etc.

homepage:           http://github.com/haskell-unordered-containers/hashable
license:            BSD-3-Clause
license-file:       LICENSE
author:
  Milan Straka <fox@ucw.cz>
  Johan Tibell <johan.tibell@gmail.com>

maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
bug-reports:
  https://github.com/haskell-unordered-containers/hashable/issues

stability:          Provisional
category:           Data
build-type:         Simple
tested-with:
  GHC ==8.6.5
   || ==8.8.4
   || ==8.10.4
   || ==8.10.7
   || ==9.0.1
   || ==9.0.2
   || ==9.2.8
   || ==9.4.8
   || ==9.6.4
   || ==9.8.2
   || ==9.10.1

extra-source-files:
  CHANGES.md
  include/HsHashable.h
  include/HsXXHash.h
  README.md
  xxHash-0.8.2/xxhash.h

flag integer-gmp
  description:
    Are we using @integer-gmp@ to provide fast Integer instances? No effect on GHC-9.0 or later.

  manual:      False
  default:     True

flag arch-native
  description:
    Use @-march=native@ when compiling C sources.
    You may need to disable this flag if you are building distributable binaries

  manual:      True
  default:     True

flag random-initial-seed
  description:
    Randomly initialize the initial seed on each final executable invocation
    This is useful for catching cases when you rely on (non-existent)
    stability of hashable's hash functions.
    This is not a security feature.

  manual:      True
  default:     False

library
  exposed-modules:
    Data.Hashable
    Data.Hashable.Generic
    Data.Hashable.Lifted

  other-modules:
    Data.Hashable.Class
    Data.Hashable.FFI
    Data.Hashable.Generic.Instances
    Data.Hashable.Imports
    Data.Hashable.LowLevel
    Data.Hashable.Mix
    Data.Hashable.XXH3

  include-dirs:     include xxHash-0.8.2
  includes:
    HsHashable.h
    HsXXHash.h
    xxhash.h

  hs-source-dirs:   src
  build-depends:
    , base        >=4.12.0.0 && <4.21
    , bytestring  >=0.10.8.2 && <0.13
    , containers  >=0.6.0.1  && <0.8
    , deepseq     >=1.4.4.0  && <1.6
    , ghc-prim
    , text        >=1.2.3.0  && <1.3  || >=2.0 && <2.2

  if impl(ghc >=9.2)
    -- depend on os-string on newer GHCs only.
    -- os-string has tight lower bound on bytestring, which prevents
    -- using bundled version on older GHCs.
    build-depends: os-string >=2.0.2

    -- we also ensure that we can get filepath-1.5 only with GHC-9.2
    -- therefore there is else-branch with stricter upper bound.
    build-depends: filepath >=1.4.1.2 && <1.6

  else
    build-depends: filepath >=1.4.1.2 && <1.5

  if !impl(ghc >=9.2)
    build-depends: base-orphans >=0.8.6 && <0.10

  if !impl(ghc >=9.4)
    build-depends: data-array-byte >=0.1.0.1 && <0.2

  -- Integer internals
  if impl(ghc >=9)
    build-depends: ghc-bignum >=1.0 && <1.4

    if !impl(ghc >=9.0.2)
      build-depends: ghc-bignum-orphans >=0.1 && <0.2

  else
    if flag(integer-gmp)
      build-depends: integer-gmp >=0.4 && <1.1

    else
      -- this is needed for the automatic flag to be well-balanced
      build-depends: integer-simple

  if (flag(random-initial-seed) && impl(ghc))
    cpp-options: -DHASHABLE_RANDOM_SEED=1

    if os(windows)
      c-sources: cbits-win/init.c

    else
      c-sources: cbits-unix/init.c

  default-language: Haskell2010
  other-extensions:
    BangPatterns
    CPP
    DeriveDataTypeable
    FlexibleContexts
    FlexibleInstances
    GADTs
    KindSignatures
    MagicHash
    MultiParamTypeClasses
    ScopedTypeVariables
    Trustworthy
    TypeOperators
    UnliftedFFITypes

  ghc-options:      -Wall

  if flag(arch-native)
    -- Cabal doesn't pass cc-options to "ordinary" Haskell source compilation
    -- https://github.com/haskell/cabal/issues/9801
    ghc-options: -optc=-march=native -optc-mtune=native

  if impl(ghc >=9.0)
    -- these flags may abort compilation with GHC-8.10
    -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295
    ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode

test-suite hashable-tests
  type:             exitcode-stdio-1.0
  hs-source-dirs:   tests
  main-is:          Main.hs
  other-modules:
    Properties
    Regress

  build-depends:
    , base
    , bytestring
    , filepath
    , ghc-prim
    , hashable
    , HUnit
    , QuickCheck        >=2.4.0.1
    , random            >=1.0      && <1.3
    , tasty             ^>=1.5
    , tasty-hunit       ^>=0.10.1
    , tasty-quickcheck  ^>=0.10.3
    , text              >=0.11.0.5

  if impl(ghc >=9.2)
    build-depends: os-string

  if !os(windows)
    build-depends:    unix
    cpp-options:      -DHAVE_MMAP
    other-modules:    Regress.Mmap
    other-extensions: CApiFFI

  ghc-options:      -Wall -fno-warn-orphans
  default-language: Haskell2010

test-suite xxhash-tests
  type:             exitcode-stdio-1.0
  hs-source-dirs:   tests src
  main-is:          xxhash-tests.hs
  other-modules:
    Data.Hashable.FFI
    Data.Hashable.XXH3

  default-language: Haskell2010
  build-depends:
    , base
    , bytestring
    , primitive         ^>=0.9.0.0
    , tasty             ^>=1.5
    , tasty-hunit       ^>=0.10.1
    , tasty-quickcheck  ^>=0.10.3

  include-dirs:     include xxHash-0.8.2
  includes:
    HsXXHash.h
    xxhash.h

  if !impl(ghc >=9.4)
    build-depends: data-array-byte >=0.1.0.1 && <0.2

test-suite hashable-examples
  type:             exitcode-stdio-1.0
  build-depends:
    , base
    , ghc-prim
    , hashable

  hs-source-dirs:   examples
  main-is:          Main.hs
  default-language: Haskell2010

source-repository head
  type:     git
  location:
    https://github.com/haskell-unordered-containers/hashable.git