packages feed

streamly-0.11.1: streamly.cabal

cabal-version:      2.4
name:               streamly
version:            0.11.1
synopsis:           Streaming data pipelines with declarative concurrency
description:
  For upgrading to streamly-0.9.0+ please read the
  <https://github.com/composewell/streamly/blob/streamly-0.10.0/docs/User/Project/Upgrading-0.8-to-0.9.md Streamly-0.9.0 upgrade guide>.
  .
  Streamly is a high-performance, beginner-friendly standard library
  for Haskell. It unifies streaming with list transformers and logic
  programming; unifies streaming with concurrency and reactive
  programming; unifies arrays with ring arrays, text, bytestring
  and vector use cases; unifies arrays with builders and binary
  serialization; generalizes parsers to any input type and unifies
  attoparsec, parsec use cases with better performance; provides
  streaming fileIO — all with a clean, consistent, well-integrated and
  streaming enabled API.
  .
  Streams are designed to have a list like interface — no steep
  learning curve, no complex types. Streamly is designed to build
  general purpose applications in a truly functional manner, from
  simple hello-world to advanced high-performance systems. The design
  emphasizes simplicity, modularity, and code reuse with minimal
  building blocks. Performance is on par with C, tuning is easy, and
  it’s hard to get it wrong.
  .
  Streamly is serial by default, with seamless declarative concurrency
  that scales automatically when needed. It provides prompt and safe
  resource management, works well with other streaming libraries as well
  as core libraries like bytestring and text, and is backed by solid
  documentation.
  .
  The @streamly@ package is built on top of the @streamly-core@ package
  and offers high-level capabilities such as concurrency, reactive
  programming, time-related combinators, lifted exceptions, and
  networking. It provides streaming with concurrency, and is a more
  powerful, higher-level and more expressive alternative to the @async@
  package.
  .
  Performant. Unified. Modular. Powerful. Simple.
  .
  Learn more at <https://streamly.composewell.com the streamly website>.

homepage:            https://streamly.composewell.com
bug-reports:         https://github.com/composewell/streamly/issues
license:             BSD-3-Clause
license-file:        LICENSE
tested-with:         GHC==8.6.5
                   , GHC==8.8.4
                   , GHC==8.10.7
                   , GHC==9.0.2
                   , GHC==9.2.8
                   , GHC==9.4.7
                   , GHC==9.6.3
                   , GHC==9.8.1
                   , GHC==9.10.3
                   , GHC==9.12.4
                   , GHC==9.14.1
author:              Composewell Technologies
maintainer:          streamly@composewell.com
copyright:           2017 Composewell Technologies
category:
    Streamly, Concurrency, Streaming, Dataflow, Pipes, Reactivity, List,
    Logic, Non-determinism, Parsing, Array, Time, Unicode, Filesystem,
    Network
stability:           Stable
build-type:          Configure

