streamly/streamly.cabal
2021-06-15 17:53:20 +05:30

559 lines
20 KiB
Plaintext

cabal-version: 2.2
name: streamly
version: 0.7.2
synopsis: Dataflow programming and declarative concurrency
description:
<https://streamly.composewell.com Streamly> is a framework to build
reliable and scalable software systems from modular building blocks
using dataflow programming (streaming) and declarative concurrency.
Powerful stream fusion framework in streamly allows high-performance,
modular combinatorial programming. Key features include:
.
* Performance on par with C (<https://github.com/composewell/streaming-benchmarks Benchmarks>)
* Simple API, similar 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
.
Simple, unified, and powerful abstractions:
.
* Unifies streams, arrays, folds, and parsers
* Unified streams and arrays obviate the need for text and bytestring
* Unifies Data.List, list-t, and logict with streams
* Supports numerous time-domain combinators
* Interworks with other streaming libraries
* Arrays interwork with bytestring
.
We recommend the better-organized module documentation on the
<https://streamly.composewell.com Streamly homepage>.
.
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.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: Custom
extra-source-files:
.circleci/config.yml
.ghci
.github/workflows/haskell.yml
.gitignore
.hlint.ignore
.hlint.yaml
CONTRIBUTING.md
Changelog.md
INSTALL.md
MAINTAINING.md
README.md
appveyor.yml
benchmark/*.hs
benchmark/README.md
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-exec-one.sh
bin/build-lib.sh
bin/ghc.sh
bin/run-ci.sh
bin/mk-hscope.sh
bin/mk-tags.sh
bin/targets.sh
bin/test.sh
charts-0/streamly-vs-list-time.svg
configure
configure.ac
credits/*.md
credits/Yampa-0.10.6.2.txt
credits/base-4.12.0.0.txt
credits/bjoern-2008-2009.txt
credits/clock-0.7.2.txt
credits/foldl-1.4.5.txt
credits/fsnotify-0.3.0.1.txt
credits/hfsevents-0.1.6.txt
credits/pipes-concurrency-2.0.8.txt
credits/primitive-0.7.0.0.txt
credits/transient-0.5.5.txt
credits/vector-0.12.0.2.txt
default.nix
design/*.md
design/*.png
design/*.rst
docs/Overview.md
docs/Build.md
docs/streamly-vs-async.md
docs/streamly-vs-lists.md
docs/transformers.md
examples/README.md
src/Streamly/Internal/Data/Stream/Instances.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/README.md
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/Parser/ParserD.hs
test/Streamly/Test/FileSystem/Event.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/Stream.hs
test/lib/Streamly/Test/Common.hs
test/lib/Streamly/Test/Prelude/Common.hs
test/streamly-tests.cabal
test/version-bounds.hs
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 doctests
description: Build doctests test suite
manual: True
default: False
custom-setup
setup-depends:
base >= 4 && <5,
cabal-doctest >= 1 && <1.1,
Cabal >= 2.2 && < 4
-------------------------------------------------------------------------------
-- 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(dev) || flag(debug)
ghc-options: -fno-ignore-asserts
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
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
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.1)
default-extensions: TypeApplications
if impl(ghc >= 8.6)
default-extensions: QuantifiedConstraints
js-sources: jsbits/clock.js
include-dirs: src
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.10
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
-- documentation
, Streamly.Tutorial
-- 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-core-stream
, Streamly.Internal.Data.SVar
, Streamly.Internal.Data.Stream.StreamK.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.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
, Streamly.Internal.Data.Stream.StreamK
-- 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.Fold.Tee
, Streamly.Internal.Data.Fold
, Streamly.Internal.Data.Sink
, Streamly.Internal.Data.Parser
, Streamly.Internal.Data.Pipe
, Streamly.Internal.Data.Stream.SVar
, 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.Stream.IsStream.Combinators
, Streamly.Internal.Data.Stream.IsStream.Common
, Streamly.Internal.Data.Stream.IsStream.Types
, 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.Internal.Data.List
-- 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-unicode
, Streamly.Internal.Unicode.Stream
, Streamly.Internal.Unicode.Char
, 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.IOVec
, Streamly.Internal.FileSystem.FDIO
, Streamly.Internal.FileSystem.FD
-- streamly-console
, Streamly.Internal.Console.Stdio
-- streamly-network
, Streamly.Internal.Network.Socket
, Streamly.Internal.Network.Inet.TCP
build-depends:
-- Core libraries shipped with ghc, the min and max
-- constraints of these libraries should match with
-- the GHC versions we support
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.8
, mtl >= 2.2 && < 3
, primitive >= 0.5.4 && < 0.8
, transformers >= 0.4 && < 0.6
, heaps >= 0.3 && < 0.5
-- 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
-- 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
test-suite doctests
type: exitcode-stdio-1.0
main-is: doctests.hs
if flag(doctests)
build-depends:
base
, base-compat >=0.10.5 && <0.12
, doctest >=0.15 && <0.18
, streamly
else
buildable: False
ghc-options: -Wall -threaded
hs-source-dirs: .
default-language: Haskell2010