packages feed

streamly-0.9.0: streamly.cabal

cabal-version:      2.2
name:               streamly
version:            0.9.0
synopsis:           Streaming, dataflow programming and declarative concurrency
description:
  Streamly comprises two packages, the
  <https://hackage.haskell.org/package/streamly-core streamly-core> package
  provides functionality that depends only on boot libraries, and
  the <https://hackage.haskell.org/package/streamly streamly> package
  provides additional functionality like concurrency, time, lifted
  exceptions, and networking.  For unified documentation visit
  <https://streamly.composewell.com the streamly website>.
  .
  Streamly provides unified, modular building blocks to build
  high-performance, concurrent, scalable applications in Haskell.  Stream
  fusion optimizations in streamly enable exceptional modularity with
  high performance comparable to C. Streamly complements the Haskell
  <https://hackage.haskell.org/package/base base> package, supplying the
  missing functionality to quickly build general-purpose applications
  in Haskell. For high-level functionality built over streamly like
  streaming system processes, shell programming, GNU coreutils,
  statistics, and compression libraries please see the
  <https://streamly.composewell.com/ecosystem.html streamly ecosystem packages>.
  .
  Performance with modularity:
  .
  * Performance on par with C (<https://github.com/composewell/streaming-benchmarks Benchmarks>)
  * API close to standard Haskell lists (<https://github.com/composewell/streamly-examples Examples>)
  * Declarative concurrency with automatic scaling
  * Filesystem, fsnotify, network, and Unicode support included
  * More functionality is provided via many (<https://streamly.composewell.com/ecosystem.html ecosystem packages>)
  .
  Unified and powerful abstractions:
  .
  * Unifies streams, arrays, folds, and parsers
  * Unifies @Data.List@, @list-t@, and @logict@ with streaming
  * Unifies concurrency with standard streaming abstractions
  * Unifies reactive, time-domain programming with streaming
  * Interworks with other streaming libraries

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.7
                   , GHC==9.4.4
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:
    benchmark/*.hs
    benchmark/bench-runner/Main.hs
    benchmark/bench-runner/bench-runner.cabal
    benchmark/Streamly/Benchmark/Data/*.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/Ring/Unboxed.hs
    benchmark/Streamly/Benchmark/Data/Array/Mut.hs
    benchmark/Streamly/Benchmark/Data/Array/Stream.hs
    benchmark/Streamly/Benchmark/Data/Fold/Window.hs
    benchmark/Streamly/Benchmark/Data/Parser/*.hs
    benchmark/Streamly/Benchmark/Data/Stream/*.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
    docs/*.hs
    docs/streamly-docs.cabal
    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/Data/Array/ArrayMacros.h

    src/Streamly/Internal/FileSystem/Event/Darwin.h
    src/assert.hs
    src/config.h.in
    src/inline.hs
    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/Array/Mut.hs
    test/Streamly/Test/Data/Ring/Unboxed.hs
    test/Streamly/Test/Data/Array/Stream.hs
    test/Streamly/Test/Data/Parser/ParserD.hs
    test/Streamly/Test/Data/Stream/Concurrent.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/Handle.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/Fold/*.hs
    test/lib/Streamly/Test/Common.hs
    test/lib/Streamly/Test/Prelude/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
    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/Developer/Benchmarks.md
    docs/Developer/*.png
    docs/Developer/*.md
    docs/Developer/*.rst
    docs/Developer/*.png
    docs/Developer/*.md
    docs/Developer/*.rst
    docs/Developer/*.link
    docs/User/*.md
    docs/User/Tutorials/*.md
    docs/User/Tutorials/*.link
    docs/User/Tutorials/*.hs
    docs/User/HowTo/*.md
    docs/User/HowTo/*.link
    docs/User/HowTo/*.svg
    docs/User/Explanatory/*.md
    docs/User/Explanatory/streaming-pradigms.rst
    docs/User/ProjectRelated/*.md
    docs/User/ProjectRelated/*.link
    docs/User/ProjectRelated/ApiChangelogs/0.8.3-0.9.0.txt
    docs/User/ProjectRelated/ApiChangelogs/0.8.3.txt
    test/README.md
    docs/Developer/Tests.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 dev
  description: Development build
  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 use-unliftio
  description: Use unliftio-core instead of monad-control
  manual: True
  default: False

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

common compile-options
    default-language: Haskell2010

    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(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 flag(has-llvm)
      ghc-options: -fllvm

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

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

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

common default-extensions
    default-extensions:
        BangPatterns
        CApiFFI
        CPP
        ConstraintKinds
        DeriveDataTypeable
        DeriveGeneric
        DeriveTraversable
        ExistentialQuantification
        FlexibleContexts
        FlexibleInstances
        GeneralizedNewtypeDeriving
        InstanceSigs
        KindSignatures
        LambdaCase
        MagicHash
        MultiParamTypeClasses
        PatternSynonyms
        RankNTypes
        RecordWildCards
        ScopedTypeVariables
        TupleSections
        TypeApplications
        TypeFamilies
        TypeOperators
        ViewPatterns

        -- MonoLocalBinds, enabled by TypeFamilies, causes performance
        -- regressions. Disable it. This must come after TypeFamilies,
        -- otherwise TypeFamilies will enable it again.
        NoMonoLocalBinds

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

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(dev) || flag(debug) || !flag(opt)
    ghc-options: -fno-ignore-asserts

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

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

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

    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.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.Channel.Types
                     , Streamly.Internal.Data.Stream.Channel.Dispatcher
                     , Streamly.Internal.Data.Stream.Channel.Worker

                     , Streamly.Internal.Data.Unfold.Exception
                     , Streamly.Internal.Data.Fold.Concurrent.Channel.Type
                     , Streamly.Internal.Data.Fold.Concurrent.Channel
                     , Streamly.Internal.Data.Fold.Concurrent
                     , Streamly.Data.Fold.Tee

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

                     -- 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

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

                     -- Deprecated
                     , Streamly
                     , Streamly.Data.Unicode.Stream
                     , Streamly.Memory.Array
                     , Streamly.Data.Array.Foreign
                     , Streamly.Prelude

                     -- Deprecated Internal modules
                     , Streamly.Internal.Data.SVar.Worker
                     , Streamly.Internal.Data.SVar.Dispatch
                     , Streamly.Internal.Data.SVar.Pull
                     , Streamly.Internal.Data.SVar

                     , Streamly.Internal.Data.Unfold.SVar
                     , Streamly.Internal.Data.Fold.SVar
                     , Streamly.Internal.Data.Fold.Async
                     , Streamly.Internal.Data.Stream.SVar.Generate
                     , Streamly.Internal.Data.Stream.SVar.Eliminate

                     , 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.Type
                     , Streamly.Internal.Data.Stream.IsStream.Combinators
                     , Streamly.Internal.Data.Stream.IsStream.Common
                     , Streamly.Internal.Data.Stream.IsStream.Enumeration
                     , 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

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

    if flag(dev)
        exposed-modules:  Streamly.Data.SmallArray
                        , Streamly.Internal.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.m
          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.Data.Stream.Exception
         , Streamly.Data.Stream.Concurrent
         , Streamly.Data.Stream.Time

    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.19
                     , containers        >= 0.6.0 && < 0.7
                     , deepseq           >= 1.4.4 && < 1.5
                     , exceptions        >= 0.8.0 && < 0.11
                     , mtl               >= 2.2.2 && < 2.4
                     , transformers      >= 0.5.5 && < 0.7
                     , template-haskell  >= 2.14  && < 2.20

                     -- The core streamly package
                     , streamly-core     == 0.1.0

                     , hashable          >= 1.3   && < 1.5
                     , unordered-containers >= 0.2 && < 0.3

                     -- XXX to be removed
                     , transformers-base >= 0.4   && < 0.5
                     , heaps             >= 0.3     && < 0.5

                    -- concurrency
                     , atomic-primops    >= 0.8   && < 0.9
                     , lockfree-queue    >= 0.2.4 && < 0.3

                     , unicode-data      >= 0.1 && < 0.5

                    -- Network
                     , network           >= 2.6   && < 3.2

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

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

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

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

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

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

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