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
280 main-is: BaseStreams.hs
281 other-modules: StreamDOps
283 default-language: Haskell2010
284 ghc-options: -O2 -Wall
286 ghc-options: -Wmissed-specialisations
287 -Wall-missed-specialisations
290 ghc-options: -Wcompat
291 -Wunrecognised-warning-flags
293 -Wincomplete-record-updates
294 -Wincomplete-uni-patterns
295 -Wredundant-constraints
296 -Wnoncanonical-monad-instances
297 -Wnoncanonical-monadfail-instances
303 , deepseq >= 1.4.0 && < 1.5
304 , random >= 1.0 && < 2.0
305 , gauge >= 0.2.3 && < 0.3
310 type: exitcode-stdio-1.0
311 hs-source-dirs: benchmark
313 other-modules: LinearOps
314 default-language: Haskell2010
315 ghc-options: -O2 -Wall
317 ghc-options: -Wmissed-specialisations
318 -Wall-missed-specialisations
321 ghc-options: -Wcompat
322 -Wunrecognised-warning-flags
324 -Wincomplete-record-updates
325 -Wincomplete-uni-patterns
326 -Wredundant-constraints
327 -Wnoncanonical-monad-instances
328 -Wnoncanonical-monadfail-instances
332 , deepseq >= 1.4.0 && < 1.5
333 , random >= 1.0 && < 2.0
334 , gauge >= 0.2.3 && < 0.3
337 type: exitcode-stdio-1.0
338 hs-source-dirs: benchmark
340 other-modules: NestedOps
341 default-language: Haskell2010
342 ghc-options: -O2 -Wall
344 ghc-options: -Wmissed-specialisations
345 -Wall-missed-specialisations
348 ghc-options: -Wcompat
349 -Wunrecognised-warning-flags
351 -Wincomplete-record-updates
352 -Wincomplete-uni-patterns
353 -Wredundant-constraints
354 -Wnoncanonical-monad-instances
355 -Wnoncanonical-monadfail-instances
359 , deepseq >= 1.4.0 && < 1.5
360 , random >= 1.0 && < 2.0
361 , gauge >= 0.2.3 && < 0.3
363executable chart-linear
364 default-language: Haskell2010
365 hs-source-dirs: benchmark
366 main-is: ChartLinear.hs
376executable chart-nested
377 default-language: Haskell2010
378 hs-source-dirs: benchmark
379 main-is: ChartNested.hs
389-------------------------------------------------------------------------------
391-------------------------------------------------------------------------------
393executable SearchQuery
394 default-language: Haskell2010
395 main-is: SearchQuery.hs
396 hs-source-dirs: examples
397 if flag(examples) || flag(examples-sdl)
402 , http-conduit >= 2.2.2 && < 2.4
407 default-language: Haskell2010
409 hs-source-dirs: examples
410 if flag(examples) || flag(examples-sdl)
415 , path-io >= 0.1.0 && < 1.4
418 transformers >= 0.4 && < 0.6
423 default-language: Haskell2010
424 main-is: MergeSort.hs
425 hs-source-dirs: examples
426 if flag(examples) || flag(examples-sdl)
431 , random >= 1.0.0 && < 1.2
436 default-language: Haskell2010
438 hs-source-dirs: examples
439 if flag(examples) || flag(examples-sdl)
447 semigroups >= 0.18 && < 0.19
448 , transformers >= 0.4 && < 0.6
452executable CirclingSquare
453 default-language: Haskell2010
454 main-is: CirclingSquare.hs
455 hs-source-dirs: examples
456 if flag(examples-sdl)
461 , 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