streamly/streamly.cabal
Harendra Kumar e249c4da2d Use StreamD by default, expose StreamK as separate module
Basically remove depdency on GHC rewrite rules. The reason for
separating StreamD and StreamK instead of using rewrite rules:

* Separate types provide better reasoning for the programmer about
  performance. Each type has its own pros and cons and the programmer
  can choose the best one based on the use case.
* rewrite rules are fragile, led to broken performance in the past dues
  to change in GHC.
* Rewrite rules lead to optimization problems, blocking fusion in some
  cases, specifically when combining multiple operations e.g. (filter . drop).
* Rewrite rules lead to problems when calling a function recursively. For
  example, the StreamD version of foldBreak cannot be used recursively when
  wrapped in rewrite rules because each recursive call adds a roundtrip
  conversion from D to K and back to D. We can use the StreamK versions of
  these though because the rewrite rule gets eliminated in that case.
* If we have a unified module, we need two different versions of several
  operations e.g. appendK and appendD, both are useful in different cases.
2023-02-06 22:09:26 +05:30

533 lines
19 KiB
Plaintext

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.4
, GHC==9.4.2
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/Parser/Chunked.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/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/API-changelog.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.18
, 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.8
-- For FileSystem.Event module
if os(linux)
build-depends: directory >= 1.2.2 && < 1.4
if os(windows)
build-depends: Win32 >= 2.6 && < 2.13
if os(darwin)
build-depends: directory >= 1.2.2 && < 1.4
frameworks: Cocoa
if flag(inspection)
build-depends: 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