3synopsis: Beautiful Streaming, Concurrent and Reactive Composition
5 Streamly, short for streaming concurrently, provides monadic streams, with a
6 simple API, almost identical to standard lists, and an in-built support for
7 concurrency. By using stream-style combinators on stream composition,
8 streams can be generated, merged, chained, mapped, zipped, and consumed
9 concurrently – providing a generalized high level programming framework
10 unifying streaming and concurrency. Controlled concurrency allows even
11 infinite streams to be evaluated concurrently. Concurrency is auto scaled
12 based on feedback from the stream consumer. The programmer does not have to
13 be aware of threads, locking or synchronization to write scalable concurrent
16 The basic streaming functionality of streamly is equivalent to that provided by
17 streaming libraries like
18 <https://hackage.haskell.org/package/vector vector>,
19 <https://hackage.haskell.org/package/streaming streaming>,
20 <https://hackage.haskell.org/package/pipes pipes>, and
21 <https://hackage.haskell.org/package/conduit conduit>.
22 In addition to providing streaming functionality, streamly subsumes the
23 functionality of list transformer libraries like @pipes@ or
24 <https://hackage.haskell.org/package/list-t list-t> and also the logic
25 programming library <https://hackage.haskell.org/package/logict logict>. On
26 the concurrency side, it subsumes the functionality of the
27 <https://hackage.haskell.org/package/async async> package. Because it
28 supports streaming with concurrency we can write FRP applications similar in
29 concept to <https://hackage.haskell.org/package/Yampa Yampa> or
30 <https://hackage.haskell.org/package/reflex reflex>.
32 For file IO, currently the library provides only one API to stream the lines
33 in the file as Strings. Future versions will provide better streaming file
34 IO options. Streamly interworks with the popular streaming libraries, see
35 the interworking section in "Streamly.Tutorial".
39 * /Simplicity/: Simple list like streaming API, if you know how to use lists
40 then you know how to use streamly. This library is built with simplicity
41 and ease of use as a primary design goal.
42 * /Concurrency/: Simple, powerful, and scalable concurrency. Concurrency is
43 built-in, and not intrusive, concurrent programs are written exactly the
44 same way as non-concurrent ones.
45 * /Generality/: Unifies functionality provided by several disparate packages
46 (streaming, concurrency, list transformer, logic programming, reactive
47 programming) in a concise API.
48 * /Performance/: Streamly is designed for high performance.
49 It employs stream fusion optimizations for best possible performance.
50 Serial peformance is equivalent to the venerable `vector` library in most
51 cases and even better in some cases. Concurrent performance is unbeatable.
53 <https://github.com/composewell/streaming-benchmarks streaming-benchmarks>
54 for a comparison of popular streaming libraries on micro-benchmarks.
56 Where to find more information:
58 * @README@ shipped with the package for a quick overview
59 * "Streamly.Tutorial" module in the haddock documentation for a detailed introduction
60 * @examples@ directory in the package for some simple practical examples
62homepage: https://github.com/composewell/streamly
63bug-reports: https://github.com/composewell/streamly/issues
66tested-with: GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
68maintainer: harendra.kumar@gmail.com
69copyright: 2017 Harendra Kumar
70category: Control, Concurrency, Streaming, Reactivity
71stability: Experimental
82 src/Streamly/Streams/Instances.hs
83 src/Streamly/Streams/inline.h
87 location: https://github.com/composewell/streamly
90 description: Diagnostics build
95 description: Development build
100 description: Disable rewrite rules
105 description: Use CPS style streams when possible
110 description: Build including examples
115 description: Build including SDL examples
119-------------------------------------------------------------------------------
121-------------------------------------------------------------------------------
125 other-modules: Streamly.SVar
126 , Streamly.Streams.StreamK
127 , Streamly.Streams.StreamD
128 , Streamly.Streams.Serial
129 , Streamly.Streams.SVar
130 , Streamly.Streams.Async
131 , Streamly.Streams.Parallel
132 , Streamly.Streams.Ahead
133 , Streamly.Streams.Zip
134 , Streamly.Streams.Prelude
136 exposed-modules: Streamly.Prelude
141 default-language: Haskell2010
145 cpp-options: -DUSE_STREAMK_ONLY
148 cpp-options: -DDISABLE_FUSION
151 cpp-options: -DDIAGNOSTICS
154 cpp-options: -DDIAGNOSTICS
155 ghc-options: -Wmissed-specialisations
156 -Wall-missed-specialisations
159 ghc-options: -Wcompat
160 -Wunrecognised-warning-flags
162 -Wincomplete-record-updates
163 -Wincomplete-uni-patterns
164 -Wredundant-constraints
165 -Wnoncanonical-monad-instances
166 -Wnoncanonical-monadfail-instances
168 build-depends: base >= 4.8 && < 5
169 , ghc-prim >= 0.2 && < 0.6
170 , containers >= 0.5 && < 0.6
171 , heaps >= 0.3 && < 0.4
174 , atomic-primops >= 0.8 && < 0.9
175 , lockfree-queue >= 0.2.3 && < 0.3
178 , exceptions >= 0.8 && < 0.11
179 , monad-control >= 1.0 && < 2
181 , transformers >= 0.4 && < 0.6
182 , transformers-base >= 0.4 && < 0.5
186 semigroups >= 0.18 && < 0.19
188-------------------------------------------------------------------------------
190-------------------------------------------------------------------------------
193 type: exitcode-stdio-1.0
196 ghc-options: -O0 -Wall -threaded -with-rtsopts=-N
198 ghc-options: -Wmissed-specialisations
199 -Wall-missed-specialisations
201 ghc-options: -Wcompat
202 -Wunrecognised-warning-flags
204 -Wincomplete-record-updates
205 -Wincomplete-uni-patterns
206 -Wredundant-constraints
207 -Wnoncanonical-monad-instances
208 -Wnoncanonical-monadfail-instances
212 , hspec >= 2.0 && < 3
213 , containers >= 0.5 && < 0.6
214 , transformers >= 0.4 && < 0.6
216 , exceptions >= 0.8 && < 0.11
217 default-language: Haskell2010
220 type: exitcode-stdio-1.0
223 ghc-options: -O0 -Wall -threaded -with-rtsopts=-N4
225 cpp-options: -DDEVBUILD
226 ghc-options: -Wmissed-specialisations
227 -Wall-missed-specialisations
229 ghc-options: -Wcompat
230 -Wunrecognised-warning-flags
232 -Wincomplete-record-updates
233 -Wincomplete-uni-patterns
234 -Wredundant-constraints
235 -Wnoncanonical-monad-instances
236 -Wnoncanonical-monadfail-instances
240 , QuickCheck >= 2.10 && < 2.12
241 , hspec >= 2.0 && < 3
242 default-language: Haskell2010
245 type: exitcode-stdio-1.0
246 default-language: Haskell2010
253test-suite nested-loops
254 type: exitcode-stdio-1.0
255 default-language: Haskell2010
256 main-is: nested-loops.hs
261 , random >= 1.0.0 && < 1.2
263test-suite parallel-loops
264 type: exitcode-stdio-1.0
265 default-language: Haskell2010
266 main-is: parallel-loops.hs
271 , random >= 1.0.0 && < 1.2
273-------------------------------------------------------------------------------
275-------------------------------------------------------------------------------
278 type: exitcode-stdio-1.0
279 hs-source-dirs: benchmark
281 other-modules: LinearOps
282 default-language: Haskell2010
283 ghc-options: -O2 -Wall
285 ghc-options: -Wmissed-specialisations
286 -Wall-missed-specialisations
289 ghc-options: -Wcompat
290 -Wunrecognised-warning-flags
292 -Wincomplete-record-updates
293 -Wincomplete-uni-patterns
294 -Wredundant-constraints
295 -Wnoncanonical-monad-instances
296 -Wnoncanonical-monadfail-instances
300 , deepseq >= 1.4.0 && < 1.5
301 , random >= 1.0 && < 2.0
302 , gauge >= 0.2.3 && < 0.3
305 type: exitcode-stdio-1.0
306 hs-source-dirs: benchmark
308 other-modules: NestedOps
309 default-language: Haskell2010
310 ghc-options: -O2 -Wall
312 ghc-options: -Wmissed-specialisations
313 -Wall-missed-specialisations
316 ghc-options: -Wcompat
317 -Wunrecognised-warning-flags
319 -Wincomplete-record-updates
320 -Wincomplete-uni-patterns
321 -Wredundant-constraints
322 -Wnoncanonical-monad-instances
323 -Wnoncanonical-monadfail-instances
327 , deepseq >= 1.4.0 && < 1.5
328 , random >= 1.0 && < 2.0
329 , gauge >= 0.2.3 && < 0.3
331-------------------------------------------------------------------------------
332-- Internal benchmarks for unexposed modules
333-------------------------------------------------------------------------------
335-- We have to copy the streamly library modules here because there is no
336-- way to use unexposed modules from the library.
339 type: exitcode-stdio-1.0
340 hs-source-dirs: benchmark, src
341 main-is: BaseStreams.hs
342 other-modules: Streamly.SVar
343 , Streamly.Streams.StreamK
344 , Streamly.Streams.StreamD
345 , Streamly.Streams.Prelude
350 default-language: Haskell2010
351 ghc-options: -O2 -Wall
353 ghc-options: -Wmissed-specialisations
354 -Wall-missed-specialisations
357 ghc-options: -Wcompat
358 -Wunrecognised-warning-flags
360 -Wincomplete-record-updates
361 -Wincomplete-uni-patterns
362 -Wredundant-constraints
363 -Wnoncanonical-monad-instances
364 -Wnoncanonical-monadfail-instances
368 , deepseq >= 1.4.0 && < 1.5
369 , random >= 1.0 && < 2.0
370 , gauge >= 0.2.3 && < 0.3
372 , ghc-prim >= 0.2 && < 0.6
373 , containers >= 0.5 && < 0.6
374 , heaps >= 0.3 && < 0.4
377 , atomic-primops >= 0.8 && < 0.9
378 , lockfree-queue >= 0.2.3 && < 0.3
380 , exceptions >= 0.8 && < 0.11
381 , monad-control >= 1.0 && < 2
383 , transformers >= 0.4 && < 0.6
384 , transformers-base >= 0.4 && < 0.5
388 semigroups >= 0.18 && < 0.19
390executable chart-linear
391 default-language: Haskell2010
392 hs-source-dirs: benchmark
393 main-is: ChartLinear.hs
403executable chart-nested
404 default-language: Haskell2010
405 hs-source-dirs: benchmark
406 main-is: ChartNested.hs
416-------------------------------------------------------------------------------
418-------------------------------------------------------------------------------
420executable SearchQuery
421 default-language: Haskell2010
422 main-is: SearchQuery.hs
423 hs-source-dirs: examples
424 if flag(examples) || flag(examples-sdl)
429 , http-conduit >= 2.2.2 && < 2.4
434 default-language: Haskell2010
436 hs-source-dirs: examples
437 if flag(examples) || flag(examples-sdl)
442 , path-io >= 0.1.0 && < 1.4
445 transformers >= 0.4 && < 0.6
450 default-language: Haskell2010
451 main-is: MergeSort.hs
452 hs-source-dirs: examples
453 if flag(examples) || flag(examples-sdl)
458 , random >= 1.0.0 && < 1.2
463 default-language: Haskell2010
465 hs-source-dirs: examples
466 if flag(examples) || flag(examples-sdl)
474 semigroups >= 0.18 && < 0.19
475 , transformers >= 0.4 && < 0.6
479executable CirclingSquare
480 default-language: Haskell2010
481 main-is: CirclingSquare.hs
482 hs-source-dirs: examples
483 if flag(examples-sdl)
488 , SDL >= 0.6.5 && < 0.7
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list