cabal-version:       1.18
name:                text-short
version:             0.1.4
x-revision:          2
synopsis:            Memory-efficient representation of Unicode text strings
license:             BSD3
license-file:        LICENSE
author:              Herbert Valerio Riedel
maintainer:          hvr@gnu.org
bug-reports:         https://github.com/hvr/text-short/issues
category:            Data
build-type:          Simple
description:         This package provides the 'ShortText' type which is suitable for keeping many short strings in memory. This is similiar to how 'ShortByteString' relates to 'ByteString'.
                     .
                     The main difference between 'Text' and 'ShortText' is that 'ShortText' uses UTF-8 instead of UTF-16 internally and also doesn't support zero-copy slicing (thereby saving 2 words). Consequently, the memory footprint of a (boxed) 'ShortText' value is 4 words (2 words when unboxed) plus the length of the UTF-8 encoded payload.

tested-with:         GHC==9.0.1, GHC==8.10.4, GHC==8.8.3, GHC==8.6.5, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==9.2.1
extra-source-files:  ChangeLog.md

Source-Repository head
    Type:              git
    Location:          https://github.com/hvr/text-short.git

flag asserts
  description: Enable runtime-checks via @assert@
  default: False
  manual: True

library
  exposed-modules:     Data.Text.Short
                       Data.Text.Short.Partial
                       Data.Text.Short.Unsafe

  other-modules:       Data.Text.Short.Internal

  build-depends:       base        >= 4.7    && < 4.17
                     , bytestring  >= 0.10.4 && < 0.12
                     , hashable    >= 1.2.6  && < 1.5
                     , deepseq     >= 1.3    && < 1.5
                     , text        >= 1.0    && < 1.3
                     , binary      >= 0.7.1  && < 0.9
                     , ghc-prim    >= 0.3.1  && < 0.9
                     , template-haskell >= 2.9.0.0 && <2.19

  if impl(ghc >=8.0)
    build-depends: bytestring >= 0.10.8.0

  if !impl(ghc >= 8.0)
     build-depends: semigroups >= 0.18.2 && < 0.21

  -- GHC version specific PrimOps
  if impl(ghc >= 8.4)
     hs-source-dirs:   src-ghc804
  else
     c-sources:        cbits/memcmp.c
     hs-source-dirs:   src-ghc708
  other-modules:       PrimOps

  hs-source-dirs:      src

  default-language:    Haskell2010
  other-extensions:    CPP
                     , GeneralizedNewtypeDeriving
                     , MagicHash
                     , UnliftedFFITypes
                     , Trustworthy
                     , Unsafe

  if impl(ghc >= 8)
    other-extensions: TemplateHaskellQuotes
  else
    other-extensions: TemplateHaskell

  c-sources: cbits/cbits.c

  if flag(asserts)
     ghc-options: -fno-ignore-asserts
  else
     cc-options: -DNDEBUG=1

  ghc-options: -Wall
  cc-options: -Wall

test-suite tests
  type:                exitcode-stdio-1.0
  hs-source-dirs:      src-test
  main-is:             Tests.hs

  -- bytestring dependency for cabal_macros.h
  build-depends: base
               , bytestring
               , binary
               , text
               , text-short
               , template-haskell
                 -- deps which don't inherit constraints from library stanza:
               , tasty                >= 1.0.0  && < 1.5
               , tasty-quickcheck     >= 0.10   && < 0.11
               , tasty-hunit          >= 0.10.0 && < 0.11
               , quickcheck-instances >= 0.3.14 && < 0.4

  default-language:    Haskell2010