mirror of
https://github.com/composewell/streamly.git
synced 2024-09-20 07:58:27 +03:00
c28f3f1c47
The bug causes the ops take, takeWhile, drop, dropWhile, filter and reverse to behave incorrectly due to illegal sharing of SVar across ops.
392 lines
12 KiB
Plaintext
392 lines
12 KiB
Plaintext
name: streamly
|
|
version: 0.2.1
|
|
synopsis: Beautiful Streaming, Concurrent and Reactive Composition
|
|
description:
|
|
Streamly, short for streaming concurrently, is a simple yet powerful
|
|
streaming library with concurrent merging and concurrent nested looping
|
|
support. A stream is just like a list except that it is a list of monadic
|
|
actions rather than pure values. Streamly streams can be generated,
|
|
consumed, combined, or transformed serially or concurrently. We can loop over
|
|
a stream serially or concurrently. We can also have serial or concurrent
|
|
nesting of loops. For those familiar with list transformer concept streamly
|
|
is a concurrent list transformer. Streamly uses standard composition
|
|
abstractions. Concurrent composition is just the same as serial composition
|
|
except that we use a simple combinator to request a concurrent composition
|
|
instead of serial. The programmer does not have to be aware of threads,
|
|
locking or synchronization to write scalable concurrent programs.
|
|
.
|
|
Streamly provides functionality that is equivalent to streaming libraries
|
|
like <https://hackage.haskell.org/package/pipes pipes> and
|
|
<https://hackage.haskell.org/package/conduit conduit> but with a simple list
|
|
like API. The streaming API of streamly is close to the monadic streams API
|
|
of the <https://hackage.haskell.org/package/vector vector> package and
|
|
similar in concept to the
|
|
<https://hackage.haskell.org/package/streaming streaming> package. In
|
|
addition to the streaming functionality, streamly subsumes the 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>. On
|
|
the concurrency side, it subsumes the functionality of the
|
|
<https://hackage.haskell.org/package/async async> package. Because it
|
|
supports streaming with concurrency we can write FRP applications similar in
|
|
concept to <https://hackage.haskell.org/package/Yampa Yampa> or
|
|
<https://hackage.haskell.org/package/reflex reflex>.
|
|
.
|
|
Streamly has excellent performance, see
|
|
<https://github.com/composewell/streaming-benchmarks streaming-benchmarks>
|
|
for a comparison of popular streaming libraries on micro-benchmarks. For
|
|
file IO, currently the library provides only one API to stream the lines in
|
|
the file as Strings. Future versions will provide better streaming file IO
|
|
options. Streamly interworks with the popular streaming libraries, see the
|
|
interworking section in "Streamly.Tutorial".
|
|
.
|
|
Where to find more information:
|
|
.
|
|
* @README@ shipped with the package for a quick overview
|
|
* "Streamly.Tutorial" module in the haddock documentation for a detailed introduction
|
|
* @examples@ directory in the package for some simple practical examples
|
|
|
|
homepage: https://github.com/composewell/streamly
|
|
bug-reports: https://github.com/composewell/streamly/issues
|
|
license: BSD3
|
|
license-file: LICENSE
|
|
tested-with: GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.2
|
|
author: Harendra Kumar
|
|
maintainer: harendra.kumar@gmail.com
|
|
copyright: 2017 Harendra Kumar
|
|
category: Control, Concurrency, Streaming, Reactivity
|
|
stability: Experimental
|
|
build-type: Simple
|
|
cabal-version: >= 1.10
|
|
|
|
extra-source-files:
|
|
Changelog.md
|
|
README.md
|
|
bench.sh
|
|
stack-7.10.yaml
|
|
stack-8.0.yaml
|
|
stack.yaml
|
|
|
|
source-repository head
|
|
type: git
|
|
location: https://github.com/composewell/streamly
|
|
|
|
flag diag
|
|
description: Diagnostics build
|
|
manual: True
|
|
default: False
|
|
|
|
flag dev
|
|
description: Development build
|
|
manual: True
|
|
default: False
|
|
|
|
flag examples
|
|
description: Build including examples
|
|
manual: True
|
|
default: False
|
|
|
|
flag examples-sdl
|
|
description: Build including SDL examples
|
|
manual: True
|
|
default: False
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Library
|
|
-------------------------------------------------------------------------------
|
|
|
|
library
|
|
hs-source-dirs: src
|
|
other-modules: Streamly.Core
|
|
, Streamly.Streams
|
|
|
|
exposed-modules: Streamly.Prelude
|
|
, Streamly.Time
|
|
, Streamly.Tutorial
|
|
, Streamly
|
|
|
|
default-language: Haskell2010
|
|
ghc-options: -Wall
|
|
|
|
if flag(diag)
|
|
cpp-options: -DDIAGNOSTICS
|
|
|
|
if flag(dev)
|
|
cpp-options: -DDIAGNOSTICS
|
|
ghc-options: -Wmissed-specialisations
|
|
-Wall-missed-specialisations
|
|
-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
|
|
-Wnoncanonical-monadfail-instances
|
|
|
|
build-depends: base >= 4.8 && < 5
|
|
, containers >= 0.5 && < 0.6
|
|
, heaps >= 0.3 && < 0.4
|
|
|
|
-- concurrency
|
|
, atomic-primops >= 0.8 && < 0.9
|
|
, lockfree-queue >= 0.2.3 && < 0.3
|
|
|
|
-- transfomers
|
|
, exceptions >= 0.8 && < 0.11
|
|
, monad-control >= 1.0 && < 2
|
|
, mtl >= 2.2 && < 3
|
|
, transformers >= 0.4 && < 0.6
|
|
, transformers-base >= 0.4 && < 0.5
|
|
|
|
if impl(ghc < 8.0)
|
|
build-depends:
|
|
semigroups >= 0.18 && < 0.19
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Test suites
|
|
-------------------------------------------------------------------------------
|
|
|
|
test-suite test
|
|
type: exitcode-stdio-1.0
|
|
main-is: Main.hs
|
|
hs-source-dirs: test
|
|
ghc-options: -O0 -Wall -threaded -with-rtsopts=-N4
|
|
if flag(dev)
|
|
ghc-options: -Wmissed-specialisations
|
|
-Wall-missed-specialisations
|
|
if impl(ghc >= 8.0)
|
|
ghc-options: -Wcompat
|
|
-Wunrecognised-warning-flags
|
|
-Widentities
|
|
-Wincomplete-record-updates
|
|
-Wincomplete-uni-patterns
|
|
-Wredundant-constraints
|
|
-Wnoncanonical-monad-instances
|
|
-Wnoncanonical-monadfail-instances
|
|
build-depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, hspec >= 2.0 && < 3
|
|
, containers >= 0.5 && < 0.6
|
|
, transformers >= 0.4 && < 0.6
|
|
, mtl >= 2.2 && < 3
|
|
, exceptions >= 0.8 && < 0.11
|
|
default-language: Haskell2010
|
|
|
|
test-suite properties
|
|
type: exitcode-stdio-1.0
|
|
main-is: Prop.hs
|
|
hs-source-dirs: test
|
|
ghc-options: -O0 -Wall -threaded -with-rtsopts=-N4
|
|
if flag(dev)
|
|
cpp-options: -DDEVBUILD
|
|
ghc-options: -Wmissed-specialisations
|
|
-Wall-missed-specialisations
|
|
if impl(ghc >= 8.0)
|
|
ghc-options: -Wcompat
|
|
-Wunrecognised-warning-flags
|
|
-Widentities
|
|
-Wincomplete-record-updates
|
|
-Wincomplete-uni-patterns
|
|
-Wredundant-constraints
|
|
-Wnoncanonical-monad-instances
|
|
-Wnoncanonical-monadfail-instances
|
|
build-depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, QuickCheck >= 2.10 && < 2.12
|
|
, hspec >= 2.0 && < 3
|
|
default-language: Haskell2010
|
|
|
|
test-suite loops
|
|
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
|
|
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 && < 1.2
|
|
|
|
test-suite parallel-loops
|
|
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 && < 1.2
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Benchmarks
|
|
-------------------------------------------------------------------------------
|
|
|
|
benchmark linear
|
|
type: exitcode-stdio-1.0
|
|
hs-source-dirs: benchmark
|
|
main-is: Linear.hs
|
|
other-modules: LinearOps
|
|
default-language: Haskell2010
|
|
ghc-options: -O2 -Wall
|
|
if flag(dev)
|
|
ghc-options: -Wmissed-specialisations
|
|
-Wall-missed-specialisations
|
|
-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
|
|
-Wnoncanonical-monadfail-instances
|
|
build-depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, deepseq >= 1.4.0 && < 1.5
|
|
, random >= 1.0 && < 2.0
|
|
, gauge >= 0.2.1 && < 0.3
|
|
|
|
benchmark nested
|
|
type: exitcode-stdio-1.0
|
|
hs-source-dirs: benchmark
|
|
main-is: Nested.hs
|
|
other-modules: NestedOps
|
|
default-language: Haskell2010
|
|
ghc-options: -O2 -Wall
|
|
if flag(dev)
|
|
ghc-options: -Wmissed-specialisations
|
|
-Wall-missed-specialisations
|
|
-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
|
|
-Wnoncanonical-monadfail-instances
|
|
build-depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, deepseq >= 1.4.0 && < 1.5
|
|
, random >= 1.0 && < 2.0
|
|
, gauge >= 0.2.1 && < 0.3
|
|
|
|
executable chart-linear
|
|
default-language: Haskell2010
|
|
hs-source-dirs: benchmark
|
|
main-is: ChartLinear.hs
|
|
if flag(dev)
|
|
buildable: True
|
|
build-Depends:
|
|
base >= 4.8 && < 5
|
|
, bench-graph
|
|
, split
|
|
else
|
|
buildable: False
|
|
|
|
executable chart-nested
|
|
default-language: Haskell2010
|
|
hs-source-dirs: benchmark
|
|
main-is: ChartNested.hs
|
|
if flag(dev)
|
|
buildable: True
|
|
build-Depends:
|
|
base >= 4.8 && < 5
|
|
, bench-graph
|
|
, split
|
|
else
|
|
buildable: False
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Examples
|
|
-------------------------------------------------------------------------------
|
|
|
|
executable SearchQuery
|
|
default-language: Haskell2010
|
|
main-is: SearchQuery.hs
|
|
hs-source-dirs: examples
|
|
if flag(examples) || flag(examples-sdl)
|
|
buildable: True
|
|
build-Depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, http-conduit >= 2.2.2 && < 2.4
|
|
else
|
|
buildable: False
|
|
|
|
executable ListDir
|
|
default-language: Haskell2010
|
|
main-is: ListDir.hs
|
|
hs-source-dirs: examples
|
|
if flag(examples) || flag(examples-sdl)
|
|
buildable: True
|
|
build-Depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, path-io >= 0.1.0 && < 1.4
|
|
if impl(ghc < 8.0)
|
|
build-depends:
|
|
transformers >= 0.4 && < 0.6
|
|
else
|
|
buildable: False
|
|
|
|
executable MergeSort
|
|
default-language: Haskell2010
|
|
main-is: MergeSort.hs
|
|
hs-source-dirs: examples
|
|
if flag(examples) || flag(examples-sdl)
|
|
buildable: True
|
|
build-Depends:
|
|
streamly
|
|
, base >= 4.8 && < 5
|
|
, random >= 1.0.0 && < 1.2
|
|
else
|
|
buildable: False
|
|
|
|
executable AcidRain
|
|
default-language: Haskell2010
|
|
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
|
|
if impl(ghc < 8.0)
|
|
build-depends:
|
|
semigroups >= 0.18 && < 0.19
|
|
, transformers >= 0.4 && < 0.6
|
|
else
|
|
buildable: False
|
|
|
|
executable CirclingSquare
|
|
default-language: Haskell2010
|
|
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
|
|
else
|
|
buildable: False
|