packages feed

streamly-0.8.1: streamly.cabal

cabal-version:      2.2
name:               streamly
version:            0.8.1
synopsis:           Dataflow programming and declarative concurrency
description:
  Browse the documentation at https://streamly.composewell.com.
  .
  Streamly is a streaming framework to build reliable and scalable
  software systems from modular building blocks using dataflow
  programming and declarative concurrency.  Stream fusion optimizations
  in streamly result in high-performance, modular combinatorial
  programming.
  .
  Performance with simplicity:
  .
  * 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 provided via many ecosystem packages
  .
  Unified and powerful abstractions:
  .
  * Unifies unfolds, arrays, folds, and parsers with streaming
  * Unifies @Data.List@, @list-t@, and @logict@ with streaming
  * Unifies concurrency with standard streaming abstractions
  * Provides time-domain combinators for reactive programming
  * Interworks with bytestring and 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.0.2
                   , GHC==8.4.4
                   , GHC==8.6.5
                   , GHC==8.8.4
                   , GHC==8.10.7
                   , GHC==9.0.1
                   , GHC==9.2.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:
    benchmark/*.hs
    benchmark/bench-report/BenchReport.hs
    benchmark/bench-report/bench-report.cabal
    benchmark/bench-report/bin/bench-runner.sh
    benchmark/bench-report/bin/build-lib.sh
    benchmark/bench-report/cabal.project
    benchmark/Streamly/Benchmark/Data/*.hs
    benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.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/Prelude/Serial/*.hs
    benchmark/Streamly/Benchmark/Unicode/*.hs
    benchmark/lib/Streamly/Benchmark/*.hs
    benchmark/lib/Streamly/Benchmark/Common/*.hs
    benchmark/streamly-benchmarks.cabal
    bin/bench.sh
    bin/bench-config.sh
    bin/mk-hscope.sh
    bin/mk-tags.sh
    bin/targets.sh
    bin/test.sh
    configure
    configure.ac
    docs/*.hs
    docs/streamly-docs.cabal
    src/Streamly/Internal/Data/Stream/Instances.hs
    src/Streamly/Internal/Data/Stream/PreludeCommon.hs
    src/Streamly/Internal/Data/Time/Clock/config-clock.h
    src/Streamly/Internal/Data/Array/PrimInclude.hs
    src/Streamly/Internal/Data/Array/Prim/TypesInclude.hs
    src/Streamly/Internal/Data/Array/Prim/MutTypesInclude.hs
    src/Streamly/Internal/FileSystem/Event/Darwin.h
    src/config.h.in
    src/inline.hs
    test/Streamly/Test/Common/Array.hs
    test/Streamly/Test/Data/*.hs
    test/Streamly/Test/Data/Array/Prim.hs
    test/Streamly/Test/Data/Array/Prim/Pinned.hs
    test/Streamly/Test/Data/Array/Foreign.hs
    test/Streamly/Test/Data/Array/Stream/Foreign.hs
    test/Streamly/Test/Data/Parser/ParserD.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/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
    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
    dev/*.md
    dev/*.png
    dev/*.rst
    docs/*.md
    docs/*.link
    docs/*.rst
    docs/*.svg
    docs/API-changelog.txt
    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 dev
  description: Development build
  manual: True
  default: False

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

flag no-fusion
  description: Disable rewrite rules for stream fusion
  manual: True
  default: False

flag streamk
  description: Use CPS style streams when possible
  manual: True
  default: False

flag use-c-malloc
  description: Use C malloc instead of GHC malloc
  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

-------------------------------------------------------------------------------
-- 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(streamk)
      cpp-options:    -DUSE_STREAMK_ONLY

    if flag(no-fusion)
      cpp-options:    -DDISABLE_FUSION

    if flag(dev)
      cpp-options:    -DDEVBUILD

    if flag(inspection)
      cpp-options:    -DINSPECTION

    if flag(use-c-malloc)
      cpp-options:    -DUSE_C_MALLOC

    ghc-options:      -Wall
                      -Wcompat
                      -Wunrecognised-warning-flags
                      -Widentities
                      -Wincomplete-record-updates
                      -Wincomplete-uni-patterns
                      -Wredundant-constraints
                      -Wnoncanonical-monad-instances
                      -Rghc-timing

    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

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

    js-sources: jsbits/clock.js
    include-dirs:    src, src/Streamly/Internal/Data/Stream
    if os(windows)
      c-sources:     src/Streamly/Internal/Data/Time/Clock/Windows.c
      exposed-modules: Streamly.Internal.FileSystem.Event.Windows
      build-depends: Win32 >= 2.6 && < 2.13

    if os(darwin)
      frameworks:    Cocoa
      include-dirs:  src/Streamly/Internal
      c-sources:     src/Streamly/Internal/Data/Time/Clock/Darwin.c
                   , src/Streamly/Internal/FileSystem/Event/Darwin.m
      exposed-modules:
                     Streamly.Internal.FileSystem.Event.Darwin

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

    hs-source-dirs:    src
    other-modules:
                       Streamly.Data.Array
                     , Streamly.Data.Prim.Array
                     , Streamly.Data.SmallArray

    exposed-modules:
                       Streamly.Prelude
                     , Streamly.Data.Unfold
                     , Streamly.Data.Fold
                     , Streamly.Data.Fold.Tee
                     , Streamly.Data.Array.Foreign

                     -- Text Processing
                     , Streamly.Unicode.Stream

                     -- Filesystem/IO
                     , Streamly.FileSystem.Handle
                     , Streamly.Console.Stdio

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

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

                     -- Internal modules, listed roughly in dependency order
                     -- To view dependency graph:
                     -- graphmod | dot -Tps > deps.ps

                     -- streamly-base
                     , Streamly.Internal.BaseCompat
                     , Streamly.Internal.Control.Exception
                     , Streamly.Internal.Control.Monad
                     , Streamly.Internal.Control.Concurrent
                     , Streamly.Internal.Data.Cont
                     , Streamly.Internal.Data.Tuple.Strict
                     , Streamly.Internal.Data.Maybe.Strict
                     , Streamly.Internal.Data.Either.Strict
                     , Streamly.Internal.Foreign.Malloc
                     , Streamly.Internal.Data.Atomics
                     , Streamly.Internal.Data.IOFinalizer
                     , Streamly.Internal.Data.Time
                     , Streamly.Internal.Data.Time.TimeSpec
                     , Streamly.Internal.Data.Time.Units
                     , Streamly.Internal.Data.Time.Clock.Type
                     , Streamly.Internal.Data.Time.Clock
                     , Streamly.Internal.System.IO
                     , Streamly.Internal.System.IOVec.Type

                     -- streamly-core-stream
                     , Streamly.Internal.Data.SVar.Type
                     , Streamly.Internal.Data.SVar.Worker
                     , Streamly.Internal.Data.SVar.Dispatch
                     , Streamly.Internal.Data.SVar.Pull
                     , Streamly.Internal.Data.SVar
                     , Streamly.Internal.Data.Stream.StreamK.Type
                     , Streamly.Internal.Data.Fold.Step
                     , Streamly.Internal.Data.Refold.Type
                     , Streamly.Internal.Data.Fold.Type
                     , Streamly.Internal.Data.Stream.StreamD.Step
                     , Streamly.Internal.Data.Stream.StreamD.Type
                     , Streamly.Internal.Data.Stream.StreamDK.Type
                     , Streamly.Internal.Data.Unfold.Type
                     , Streamly.Internal.Data.Producer.Type
                     , Streamly.Internal.Data.Producer
                     , Streamly.Internal.Data.Producer.Source
                     , Streamly.Internal.Data.Sink.Type
                     , Streamly.Internal.Data.Parser.ParserK.Type
                     , Streamly.Internal.Data.Parser.ParserD.Type
                     , Streamly.Internal.Data.Pipe.Type

                    -- Unboxed IORef
                     , Streamly.Internal.Data.IORef.Prim

                     -- streamly-core-array
                     -- May depend on streamly-core-stream
                     , Streamly.Internal.Data.Array.Foreign.Mut.Type
                     , Streamly.Internal.Data.Array.Foreign.Mut
                     , Streamly.Internal.Data.Array.Foreign.Type
                     , Streamly.Internal.Data.Array.Prim.Mut.Type
                     , Streamly.Internal.Data.Array.Prim.Type
                     , Streamly.Internal.Data.Array.Prim.Pinned.Mut.Type
                     , Streamly.Internal.Data.Array.Prim.Pinned.Type
                     , Streamly.Internal.Data.SmallArray.Type

                     -- streamly-base-streams
                     -- StreamD depends on streamly-core-array
                     , Streamly.Internal.Data.Stream.StreamD.Generate
                     , Streamly.Internal.Data.Stream.StreamD.Eliminate
                     , Streamly.Internal.Data.Stream.StreamD.Nesting
                     , Streamly.Internal.Data.Stream.StreamD.Transform
                     , Streamly.Internal.Data.Stream.StreamD.Exception
                     , Streamly.Internal.Data.Stream.StreamD.Lift
                     , Streamly.Internal.Data.Stream.StreamD
                     , Streamly.Internal.Data.Stream.StreamDK
                     , Streamly.Internal.Data.Stream.Prelude

                     , Streamly.Internal.Data.Parser.ParserD.Tee
                     , Streamly.Internal.Data.Parser.ParserD

                     -- streamly-core
                     , Streamly.Internal.Data.Unfold
                     , Streamly.Internal.Data.Unfold.SVar
                     , Streamly.Internal.Data.Unfold.Enumeration
                     , Streamly.Internal.Data.Fold.Tee
                     , Streamly.Internal.Data.Fold
                     , Streamly.Internal.Data.Fold.SVar
                     , Streamly.Internal.Data.Fold.Async
                     , Streamly.Internal.Data.Sink
                     , Streamly.Internal.Data.Parser
                     , Streamly.Internal.Data.Pipe

                     , Streamly.Internal.Data.Stream.SVar.Generate
                     , Streamly.Internal.Data.Stream.SVar.Eliminate
                     , Streamly.Internal.Data.Stream.Serial
                     , Streamly.Internal.Data.Stream.Async
                     , Streamly.Internal.Data.Stream.Parallel
                     , Streamly.Internal.Data.Stream.Ahead
                     , Streamly.Internal.Data.Stream.Zip
                     , Streamly.Internal.Data.List

                     , 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

                     -- streamly-arrays
                     -- May depend on streamly-core
                     , Streamly.Internal.Data.Array
                     , Streamly.Internal.Data.Array.Foreign
                     , Streamly.Internal.Data.Array.Prim
                     , Streamly.Internal.Data.Array.Prim.Pinned
                     , Streamly.Internal.Data.SmallArray
                     , Streamly.Internal.Data.Array.Stream.Mut.Foreign
                     , Streamly.Internal.Data.Array.Stream.Foreign
                     , Streamly.Internal.Data.Array.Stream.Fold.Foreign

                    -- Memory storage
                     , Streamly.Internal.Ring.Foreign
                     , Streamly.Internal.Data.Ring

                     -- IOVec (depends on arrays/streams)
                     , Streamly.Internal.System.IOVec

                     -- streamly-unicode
                     , Streamly.Internal.Unicode.Stream
                     , Streamly.Internal.Unicode.Utf8
                     , Streamly.Internal.Unicode.Char
                     , Streamly.Internal.Unicode.Char.Parser
                     , Streamly.Internal.Unicode.Array.Char
                     , Streamly.Internal.Unicode.Array.Prim.Pinned

                     -- streamly-serde
                     , Streamly.Internal.Data.Binary.Decode

                     -- streamly-filesystem
                     , Streamly.Internal.FileSystem.Handle
                     , Streamly.Internal.FileSystem.Dir
                     , Streamly.Internal.FileSystem.File
                     , Streamly.Internal.FileSystem.FDIO
                     , Streamly.Internal.FileSystem.FD
                     , Streamly.Internal.FileSystem.Event

                     -- streamly-console
                     , Streamly.Internal.Console.Stdio

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

                     -- Only used for benchmarks
                     , Streamly.Internal.Data.Stream.StreamK

    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.9   &&  < 5
                     , containers        >= 0.5   && < 0.7
                     , deepseq           >= 1.4.1 && < 1.5
                     , directory         >= 1.2.2 && < 1.4
                     , exceptions        >= 0.8   && < 0.11
                     , ghc-prim          >= 0.2   && < 0.9
                     , mtl               >= 2.2   && < 3
                     , primitive         >= 0.5.4 && < 0.8
                     , transformers      >= 0.4   && < 0.7

                     , heaps             >= 0.3     && < 0.5
                     , filepath          >= 1.2.0.0 && < 1.4.3.0

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

                    -- transfomers
                     , monad-control     >= 1.0   && < 2
                     , transformers-base >= 0.4   && < 0.5

                     , fusion-plugin-types >= 0.1 && < 0.2
                     , unicode-data      >= 0.1   && < 0.3

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


  if flag(inspection)
    build-depends:     template-haskell   >= 2.14  && < 2.17
                     , inspection-testing >= 0.4   && < 0.5

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