extra-source-files:
    bench-test-lib/bench-test-lib.cabal
    bench-test-lib/src/BenchTestLib/DirIO.hs
    benchmark/*.hs
    benchmark/bench-runner/Main.hs
    benchmark/bench-runner/bench-runner.cabal
    benchmark/Streamly/Benchmark/Data/*.hs
    benchmark/Streamly/Benchmark/Data/Scanl/*.hs
    benchmark/Streamly/Benchmark/Data/Fold/*.hs
    benchmark/Streamly/Benchmark/Data/Serialize/*.hs
    benchmark/Streamly/Benchmark/Data/Array/Common.hs
    benchmark/Streamly/Benchmark/Data/Array/CommonImports.hs
    benchmark/Streamly/Benchmark/Data/Array/Generic.hs
    benchmark/Streamly/Benchmark/Data/Array/SmallArray.hs
    benchmark/Streamly/Benchmark/Data/Array.hs
    benchmark/Streamly/Benchmark/Data/RingArray.hs
    benchmark/Streamly/Benchmark/Data/MutArray.hs
    benchmark/Streamly/Benchmark/Data/Array/Stream.hs
    benchmark/Streamly/Benchmark/Data/Fold/Window.hs
    benchmark/Streamly/Benchmark/Data/Stream/*.hs
    benchmark/Streamly/Benchmark/Data/StreamK/*.hs
    benchmark/Streamly/Benchmark/FileSystem/*.hs
    benchmark/Streamly/Benchmark/FileSystem/Handle/*.hs
    benchmark/Streamly/Benchmark/Prelude/*.hs
    benchmark/Streamly/Benchmark/Unicode/*.hs
    benchmark/lib/Streamly/Benchmark/*.hs
    benchmark/lib/Streamly/Benchmark/Common/*.hs
    benchmark/streamly-benchmarks.cabal
    bin/mk-hscope.sh
    bin/mk-tags.sh
    configure
    configure.ac
    src/doctest/*.hs
    targets/streamly-targets.cabal
    targets/Targets.hs
    test/test-runner/Main.hs
    test/test-runner/test-runner.cabal

    -- This is duplicated
    src/Streamly/Internal/Data/Stream/Instances.hs

    src/Streamly/Internal/FileSystem/Event/Darwin.h
    src/assert.hs
    src/config.h.in
    src/inline.hs
    src/deprecation.h
    test/Streamly/Test/Data/*.hs
    test/Streamly/Test/Data/Array/CommonImports.hs
    test/Streamly/Test/Data/Array/Common.hs
    test/Streamly/Test/Data/Array/Generic.hs
    test/Streamly/Test/Data/Array.hs
    test/Streamly/Test/Data/MutArray.hs
    test/Streamly/Test/Data/RingArray.hs
    test/Streamly/Test/Data/Array/Stream.hs
    test/Streamly/Test/Data/Parser.hs
    test/Streamly/Test/Data/Parser/*.hs
    test/Streamly/Test/Data/ParserK.hs
    test/Streamly/Test/Data/Stream/*.hs
    test/Streamly/Test/FileSystem/Event.hs
    test/Streamly/Test/FileSystem/Event/Common.hs
    test/Streamly/Test/FileSystem/Event/Darwin.hs
    test/Streamly/Test/FileSystem/Event/Windows.hs
    test/Streamly/Test/FileSystem/Event/Linux.hs
    test/Streamly/Test/FileSystem/*.hs
    test/Streamly/Test/Network/Socket.hs
    test/Streamly/Test/Network/Inet/TCP.hs
    test/Streamly/Test/Prelude.hs
    test/Streamly/Test/Prelude/*.hs
    test/Streamly/Test/Unicode/*.hs
    test/Streamly/Test/Serialize/*.hs
    test/Streamly/Test/Data/Scanl/*.hs
    test/Streamly/Test/Data/Fold/*.hs
    test/lib/Streamly/Test/Common.hs
    test/lib/Streamly/Test/Prelude/Common.hs
    test/lib/Streamly/Test/Parser/Common.hs
    test/streamly-tests.cabal
    test/version-bounds.hs
    test/Streamly/Test/Unicode/ucd/NormalizationTest.txt
    test/Streamly/Test/Unicode/extra/NormalizationTest.txt
    test/Streamly/Test/Data/Unbox.hs
    test/Streamly/Test/Data/Unbox/*.hs
    test/Streamly/Test/Data/Serialize.hs
    test/Streamly/Test/Data/Serialize/*.hs
    benchmark/Streamly/Benchmark/Unicode/data/AllChars.txt
    benchmark/Streamly/Benchmark/Unicode/data/Devanagari.txt
    benchmark/Streamly/Benchmark/Unicode/data/Japanese.txt
    benchmark/Streamly/Benchmark/Unicode/data/Vietnamese.txt
    benchmark/Streamly/Benchmark/Unicode/data/Deutsch.txt
    benchmark/Streamly/Benchmark/Unicode/data/English.txt
    benchmark/Streamly/Benchmark/Unicode/data/Korean.txt

extra-doc-files:
    CONTRIBUTING.md
    CHANGELOG.md
    README.md
    benchmark/README.md
    docs/*.md
    docs/diagrams/module-diagram.hs
    docs/Developer/*.link
    docs/Developer/*.md
    docs/Developer/*.png
    docs/Developer/*.rst
    docs/User/*.md
    docs/User/Explanatory/*.md
    docs/User/Explanatory/streaming-pradigms.rst
    docs/User/HowTo/*.md
    docs/User/HowTo/*.svg
    docs/User/Project/*.link
    docs/User/Project/*.md
    docs/User/Project/ApiChangelogs/*.txt
    docs/User/Tutorials/*.md
    docs/User/Tutorials/*.link
    docs/User/Tutorials/*.svg
    docs/User/Tutorials/all-your-base.jpg
    test/README.md

extra-tmp-files:
    config.log
    config.status
    autom4te.cache
    src/config.h

source-repository head
    type: git
    location: https://github.com/composewell/streamly

flag fusion-plugin
  description: Use fusion plugin for benchmarks and executables
  manual: True
  default: False

flag inspection
  description: Enable inspection testing
  manual: True
  default: False

flag debug
  description: Debug build with asserts enabled
  manual: True
  default: False

flag internal-dev
  description: DO NOT USE, ONLY FOR INTERNAL USE.
  manual: True
  default: False

flag has-llvm
  description: Use llvm backend for code generation
  manual: True
  default: False

flag opt
  description: off=GHC default, on=-O2
  manual: True
  default: True

flag limit-build-mem
  description: Limits memory when building
  manual: True
  default: False

flag internal-use-unliftio
  description: DO NOT USE, ONLY FOR INTERNAL USE.
  manual: True
  default: False

-------------------------------------------------------------------------------
-- Common stanzas
-------------------------------------------------------------------------------

common compile-options
    if os(darwin)
      cpp-options:    -DCABAL_OS_DARWIN

    if os(linux)
      cpp-options:    -DCABAL_OS_LINUX

    if os(windows)
      cpp-options:    -DCABAL_OS_WINDOWS

    if flag(internal-dev)
      cpp-options:    -DDEVBUILD

    if flag(inspection)
      cpp-options:    -DINSPECTION

    ghc-options:    -Weverything
                    -Wno-implicit-prelude
                    -Wno-missing-deriving-strategies
                    -Wno-missing-exported-signatures
                    -Wno-missing-import-lists
                    -Wno-missing-local-signatures
                    -Wno-missing-safe-haskell-mode
                    -Wno-missed-specialisations
                    -Wno-all-missed-specialisations
                    -Wno-monomorphism-restriction
                    -Wno-prepositive-qualified-module
                    -Wno-unsafe
                    -Rghc-timing

    if impl(ghc >= 9.2)
      ghc-options:
        -Wno-missing-kind-signatures
        -Wno-redundant-bang-patterns
        -Wno-operator-whitespace

    if impl(ghc >= 9.8)
      ghc-options:
        -Wno-missing-role-annotations

    if flag(has-llvm)
      ghc-options: -fllvm

    if flag(internal-dev)
      ghc-options:    -Wmissed-specialisations
                      -Wall-missed-specialisations

    if flag(limit-build-mem)
        ghc-options: +RTS -M1000M -RTS

    if flag(internal-use-unliftio)
      cpp-options: -DUSE_UNLIFTIO

common default-extensions
    default-language: Haskell2010

    -- GHC2024 may include more extensions than we are actually using, see the
    -- full list below. We enable this to ensure that we are able to compile
    -- with this i.e. there is no interference by other extensions.

    -- Don't enforce GHC2024 and GHC2021 but We can support the build with them.

    -- if impl(ghc >= 9.10)
    --   default-language: GHC2024

    -- if impl(ghc >= 9.2) && impl(ghc < 9.10)
    --   default-language: GHC2021

    if impl(ghc >= 8.10)
      default-extensions:
        StandaloneKindSignatures

    -- In GHC 2024
    default-extensions:
        BangPatterns
        ConstraintKinds
        DeriveDataTypeable
        DeriveGeneric
        DeriveTraversable
        ExistentialQuantification
        FlexibleContexts
        FlexibleInstances
        GeneralizedNewtypeDeriving
        InstanceSigs
        KindSignatures
        LambdaCase
        MultiParamTypeClasses
        RankNTypes
        ScopedTypeVariables
        TupleSections
        TypeApplications
        TypeOperators

    -- Not in GHC2024
    default-extensions:
        CApiFFI
        CPP
        MagicHash
        RecordWildCards

        -- TypeFamilies -- required by IsHashMap type class

        -- MonoLocalBinds, enabled by TypeFamilies and GHC2024, was
        -- once found to cause runtime performance regressions which
        -- does not seem to be the case anymore, but need more testing
        -- to confirm.  It is confirmed that it requires more memory
        -- for compilation at least in some cases (Data.Fold.Window
        -- benchmark on GHC-9.10.1 macOS).  Disabling this must come
        -- after TypeFamilies, otherwise TypeFamilies will enable it
        -- again.
        -- NoMonoLocalBinds

        -- UndecidableInstances -- Does not show any perf impact
        -- UnboxedTuples        -- interferes with (#.)

    if impl(ghc >= 8.6)
      default-extensions: QuantifiedConstraints

common optimization-options
  if flag(opt)
    ghc-options: -O2
                 -fdicts-strict
                 -fspec-constr-recursive=16
                 -fmax-worker-args=16

  -- For this to be effective it must come after the -O2 option
  if flag(internal-dev) || flag(debug) || !flag(opt)
    ghc-options: -fno-ignore-asserts
    cpp-options: -DDEBUG

common threading-options
  ghc-options:  -threaded
                -with-rtsopts=-N

-- We need optimization options here to optimize internal (non-inlined)
-- versions of functions. Also, we have some benchmarking inspection tests
-- part of the library when built with --benchmarks flag. Thos tests fail
-- if we do not use optimization options here. It was observed that due to
-- -O2 here some concurrent/nested benchmarks improved and others regressed.
-- We can investigate a bit more here why the regression occurred.
common lib-options
  import: compile-options, optimization-options, default-extensions

-------------------------------------------------------------------------------
-- Library
-------------------------------------------------------------------------------

library
    import: lib-options

    include-dirs:
          src
        , src/doctest
        , src/Streamly/Internal/Data/Stream

    hs-source-dirs:    src
    exposed-modules:
                     -- Internal modules, listed roughly in bottom up
                     -- dependency order To view dependency graph:
                     -- graphmod | dot -Tps > deps.ps
                       Streamly.Internal.Data.IsMap.HashMap
                     , Streamly.Internal.Data.Cont
                     , Streamly.Internal.Data.Channel
                     , Streamly.Internal.Data.Stream.MkType

                     -- streamly-concurrent
                     , Streamly.Internal.Control.Concurrent
                     , Streamly.Internal.Control.ForkLifted
                     , Streamly.Internal.Data.Atomics
                     , Streamly.Internal.Data.IOFinalizer.Lifted

                     , Streamly.Internal.Data.Stream.Prelude
                     , Streamly.Internal.Data.Unfold.Prelude
                     , Streamly.Internal.Data.Fold.Prelude
                     , Streamly.Internal.Data.Scanl.Prelude

                     -- streamly-unicode (depends on unicode-data)
                     , Streamly.Internal.Unicode.Utf8
                     , Streamly.Internal.Unicode.Char

                     -- streamly-network
                     , Streamly.Internal.Network.Socket
                     , Streamly.Internal.Network.Inet.TCP

                     -- Exposed modules
                     , Streamly.Data.Stream.MkType
                     , Streamly.Data.Stream.Prelude
                     , Streamly.Data.Fold.Prelude
                     , Streamly.Data.Scanl.Prelude

                     -- Network/IO
                     , Streamly.Network.Socket
                     , Streamly.Network.Inet.TCP

                     -- Deprecated
                     , Streamly.Data.Array.Foreign
                     , Streamly.Data.Fold.Tee
                     , Streamly.Prelude

                     -- Deprecated Internal modules
                     , Streamly.Internal.Data.SVar
                     , Streamly.Internal.Data.Stream.SVar

                     , Streamly.Internal.Data.Stream.Serial
                     , Streamly.Internal.Data.Stream.Zip
                     , Streamly.Internal.Data.Stream.Async
                     , Streamly.Internal.Data.Stream.Parallel
                     , Streamly.Internal.Data.Stream.Ahead
                     , Streamly.Internal.Data.Stream.ZipAsync

                     , Streamly.Internal.Data.Stream.IsStream

    if !impl(ghcjs) && flag(internal-dev)
        other-modules:
                       Streamly.Internal.System.IOVec.Type
                     , Streamly.Internal.System.IOVec
                     , Streamly.Internal.FileSystem.FDIO
                     , Streamly.Internal.FileSystem.FD

    if flag(internal-dev)
        exposed-modules: Streamly.Internal.Data.SmallArray
        -- Exposed modules show up on hackage irrespective of the flag, so keep
        -- it hidden.
        other-modules:  Streamly.Data.SmallArray
                      , Streamly.Internal.Data.SmallArray.Type

    if os(windows)
          exposed-modules: Streamly.Internal.FileSystem.Event.Windows

    if os(darwin)
          include-dirs:  src/Streamly/Internal
          c-sources: src/Streamly/Internal/FileSystem/Event/Darwin.c
          exposed-modules: Streamly.Internal.FileSystem.Event.Darwin

    if os(linux)
          exposed-modules: Streamly.Internal.FileSystem.Event.Linux

    if os(linux) || os(darwin) || os(windows)
          exposed-modules: Streamly.Internal.FileSystem.Event

    other-modules:
           Streamly.Internal.Data.Channel.Types
         , Streamly.Internal.Data.Channel.Dispatcher
         , Streamly.Internal.Data.Channel.Worker

         , Streamly.Internal.Data.Stream.Channel.Type
         , Streamly.Internal.Data.Stream.Channel.Dispatcher
         , Streamly.Internal.Data.Stream.Channel.Consumer
         , Streamly.Internal.Data.Stream.Channel.Append
         , Streamly.Internal.Data.Stream.Channel.Interleave
         , Streamly.Internal.Data.Stream.Channel.Operations
         , Streamly.Internal.Data.Stream.Channel
         , Streamly.Internal.Data.Stream.Concurrent
         , Streamly.Internal.Data.Stream.Time
         , Streamly.Internal.Data.Stream.Lifted

         , Streamly.Internal.Data.Fold.Time
         , Streamly.Internal.Data.Fold.Channel.Type
         , Streamly.Internal.Data.Fold.Channel
         , Streamly.Internal.Data.Fold.Concurrent
         , Streamly.Internal.Data.Scanl.Concurrent

         , Streamly.Internal.Data.Unfold.Exception
         , Streamly.Internal.Data.Unfold.SVar

         -- Deprecated
         , Streamly.Internal.Data.Stream.Common
         , Streamly.Internal.Data.Stream.IsStream.Type
         , Streamly.Internal.Data.Stream.IsStream.Generate
         , Streamly.Internal.Data.Stream.IsStream.Eliminate
         , Streamly.Internal.Data.Stream.IsStream.Transform
         , Streamly.Internal.Data.Stream.IsStream.Expand
         , Streamly.Internal.Data.Stream.IsStream.Reduce
         , Streamly.Internal.Data.Stream.IsStream.Exception
         , Streamly.Internal.Data.Stream.IsStream.Lift
         , Streamly.Internal.Data.Stream.IsStream.Top
         , Streamly.Internal.Data.Stream.IsStream.Combinators
         , Streamly.Internal.Data.Stream.IsStream.Common
         , Streamly.Internal.Data.Stream.IsStream.Enumeration

         , Streamly.Internal.Data.Stream.SVar.Generate
         , Streamly.Internal.Data.Stream.SVar.Eliminate

         , Streamly.Internal.Data.Fold.SVar

         , Streamly.Internal.Data.SVar.Worker
         , Streamly.Internal.Data.SVar.Dispatch
         , Streamly.Internal.Data.SVar.Pull

    build-depends:
                    -- Core libraries shipped with ghc, the min and max
                    -- constraints of these libraries should match with
                    -- the GHC versions we support. This is to make sure that
                    -- packages depending on the "ghc" package (packages
                    -- depending on doctest is a common example) can
                    -- depend on streamly.
                       base              >= 4.12  && < 4.23
                     , fusion-plugin-types >= 0.1 && < 0.2
                     , containers        >= 0.6.0 && < 0.9
                     , deepseq           >= 1.4.4 && < 1.6
                     , exceptions        >= 0.8.0 && < 0.11
                     , mtl               >= 2.2.2 && < 2.4
                     , transformers      >= 0.5.5 && < 0.7
                     , template-haskell  >= 2.14  && < 2.25

                     -- The core streamly package
                     , streamly-core     >= 0.3.0 && < 0.3.2

                     , hashable          >= 1.3   && < 1.6
                     , unordered-containers >= 0.2 && < 0.3
                     , heaps             >= 0.3     && < 0.5

                    -- concurrency
                     , lockfree-queue    >= 0.2.4 && < 0.3

                     , unicode-data      >= 0.1 && < 0.9

                    -- Network
                    -- network version 3.2.8 is broken on windows
                     , network           >= 2.6 && < 3.3


    if impl(ghc < 9.10)
      build-depends:   atomic-primops    >= 0.8   && < 0.9
    else
      build-depends:   atomic-primops    >= 0.8.8 && < 0.9

    if impl(ghc < 9.6)
      build-depends:   transformers-base >= 0.4   && < 0.5

    if flag(internal-use-unliftio)
      build-depends:   unliftio-core     >= 0.2 && < 0.3
    else
      build-depends:   monad-control     >= 1.0 && < 1.1

    if flag(internal-dev)
      build-depends: primitive >= 0.5.4 && < 0.10

    -- For FileSystem.Event module
    if os(linux)
      build-depends: directory >= 1.2.2 && < 1.4

    if os(windows)
      build-depends: Win32 >= 2.6 && < 2.15

    if os(darwin)
      build-depends: directory >= 1.2.2 && < 1.4
      frameworks: Cocoa

    if flag(inspection)
      build-depends:   inspection-testing >= 0.4   && < 0.7

    -- Array uses a Storable constraint in dev build making several inspection
    -- tests fail
    if flag(internal-dev) && flag(inspection)
      build-depends: inspection-and-dev-flags-cannot-be-used-together