streamly/streamly.cabal

1123 lines
35 KiB
Plaintext
Raw Normal View History

cabal-version: 2.2
name: streamly
2019-11-15 01:55:51 +03:00
version: 0.7.0
2017-10-20 07:06:00 +03:00
synopsis: Beautiful Streaming, Concurrent and Reactive Composition
2017-12-02 18:39:06 +03:00
description:
Streamly is a framework for writing programs in a high level, declarative
data flow programming paradigm. It provides a simple API, very close to
standard Haskell lists. A program is expressed as a composition of data
processing pipes, generally known as streams. Streams can be generated,
merged, chained, mapped, zipped, and consumed concurrently enabling a high
level, declarative yet concurrent composition of programs. Programs can be
concurrent or non-concurrent without any significant change. Concurrency is
auto scaled based on consumption rate. Programmers do not have to be aware
of threads, locking or synchronization to write scalable concurrent programs.
Streamly provides C like performance, orders of magnitude better compared to
existing streaming libraries.
2017-10-20 07:06:00 +03:00
.
Streamly is designed to express the full spectrum of programs with highest
performance. Do not think that if you are writing a small and simple program
it may not be for you. It expresses a small "hello world" program with the
same efficiency, simplicity and elegance as a large scale concurrent
application. It unifies many different aspects of special purpose libraries
into a single yet simple framework.
.
Streamly covers the functionality provided by Haskell lists as well as the
functionality provided by streaming libraries like
2018-06-14 23:38:06 +03:00
<https://hackage.haskell.org/package/streaming streaming>,
<https://hackage.haskell.org/package/pipes pipes>, and
<https://hackage.haskell.org/package/conduit conduit> with a simpler API and
better performance. Streamly provides
2019-05-12 23:35:22 +03:00
advanced stream composition including various ways of appending, merging,
zipping, splitting, grouping, distributing, partitioning and unzipping of
streams with true streaming and with concurrency. Streamly subsumes the
2018-06-14 23:38:06 +03:00
functionality of list transformer libraries like @pipes@ or
<https://hackage.haskell.org/package/list-t list-t> and also the logic
programming library <https://hackage.haskell.org/package/logict logict>.
The grouping, splitting and windowing combinators in streamly can be compared
to the window operators in <https://flink.apache.org/ Apache Flink>.
However, compared to Flink streamly has a pure functional, succinct and
expressive API.
.
The concurrency capabilities of streamly are much more advanced and powerful
compared to the basic concurrency functionality provided by the
<https://hackage.haskell.org/package/async async> package. Streamly is a
first class reactive programming library. If you are familiar with
<http://reactivex.io/ Reactive Extensions> you will find that it is very
similar. For most RxJs combinators you can find or write corresponding ones
in streamly. Streamly can be used as an alternative to
<https://hackage.haskell.org/package/Yampa Yampa> or
<https://hackage.haskell.org/package/reflex reflex> as well.
.
Streamly focuses on practical engineering with high performance. From well
written streamly programs one can expect performance competitive to C. High
performance streaming eliminates the need for string and text libraries like
2019-05-12 23:35:22 +03:00
<https://hackage.haskell.org/package/bytestring bytestring>,
<https://hackage.haskell.org/package/text text> and their lazy and strict
flavors. The confusion and cognitive overhead arising from different
string types is eliminated. The two fundamental types in streamly are arrays
for storage and streams for processing. Strings and text are simply streams
or arrays of 'Char' as they should be. Arrays in streamly have performance
at par with the vector library.
.
Where to find more information:
.
2020-01-02 09:06:11 +03:00
* /Quick Overview/: <#readme README file> in the package
* /Building/: <src/docs/Build.md Build guide> for optimal performance
* /Detailed Tutorial/: "Streamly.Tutorial" module in the haddock documentation
* /Interoperation/: "Streamly.Tutorial" module for interop with other
streaming libraries
* /Reference Documentation/: Haddock documentation for the respective modules
* /Examples/: <src/examples examples directory> in the package
* /Guides/: <src/docs docs directory> in the package, for documentation on
advanced topics, limitations, semantics of the library or on specific use
cases.
2018-10-26 21:34:55 +03:00
* <https://github.com/composewell/streaming-benchmarks Streaming Benchmarks>
* <https://github.com/composewell/concurrency-benchmarks Concurrency Benchmarks>
.
2017-12-02 18:39:06 +03:00
2017-12-05 18:40:43 +03:00
homepage: https://github.com/composewell/streamly
bug-reports: https://github.com/composewell/streamly/issues
license: BSD-3-Clause
license-file: LICENSE
2018-12-30 22:17:49 +03:00
tested-with: GHC==7.10.3
, GHC==8.0.2
, GHC==8.4.4
, GHC==8.6.5
, GHC==8.8.1
author: Harendra Kumar
maintainer: streamly@composewell.com
copyright: 2017 Harendra Kumar
2017-09-06 06:29:43 +03:00
category: Control, Concurrency, Streaming, Reactivity
stability: Experimental
build-type: Configure
2017-12-04 13:39:36 +03:00
extra-source-files:
Changelog.md
2019-01-21 07:36:50 +03:00
credits/*.md
2019-11-15 02:14:20 +03:00
credits/base-4.12.0.0.txt
credits/bjoern-2008-2009.txt
2019-01-21 07:36:50 +03:00
credits/clock-0.7.2.txt
credits/foldl-1.4.5.txt
credits/pipes-concurrency-2.0.8.txt
credits/pipes-concurrency.txt
credits/transient-0.5.5.txt
credits/vector-0.12.0.2.txt
credits/Yampa-0.10.6.2.txt
2017-12-04 13:39:36 +03:00
README.md
docs/streamly-vs-async.md
2019-11-15 02:10:26 +03:00
docs/streamly-vs-lists.md
docs/transformers.md
docs/Build.md
design/*.md
design/*.png
bench.sh
2017-12-04 13:39:36 +03:00
stack.yaml
src/Streamly/Internal/Data/Stream/Instances.hs
src/inline.hs
configure.ac
configure
src/Streamly/Internal/Data/Time/config.h.in
extra-tmp-files:
config.log
config.status
autom4te.cache
src/Streamly/Internal/Data/Time/config.h
2017-12-04 13:39:36 +03:00
2017-10-18 09:21:38 +03:00
source-repository head
type: git
2017-12-05 18:40:43 +03:00
location: https://github.com/composewell/streamly
2017-10-18 09:21:38 +03:00
flag inspection
description: Enable inspection testing
manual: True
default: False
2019-11-08 19:44:07 +03:00
flag debug
description: Debug build with asserts enabled
manual: True
default: False
2017-09-14 06:10:50 +03:00
flag dev
description: Development build
2017-09-14 06:10:50 +03:00
manual: True
default: False
flag has-llvm
description: Use llvm backend for better performance
manual: True
default: False
flag no-charts
description: Disable chart generation
manual: True
default: False
2018-06-24 20:26:40 +03:00
flag no-fusion
description: Disable rewrite rules
manual: True
default: False
flag streamk
description: Use CPS style streams when possible
manual: True
default: False
2017-10-18 09:21:38 +03:00
flag examples
description: Build including examples
2017-10-18 09:21:38 +03:00
manual: True
default: False
flag examples-sdl
description: Build including SDL examples
manual: True
default: False
-------------------------------------------------------------------------------
-- Common stanzas
-------------------------------------------------------------------------------
common compile-options
default-language: Haskell2010
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
ghc-options: -Wall
if flag(has-llvm)
ghc-options: -fllvm
if flag(dev)
ghc-options: -Wmissed-specialisations
-Wall-missed-specialisations
2019-11-08 19:44:07 +03:00
if flag(dev) || flag(debug)
ghc-options: -fno-ignore-asserts
if impl(ghc >= 8.0)
ghc-options: -Wcompat
-Wunrecognised-warning-flags
-Widentities
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-Wnoncanonical-monad-instances
common optimization-options
ghc-options: -O2
-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
-- Compilation for coverage builds on CI machines takes too long without -O0
-- XXX we should use coverage flag for that, -O0 may take too long to run tests
-- in general.
common test-options
import: compile-options, threading-options
ghc-options: -O0
-fno-ignore-asserts
-- Used by maxrate test, benchmarks and executables
common exe-options
import: compile-options, optimization-options, threading-options
-- Some benchmarks are threaded some are not
-- XXX dependencies should be separated under bench-depends
common bench-options
import: compile-options, optimization-options
ghc-options: -with-rtsopts "-T -M256M"
build-depends: mtl >= 2.2 && < 3
common bench-options-threaded
import: compile-options, optimization-options
-- -threaded and -N2 is important because some GC and space leak issues
-- trigger only with these options.
ghc-options: -threaded -with-rtsopts "-T -N2 -M256M"
build-depends: mtl >= 2.2 && < 3
-------------------------------------------------------------------------------
-- Library
-------------------------------------------------------------------------------
library
import: lib-options
js-sources: jsbits/clock.js
include-dirs: src/Streamly/Internal/Data/Time
, src
if os(windows)
c-sources: src/Streamly/Internal/Data/Time/Windows.c
if os(darwin)
c-sources: src/Streamly/Internal/Data/Time/Darwin.c
hs-source-dirs: src
other-modules:
Streamly.Data.Array
, Streamly.Data.SmallArray
-- Memory storage
Streamly.Memory.Malloc
, Streamly.Memory.Ring
, Streamly.FileSystem.IOVec
, Streamly.FileSystem.FDIO
, Streamly.FileSystem.FD
, Streamly.Data.Prim.Array
exposed-modules:
Streamly.Prelude
, Streamly
2020-01-20 12:29:59 +03:00
, Streamly.Data.Array
, Streamly.Data.SmallArray
, Streamly.Data.Fold
2019-11-04 19:11:49 +03:00
, Streamly.Data.Unfold
, Streamly.Data.Unicode.Stream
-- IO devices
, Streamly.Memory.Array
, Streamly.FileSystem.Handle
, Streamly.Tutorial
2019-09-24 13:02:02 +03:00
-- Internal modules
, Streamly.Internal.Control.Monad
, Streamly.Internal.Data.Strict
2019-09-24 22:49:19 +03:00
, Streamly.Internal.Data.Atomics
, Streamly.Internal.Data.Time
, Streamly.Internal.Data.Time.Units
, Streamly.Internal.Data.Time.Clock
2019-09-25 08:30:44 +03:00
, Streamly.Internal.Data.SVar
2019-11-30 00:49:45 +03:00
, Streamly.Internal.Data.Array
, Streamly.Internal.Data.Prim.Array
, Streamly.Internal.Data.SmallArray
, Streamly.Internal.Memory.Array.Types
2019-09-29 14:18:44 +03:00
, Streamly.Internal.Memory.Array
2019-09-24 13:02:02 +03:00
, Streamly.Internal.Memory.ArrayStream
, Streamly.Internal.Data.Fold.Types
, Streamly.Internal.Data.Fold
2019-09-25 14:10:16 +03:00
, Streamly.Internal.Data.Sink.Types
, Streamly.Internal.Data.Sink
-- Base streams
, Streamly.Internal.Data.Stream.StreamK.Type
, Streamly.Internal.Data.Stream.StreamK
, Streamly.Internal.Data.Stream.StreamD.Type
, Streamly.Internal.Data.Stream.StreamD
, Streamly.Internal.Data.Stream.StreamDK.Type
, Streamly.Internal.Data.Stream.StreamDK
, Streamly.Internal.Data.Stream.Enumeration
, Streamly.Internal.Data.Stream.Prelude
-- Higher level streams
, 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.Combinators
, Streamly.Internal.Data.Unfold.Types
, Streamly.Internal.Data.Unfold
2019-09-24 22:34:30 +03:00
, Streamly.Internal.Data.Pipe.Types
, Streamly.Internal.Data.Pipe
, Streamly.Internal.Data.List
, Streamly.Internal.FileSystem.Handle
2019-11-08 15:27:54 +03:00
, Streamly.Internal.FileSystem.Dir
, Streamly.Internal.FileSystem.File
, Streamly.Internal.Data.Unicode.Stream
, Streamly.Internal.Data.Unicode.Char
, Streamly.Internal.Memory.Unicode.Array
, Streamly.Internal.Prelude
2019-12-27 18:29:17 +03:00
-- Mutable data
, Streamly.Internal.Mutable.Prim.Var
if !impl(ghcjs)
exposed-modules:
Streamly.Network.Socket
, Streamly.Network.Inet.TCP
2019-09-30 20:55:43 +03:00
, 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.8 && < 5
, containers >= 0.5 && < 0.7
, deepseq >= 1.4.1 && < 1.5
2019-11-08 15:27:54 +03:00
, directory >= 1.3 && < 1.4
, ghc-prim >= 0.2 && < 0.6
, transformers >= 0.4 && < 0.6
, heaps >= 0.3 && < 0.4
, primitive >= 0.6.4.0 && < 0.8
-- concurrency
, atomic-primops >= 0.8 && < 0.9
, lockfree-queue >= 0.2.3 && < 0.3
-- transfomers
2018-03-18 09:52:59 +03:00
, exceptions >= 0.8 && < 0.11
2017-08-31 03:41:46 +03:00
, monad-control >= 1.0 && < 2
, mtl >= 2.2 && < 3
, transformers-base >= 0.4 && < 0.5
if !impl(ghcjs)
build-depends:
network >= 2.6 && < 4
2017-09-08 20:10:23 +03:00
if impl(ghc < 8.0)
build-depends:
semigroups >= 0.18 && < 0.19
-- 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 suites
-------------------------------------------------------------------------------
test-suite test
import: test-options
type: exitcode-stdio-1.0
main-is: Main.hs
2019-01-10 03:06:23 +03:00
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
2017-08-31 03:41:46 +03:00
, base >= 4.8 && < 5
, hspec >= 2.0 && < 3
, containers >= 0.5 && < 0.7
, transformers >= 0.4 && < 0.6
, mtl >= 2.2 && < 3
, exceptions >= 0.8 && < 0.11
default-language: Haskell2010
test-suite internal-prelude-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Internal/Prelude.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
default-language: Haskell2010
2019-07-29 01:46:23 +03:00
test-suite pure-streams-base
import: test-options
2019-07-29 01:46:23 +03:00
type: exitcode-stdio-1.0
main-is: PureStreams.hs
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, hspec >= 2.0 && < 3
default-language: Haskell2010
2019-09-25 22:35:15 +03:00
test-suite pure-streams-streamly
import: test-options
type: exitcode-stdio-1.0
main-is: PureStreams.hs
hs-source-dirs: test
cpp-options: -DUSE_STREAMLY_LIST
build-depends:
streamly
, base >= 4.8 && < 5
, hspec >= 2.0 && < 3
default-language: Haskell2010
test-suite properties
import: test-options
type: exitcode-stdio-1.0
main-is: Prop.hs
2019-01-10 03:06:23 +03:00
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
2019-05-10 11:06:02 +03:00
test-suite array-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Array.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
cpp-options: -DTEST_ARRAY
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
test-suite internal-data-fold-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Internal/Data/Fold.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, hspec >= 2.0 && < 3
, QuickCheck >= 2.10 && < 2.14
default-language: Haskell2010
test-suite data-array-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Array.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
test-suite smallarray-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Array.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
cpp-options: -DTEST_SMALL_ARRAY
build-depends:
streamly
2020-01-20 12:30:46 +03:00
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
test-suite primarray-test
import: test-options
type: exitcode-stdio-1.0
main-is: Streamly/Test/Array.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
cpp-options: -DTEST_PRIM_ARRAY
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
test-suite string-test
import: test-options
type: exitcode-stdio-1.0
main-is: String.hs
js-sources: jsbits/clock.js
hs-source-dirs: test
build-depends:
streamly
, base >= 4.8 && < 5
, QuickCheck >= 2.10 && < 2.14
, hspec >= 2.0 && < 3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
default-language: Haskell2010
test-suite maxrate
import: exe-options
type: exitcode-stdio-1.0
default-language: Haskell2010
main-is: MaxRate.hs
2019-01-10 03:06:23 +03:00
js-sources: jsbits/clock.js
hs-source-dirs: test
if flag(dev)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, clock >= 0.7.1 && < 0.9
, hspec >= 2.0 && < 3
, random >= 1.0.0 && < 2
else
buildable: False
test-suite loops
import: test-options
type: exitcode-stdio-1.0
default-language: Haskell2010
main-is: loops.hs
hs-source-dirs: test
build-Depends:
streamly
, base >= 4.8 && < 5
test-suite nested-loops
import: test-options
type: exitcode-stdio-1.0
default-language: Haskell2010
main-is: nested-loops.hs
hs-source-dirs: test
build-Depends:
streamly
, base >= 4.8 && < 5
, random >= 1.0.0 && < 2
test-suite parallel-loops
import: test-options
type: exitcode-stdio-1.0
default-language: Haskell2010
main-is: parallel-loops.hs
hs-source-dirs: test
build-Depends:
streamly
, base >= 4.8 && < 5
, random >= 1.0.0 && < 2
-------------------------------------------------------------------------------
-- Benchmarks
-------------------------------------------------------------------------------
-- For linear, linear-async, linear-rate, nested and nested-concurrent
-- you can pass the number of elements in the stream using the
-- --stream-size option:
-- $ cabal run linear -- --stream-size 1000000
benchmark linear
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Linear.hs
other-modules: Streamly.Benchmark.Prelude, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
2019-05-12 21:43:43 +03:00
build-depends:
transformers >= 0.4 && < 0.6
if flag(inspection)
build-depends: template-haskell >= 2.14 && < 2.16
, inspection-testing >= 0.4 && < 0.5
benchmark nested
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Nested.hs
other-modules: NestedOps, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
2018-10-21 17:48:49 +03:00
, gauge >= 0.2.4 && < 0.3
2019-05-12 23:35:22 +03:00
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
2020-01-15 05:37:13 +03:00
benchmark nested-unfold
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: NestedUnfold.hs
2020-01-15 05:37:13 +03:00
other-modules: NestedUnfoldOps, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
benchmark unpinned-array
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Streamly/Benchmark/Data/Array.hs
other-modules: Streamly.Benchmark.Data.ArrayOps
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
2020-01-20 16:25:23 +03:00
benchmark prim-array
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Streamly/Benchmark/Data/Prim/Array.hs
other-modules: Streamly.Benchmark.Data.Prim.ArrayOps
2020-01-20 16:25:23 +03:00
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
2019-12-09 09:33:57 +03:00
benchmark small-array
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Streamly/Benchmark/Data/SmallArray.hs
other-modules: Streamly.Benchmark.Data.SmallArrayOps
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
benchmark array
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Array.hs
other-modules: ArrayOps
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
benchmark fileio
import: bench-options
type: exitcode-stdio-1.0
-- A value of 400 works better for some benchmarks, however, it takes
-- extraordinary amount of time to compile with that.
-- ghc-options: -funfolding-use-threshold=150
hs-source-dirs: benchmark
main-is: FileIO.hs
other-modules: Streamly.Benchmark.FileIO.Array
, Streamly.Benchmark.FileIO.Stream
build-depends:
streamly
, base >= 4.8 && < 5
, gauge >= 0.2.4 && < 0.3
, typed-process >= 0.2.3 && < 0.3
, deepseq >= 1.4.1 && < 1.5
if flag(inspection)
build-depends: template-haskell >= 2.14 && < 2.16
, inspection-testing >= 0.4 && < 0.5
-------------------------------------------------------------------------------
-- Threaded Benchmarks
-------------------------------------------------------------------------------
benchmark linear-async
import: bench-options-threaded
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: LinearAsync.hs
other-modules: Streamly.Benchmark.Prelude, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
if flag(inspection)
build-depends: template-haskell >= 2.14 && < 2.16
, inspection-testing >= 0.4 && < 0.5
benchmark nested-concurrent
import: bench-options-threaded
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: NestedConcurrent.hs
other-modules: NestedOps, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
benchmark parallel
import: bench-options-threaded
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Parallel.hs
other-modules: Streamly.Benchmark.Prelude, NestedOps, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
if flag(inspection)
build-depends: template-haskell >= 2.14 && < 2.16
, inspection-testing >= 0.4 && < 0.5
benchmark linear-rate
import: bench-options-threaded
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: LinearRate.hs
other-modules: Streamly.Benchmark.Prelude, Common
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
if flag(inspection)
build-depends: template-haskell >= 2.14 && < 2.16
, inspection-testing >= 0.4 && < 0.5
benchmark concurrent
import: bench-options-threaded
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Concurrent.hs
if flag(dev)
buildable: True
build-depends:
streamly
, base >= 4.8 && < 5
, gauge >= 0.2.4 && < 0.3
else
buildable: False
-------------------------------------------------------------------------------
-- Internal benchmarks
-------------------------------------------------------------------------------
benchmark base
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: BaseStreams.hs
other-modules: StreamDOps
, StreamKOps
2019-08-29 16:02:40 +03:00
, StreamDKOps
if flag(dev)
buildable: True
build-depends:
streamly
, base >= 4.8 && < 5
, deepseq >= 1.4.1 && < 1.5
, random >= 1.0 && < 2.0
, gauge >= 0.2.4 && < 0.3
else
buildable: False
executable nano-bench
import: bench-options
hs-source-dirs: benchmark
main-is: NanoBenchmarks.hs
if flag(dev)
buildable: True
build-depends:
streamly
, base >= 4.8 && < 5
, gauge >= 0.2.4 && < 0.3
, random >= 1.0 && < 2.0
else
buildable: False
benchmark adaptive
import: bench-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Adaptive.hs
default-language: Haskell2010
if flag(dev)
buildable: True
build-depends:
streamly
, base >= 4.8 && < 5
, gauge >= 0.2.4 && < 0.3
, random >= 1.0 && < 2.0
else
buildable: False
executable chart
default-language: Haskell2010
ghc-options: -Wall
hs-source-dirs: benchmark
main-is: Chart.hs
if flag(dev) && !flag(no-charts) && !impl(ghcjs)
buildable: True
build-Depends:
base >= 4.8 && < 5
2019-08-27 21:04:35 +03:00
, bench-show >= 0.3 && < 0.4
, split
, transformers >= 0.4 && < 0.6
else
buildable: False
-------------------------------------------------------------------------------
-- Examples
-------------------------------------------------------------------------------
executable SearchQuery
import: exe-options
main-is: SearchQuery.hs
2017-10-18 09:21:38 +03:00
hs-source-dirs: examples
2019-01-10 03:06:23 +03:00
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
2017-10-18 09:21:38 +03:00
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, http-conduit >= 2.2.2 && < 2.4
2017-10-18 09:21:38 +03:00
else
buildable: False
executable ListDir
import: exe-options
main-is: ListDir.hs
2017-10-18 09:21:38 +03:00
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
2017-10-18 09:21:38 +03:00
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, directory >= 1.3 && < 1.4
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
2017-10-18 09:21:38 +03:00
else
buildable: False
executable MergeSort
import: exe-options
main-is: MergeSort.hs
2017-10-18 09:21:38 +03:00
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
2017-10-18 09:21:38 +03:00
buildable: True
build-Depends:
streamly
2017-12-04 13:39:36 +03:00
, base >= 4.8 && < 5
, random >= 1.0.0 && < 2
else
buildable: False
executable AcidRain
import: exe-options
main-is: AcidRain.hs
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, mtl >= 2.2 && < 3
2018-05-03 23:13:07 +03:00
if impl(ghc < 8.0)
build-depends:
semigroups >= 0.18 && < 0.19
, transformers >= 0.4 && < 0.6
else
buildable: False
executable CirclingSquare
import: exe-options
main-is: CirclingSquare.hs
hs-source-dirs: examples
if flag(examples-sdl)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, SDL >= 0.6.5 && < 0.7
2017-10-18 09:21:38 +03:00
else
buildable: False
executable ControlFlow
import: exe-options
main-is: ControlFlow.hs
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, exceptions >= 0.8 && < 0.11
, transformers >= 0.4 && < 0.6
, transformers-base >= 0.4 && < 0.5
if impl(ghc < 8.0)
build-depends:
semigroups >= 0.18 && < 0.19
else
buildable: False
2019-05-22 04:38:34 +03:00
executable HandleIO
import: exe-options
main-is: HandleIO.hs
2019-05-22 04:38:34 +03:00
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
else
buildable: False
executable FileIOExamples
import: exe-options
main-is: FileIOExamples.hs
hs-source-dirs: examples
if flag(examples) || flag(examples-sdl)
2019-09-25 23:05:29 +03:00
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
else
buildable: False
executable EchoServer
import: exe-options
main-is: EchoServer.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, network >= 2.6 && < 4
2019-10-14 16:23:34 +03:00
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
else
buildable: False
executable FileSinkServer
import: exe-options
main-is: FileSinkServer.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
2019-10-12 09:52:34 +03:00
, network >= 2.6 && < 4
2019-10-14 16:23:34 +03:00
if impl(ghc < 8.0)
build-depends:
transformers >= 0.4 && < 0.6
else
buildable: False
executable FromFileClient
import: exe-options
main-is: FromFileClient.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
else
buildable: False
2019-09-05 22:02:54 +03:00
executable WordClassifier
import: exe-options
main-is: WordClassifier.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
2019-11-14 11:55:32 +03:00
, hashable >= 1.2 && < 1.4
2019-09-05 22:02:54 +03:00
, unordered-containers >= 0.2 && < 0.3
else
buildable: False
executable WordCount
import: exe-options
main-is: WordCount.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
, vector >= 0.12 && < 0.13
else
buildable: False
executable CamelCase
import: exe-options
main-is: CamelCase.hs
hs-source-dirs: examples
if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
buildable: True
build-Depends:
streamly
, base >= 4.8 && < 5
else
buildable: False