on 9183e21 help sign in
streamly/streamly.cabal
990 lines 31 kB history raw
1cabal-version: 2.2
2name: streamly
3version: 0.6.1
4synopsis: Beautiful Streaming, Concurrent and Reactive Composition
5description:
6 Streamly is a framework for writing programs in a high level, declarative
7 data flow programming paradigm. It provides a simple API, very close to
8 standard Haskell lists. A program is expressed as a composition of data
9 processing pipes, generally known as streams. Streams can be generated,
10 merged, chained, mapped, zipped, and consumed concurrently – enabling a high
11 level, declarative yet concurrent composition of programs. Programs can be
12 concurrent or non-concurrent without any significant change. Concurrency is
13 auto scaled based on consumption rate. Programmers do not have to be aware
14 of threads, locking or synchronization to write scalable concurrent programs.
15 Streamly provides C like performance, orders of magnitude better compared to
16 existing streaming libraries.
17 .
18 Streamly is designed to express the full spectrum of programs with highest
19 performance. Do not think that if you are writing a small and simple program
20 it may not be for you. It expresses a small "hello world" program with the
21 same efficiency, simplicity and elegance as a large scale concurrent
22 application. It unifies many different aspects of special purpose libraries
23 into a single yet simple framework.
24 .
25 Streamly covers the functionality provided by Haskell lists as well as the
26 functionality provided by streaming libraries like
27 <https://hackage.haskell.org/package/streaming streaming>,
28 <https://hackage.haskell.org/package/pipes pipes>, and
29 <https://hackage.haskell.org/package/conduit conduit> with a simpler API and
30 better performance. Streamly provides
31 advanced stream composition including various ways of appending, merging,
32 zipping, splitting, grouping, distributing, partitioning and unzipping of
33 streams with true streaming and with concurrency. Streamly subsumes the
34 functionality of list transformer libraries like @pipes@ or
35 <https://hackage.haskell.org/package/list-t list-t> and also the logic
36 programming library <https://hackage.haskell.org/package/logict logict>.
37 The grouping, splitting and windowing combinators in streamly can be compared
38 to the window operators in <https://flink.apache.org/ Apache Flink>.
39 However, compared to Flink streamly has a pure functional, succinct and
40 expressive API.
41 .
42 The concurrency capabilities of streamly are much more advanced and powerful
43 compared to the basic concurrency functionality provided by the
44 <https://hackage.haskell.org/package/async async> package. Streamly is a
45 first class reactive programming library. If you are familiar with
46 <http://reactivex.io/ Reactive Extensions> you will find that it is very
47 similar. For most RxJs combinators you can find or write corresponding ones
48 in streamly. Streamly can be used as an alternative to
49 <https://hackage.haskell.org/package/Yampa Yampa> or
50 <https://hackage.haskell.org/package/reflex reflex> as well.
51 .
52 Streamly focuses on practical engineering with high performance. From well
53 written streamly programs one can expect performance competitive to C. High
54 performance streaming eliminates the need for string and text libraries like
55 <https://hackage.haskell.org/package/bytestring bytestring>,
56 <https://hackage.haskell.org/package/text text> and their lazy and strict
57 flavors. The confusion and cognitive overhead arising from different
58 string types is eliminated. The two fundamental types in streamly are arrays
59 for storage and streams for processing. Strings and text are simply streams
60 or arrays of 'Char' as they should be. Arrays in streamly have performance
61 at par with the vector library.
62 .
63 Where to find more information:
64 .
65 * /Quick Overview/: <src/README.md README file> in the package
66 * /Building/: <src/docs/Build.md Build guide> for optimal performance
67 * /Detailed Tutorial/: "Streamly.Tutorial" module in the haddock documentation
68 * /Interoperation/: "Streamly.Tutorial" module for interop with other
69 streaming libraries
70 * /Reference Documentation/: Haddock documentation for the respective modules
71 * /Examples/: <src/examples examples directory> in the package
72 * /Guides/: <src/docs docs directory> in the package, for documentation on
73 advanced topics, limitations, semantics of the library or on specific use
74 cases.
75 * <https://github.com/composewell/streaming-benchmarks Streaming Benchmarks>
76 * <https://github.com/composewell/concurrency-benchmarks Concurrency Benchmarks>
78homepage: https://github.com/composewell/streamly
79bug-reports: https://github.com/composewell/streamly/issues
80license: BSD-3-Clause
81license-file: LICENSE
82tested-with: GHC==7.10.3
83 , GHC==8.0.2
84 , GHC==8.4.4
85 , GHC==8.6.5
86 , GHC==8.8.1
87author: Harendra Kumar
88maintainer: streamly@composewell.com
89copyright: 2017 Harendra Kumar
90category: Control, Concurrency, Streaming, Reactivity
91stability: Experimental
92build-type: Configure
94extra-source-files:
95 Changelog.md
96 credits/*.md
97 credits/clock-0.7.2.txt
98 credits/foldl-1.4.5.txt
99 credits/pipes-concurrency-2.0.8.txt
100 credits/pipes-concurrency.txt
101 credits/transient-0.5.5.txt
102 credits/vector-0.12.0.2.txt
103 credits/Yampa-0.10.6.2.txt
104 README.md
105 docs/streamly-vs-async.md
106 docs/transformers.md
107 bench.sh
108 stack.yaml
109 src/Streamly/Streams/Instances.hs
110 src/Streamly/Streams/inline.hs
111 configure.ac
112 configure
113 src/Streamly/Internal/Data/Time/config.h.in
115extra-tmp-files:
116 config.log
117 config.status
118 autom4te.cache
119 src/Streamly/Internal/Data/Time/config.h
121source-repository head
122 type: git
123 location: https://github.com/composewell/streamly
125flag benchmark
126 description: Benchmark build
127 manual: True
128 default: False
130flag inspection
131 description: Enable inspection testing
132 manual: True
133 default: False
135flag debug
136 description: Debug build with asserts enabled
137 manual: True
138 default: False
140flag dev
141 description: Development build
142 manual: True
143 default: False
145flag has-llvm
146 description: Use llvm backend for better performance
147 manual: True
148 default: False
150flag no-charts
151 description: Disable chart generation
152 manual: True
153 default: False
155flag no-fusion
156 description: Disable rewrite rules
157 manual: True
158 default: False
160flag streamk
161 description: Use CPS style streams when possible
162 manual: True
163 default: False
165flag examples
166 description: Build including examples
167 manual: True
168 default: False
170flag examples-sdl
171 description: Build including SDL examples
172 manual: True
173 default: False
175-------------------------------------------------------------------------------
176-- Common stanzas
177-------------------------------------------------------------------------------
179common compile-options
180 default-language: Haskell2010
181 if flag(streamk)
182 cpp-options: -DUSE_STREAMK_ONLY
184 if flag(no-fusion)
185 cpp-options: -DDISABLE_FUSION
187 if flag(dev)
188 cpp-options: -DDEVBUILD
190 if flag(inspection)
191 cpp-options: -DINSPECTION
193 ghc-options: -Wall
195 if flag(has-llvm)
196 ghc-options: -fllvm
198 if flag(dev)
199 ghc-options: -Wmissed-specialisations
200 -Wall-missed-specialisations
202 if flag(dev) || flag(debug)
203 ghc-options: -fno-ignore-asserts
205 if impl(ghc >= 8.0)
206 ghc-options: -Wcompat
207 -Wunrecognised-warning-flags
208 -Widentities
209 -Wincomplete-record-updates
210 -Wincomplete-uni-patterns
211 -Wredundant-constraints
212 -Wnoncanonical-monad-instances
214common optimization-options
215 ghc-options: -O2
216 -fspec-constr-recursive=16
217 -fmax-worker-args=16
219common threading-options
220 ghc-options: -threaded
221 -with-rtsopts=-N
223-- We need optimization options here to optimize internal (non-inlined)
224-- versions of functions. Also, we have some benchmarking inspection tests
225-- part of the library when built with --benchmarks flag. Thos tests fail
226-- if we do not use optimization options here. It was observed that due to
227-- -O2 here some concurrent/nested benchmarks improved and others regressed.
228-- We can investigate a bit more here why the regression occurred.
229common lib-options
230 import: compile-options, optimization-options
232-- Compilation for coverage builds on CI machines takes too long without -O0
233-- XXX we should use coverage flag for that, -O0 may take too long to run tests
234-- in general.
235common test-options
236 import: compile-options, threading-options
237 ghc-options: -O0
238 -fno-ignore-asserts
240-- Used by maxrate test, benchmarks and executables
241common exe-options
242 import: compile-options, optimization-options, threading-options
244-- Some benchmarks are threaded some are not
245common bench-options
246 import: compile-options, optimization-options
247 ghc-options: -with-rtsopts "-T"
249-------------------------------------------------------------------------------
250-- Library
251-------------------------------------------------------------------------------
253library
254 import: lib-options
255 js-sources: jsbits/clock.js
256 include-dirs: src/Streamly/Internal/Data/Time
257 , src/Streamly/Streams
258 if os(windows)
259 c-sources: src/Streamly/Internal/Data/Time/Windows.c
260 if os(darwin)
261 c-sources: src/Streamly/Internal/Data/Time/Darwin.c
262 hs-source-dirs: src
263 other-modules:
264 -- Memory storage
265 Streamly.Memory.Malloc
266 , Streamly.Memory.Ring
268 -- Base streams
269 , Streamly.Streams.StreamK.Type
270 , Streamly.Streams.StreamK
271 , Streamly.Streams.StreamDK.Type
272 , Streamly.Streams.StreamDK
273 , Streamly.Streams.StreamD
274 , Streamly.Streams.Enumeration
275 , Streamly.Streams.Prelude
277 -- Higher level streams
278 , Streamly.Streams.SVar
279 , Streamly.Streams.Serial
280 , Streamly.Streams.Async
281 , Streamly.Streams.Parallel
282 , Streamly.Streams.Ahead
283 , Streamly.Streams.Zip
284 , Streamly.Streams.Combinators
286 , Streamly.FileSystem.IOVec
287 , Streamly.FileSystem.FDIO
288 , Streamly.FileSystem.FD
290 exposed-modules: Streamly.Prelude
291 , Streamly
292 , Streamly.Data.Fold
293 , Streamly.Data.Unfold
294 , Streamly.Data.Unicode.Stream
296 -- IO devices
297 , Streamly.Memory.Array
298 , Streamly.FileSystem.Handle
300 , Streamly.Tutorial
302 -- Internal modules
303 , Streamly.Internal.Data.Strict
304 , Streamly.Internal.Data.Atomics
305 , Streamly.Internal.Data.Time
306 , Streamly.Internal.Data.Time.Units
307 , Streamly.Internal.Data.Time.Clock
308 , Streamly.Internal.Data.Stream.StreamD.Type
309 , Streamly.Internal.Data.SVar
310 , Streamly.Internal.Memory.Array.Types
311 , Streamly.Internal.Memory.Array
312 , Streamly.Internal.Memory.ArrayStream
313 , Streamly.Internal.Data.Fold.Types
314 , Streamly.Internal.Data.Fold
315 , Streamly.Internal.Data.Sink.Types
316 , Streamly.Internal.Data.Sink
317 , Streamly.Internal.Data.Unfold.Types
318 , Streamly.Internal.Data.Unfold
319 , Streamly.Internal.Data.Pipe.Types
320 , Streamly.Internal.Data.Pipe
321 , Streamly.Internal.Data.List
322 , Streamly.Internal.FileSystem.Handle
323 , Streamly.Internal.FileSystem.Dir
324 , Streamly.Internal.FileSystem.File
325 , Streamly.Internal.Data.Unicode.Stream
326 , Streamly.Internal.Data.Unicode.Char
327 , Streamly.Internal.Memory.Unicode.Array
328 , Streamly.Internal.Prelude
329 if !impl(ghcjs)
330 exposed-modules:
331 Streamly.Network.Socket
332 , Streamly.Network.Inet.TCP
334 , Streamly.Internal.Network.Socket
335 , Streamly.Internal.Network.Inet.TCP
337 if flag(benchmark)
338 exposed-modules:
339 Streamly.Benchmark.FileIO.Array
340 , Streamly.Benchmark.FileIO.Stream
341 , Streamly.Benchmark.Prelude
343 build-depends: base >= 4.8 && < 5
344 , ghc-prim >= 0.2 && < 0.6
345 , deepseq >= 1.4.1 && < 1.5
346 , containers >= 0.5.8.2 && < 0.7
347 , heaps >= 0.3 && < 0.4
348 , directory >= 1.3 && < 1.4
350 -- concurrency
351 , atomic-primops >= 0.8 && < 0.9
352 , lockfree-queue >= 0.2.3 && < 0.3
354 -- transfomers
355 , exceptions >= 0.8 && < 0.11
356 , monad-control >= 1.0 && < 2
357 , mtl >= 2.2 && < 3
358 , transformers >= 0.4 && < 0.6
359 , transformers-base >= 0.4 && < 0.5
361 if flag(inspection)
362 build-depends: template-haskell >= 2.14 && < 2.16
363 , inspection-testing >= 0.4 && < 0.5
365 if !impl(ghcjs)
366 build-depends:
367 network >= 2.6 && < 4
368 if impl(ghc < 8.0)
369 build-depends:
370 semigroups >= 0.18 && < 0.19
372-------------------------------------------------------------------------------
373-- Test suites
374-------------------------------------------------------------------------------
376test-suite test
377 import: test-options
378 type: exitcode-stdio-1.0
379 main-is: Main.hs
380 js-sources: jsbits/clock.js
381 hs-source-dirs: test
382 build-depends:
383 streamly
384 , base >= 4.8 && < 5
385 , hspec >= 2.0 && < 3
386 , containers >= 0.5.8.2 && < 0.7
387 , transformers >= 0.4 && < 0.6
388 , mtl >= 2.2 && < 3
389 , exceptions >= 0.8 && < 0.11
390 default-language: Haskell2010
392test-suite pure-streams-base
393 import: test-options
394 type: exitcode-stdio-1.0
395 main-is: PureStreams.hs
396 hs-source-dirs: test
397 build-depends:
398 streamly
399 , base >= 4.8 && < 5
400 , hspec >= 2.0 && < 3
401 default-language: Haskell2010
403test-suite pure-streams-streamly
404 import: test-options
405 type: exitcode-stdio-1.0
406 main-is: PureStreams.hs
407 hs-source-dirs: test
408 cpp-options: -DUSE_STREAMLY_LIST
409 build-depends:
410 streamly
411 , base >= 4.8 && < 5
412 , hspec >= 2.0 && < 3
413 default-language: Haskell2010
415test-suite properties
416 import: test-options
417 type: exitcode-stdio-1.0
418 main-is: Prop.hs
419 js-sources: jsbits/clock.js
420 hs-source-dirs: test
421 build-depends:
422 streamly
423 , base >= 4.8 && < 5
424 , QuickCheck >= 2.10 && < 2.14
425 , hspec >= 2.0 && < 3
426 if impl(ghc < 8.0)
427 build-depends:
428 transformers >= 0.4 && < 0.6
429 default-language: Haskell2010
431test-suite array-test
432 import: test-options
433 type: exitcode-stdio-1.0
434 main-is: Arrays.hs
435 js-sources: jsbits/clock.js
436 hs-source-dirs: test
437 build-depends:
438 streamly
439 , base >= 4.8 && < 5
440 , QuickCheck >= 2.10 && < 2.14
441 , hspec >= 2.0 && < 3
442 if impl(ghc < 8.0)
443 build-depends:
444 transformers >= 0.4 && < 0.6
445 default-language: Haskell2010
447test-suite string-test
448 import: test-options
449 type: exitcode-stdio-1.0
450 main-is: String.hs
451 js-sources: jsbits/clock.js
452 hs-source-dirs: test
453 build-depends:
454 streamly
455 , base >= 4.8 && < 5
456 , QuickCheck >= 2.10 && < 2.14
457 , hspec >= 2.0 && < 3
458 if impl(ghc < 8.0)
459 build-depends:
460 transformers >= 0.4 && < 0.6
461 default-language: Haskell2010
463test-suite maxrate
464 import: exe-options
465 type: exitcode-stdio-1.0
466 default-language: Haskell2010
467 main-is: MaxRate.hs
468 js-sources: jsbits/clock.js
469 hs-source-dirs: test
470 if flag(dev)
471 buildable: True
472 build-Depends:
473 streamly
474 , base >= 4.8 && < 5
475 , clock >= 0.7.1 && < 0.9
476 , hspec >= 2.0 && < 3
477 , random >= 1.0.0 && < 2
478 else
479 buildable: False
481test-suite loops
482 import: test-options
483 type: exitcode-stdio-1.0
484 default-language: Haskell2010
485 main-is: loops.hs
486 hs-source-dirs: test
487 build-Depends:
488 streamly
489 , base >= 4.8 && < 5
491test-suite nested-loops
492 import: test-options
493 type: exitcode-stdio-1.0
494 default-language: Haskell2010
495 main-is: nested-loops.hs
496 hs-source-dirs: test
497 build-Depends:
498 streamly
499 , base >= 4.8 && < 5
500 , random >= 1.0.0 && < 2
502test-suite parallel-loops
503 import: test-options
504 type: exitcode-stdio-1.0
505 default-language: Haskell2010
506 main-is: parallel-loops.hs
507 hs-source-dirs: test
508 build-Depends:
509 streamly
510 , base >= 4.8 && < 5
511 , random >= 1.0.0 && < 2
513-------------------------------------------------------------------------------
514-- Benchmarks
515-------------------------------------------------------------------------------
517benchmark linear
518 import: bench-options
519 type: exitcode-stdio-1.0
520 hs-source-dirs: benchmark
521 main-is: Linear.hs
522 if flag(benchmark)
523 buildable: True
524 build-depends:
525 streamly
526 , base >= 4.8 && < 5
527 , deepseq >= 1.4.1 && < 1.5
528 , random >= 1.0 && < 2.0
529 , gauge >= 0.2.4 && < 0.3
530 if impl(ghc < 8.0)
531 build-depends:
532 transformers >= 0.4 && < 0.6
533 else
534 buildable: False
536benchmark linear-async
537 import: bench-options
538 cpp-options: -DLINEAR_ASYNC
539 type: exitcode-stdio-1.0
540 hs-source-dirs: benchmark
541 main-is: LinearAsync.hs
542 if flag(benchmark)
543 buildable: True
544 build-depends:
545 streamly
546 , base >= 4.8 && < 5
547 , deepseq >= 1.4.1 && < 1.5
548 , random >= 1.0 && < 2.0
549 , gauge >= 0.2.4 && < 0.3
550 if impl(ghc < 8.0)
551 build-depends:
552 transformers >= 0.4 && < 0.6
553 else
554 buildable: False
556benchmark linear-rate
557 import: bench-options
558 type: exitcode-stdio-1.0
559 hs-source-dirs: benchmark
560 main-is: LinearRate.hs
561 if flag(benchmark)
562 buildable: True
563 build-depends:
564 streamly
565 , base >= 4.8 && < 5
566 , deepseq >= 1.4.1 && < 1.5
567 , random >= 1.0 && < 2.0
568 , gauge >= 0.2.4 && < 0.3
569 if impl(ghc < 8.0)
570 build-depends:
571 transformers >= 0.4 && < 0.6
572 else
573 buildable: False
575benchmark nested
576 import: bench-options
577 type: exitcode-stdio-1.0
578 hs-source-dirs: benchmark
579 main-is: Nested.hs
580 other-modules: NestedOps
581 build-depends:
582 streamly
583 , base >= 4.8 && < 5
584 , deepseq >= 1.4.1 && < 1.5
585 , random >= 1.0 && < 2.0
586 , gauge >= 0.2.4 && < 0.3
587 if impl(ghc < 8.0)
588 build-depends:
589 transformers >= 0.4 && < 0.6
591benchmark nestedUnfold
592 import: bench-options
593 type: exitcode-stdio-1.0
594 hs-source-dirs: benchmark
595 main-is: NestedUnfold.hs
596 other-modules: NestedUnfoldOps
597 build-depends:
598 streamly
599 , base >= 4.8 && < 5
600 , deepseq >= 1.4.1 && < 1.5
601 , random >= 1.0 && < 2.0
602 , gauge >= 0.2.4 && < 0.3
603 if impl(ghc < 8.0)
604 build-depends:
605 transformers >= 0.4 && < 0.6
607benchmark array
608 import: bench-options
609 type: exitcode-stdio-1.0
610 hs-source-dirs: benchmark
611 main-is: Array.hs
612 other-modules: ArrayOps
613 build-depends:
614 streamly
615 , base >= 4.8 && < 5
616 , deepseq >= 1.4.1 && < 1.5
617 , random >= 1.0 && < 2.0
618 , gauge >= 0.2.4 && < 0.3
619 if impl(ghc < 8.0)
620 build-depends:
621 transformers >= 0.4 && < 0.6
623benchmark fileio
624 import: bench-options
625 type: exitcode-stdio-1.0
626 -- A value of 400 works better for some benchmarks, however, it takes
627 -- extraordinary amount of time to compile with that.
628 -- ghc-options: -funfolding-use-threshold=150
629 hs-source-dirs: benchmark
630 main-is: FileIO.hs
631 if flag(benchmark)
632 buildable: True
633 build-depends:
634 streamly
635 , base >= 4.8 && < 5
636 , gauge >= 0.2.4 && < 0.3
637 , typed-process >= 0.2.3 && < 0.3
638 , deepseq >= 1.4.1 && < 1.5
639 else
640 buildable: False
642benchmark concurrent
643 import: bench-options
644 type: exitcode-stdio-1.0
645 hs-source-dirs: benchmark
646 main-is: Concurrent.hs
647 if flag(dev)
648 buildable: True
649 build-depends:
650 streamly
651 , base >= 4.8 && < 5
652 , gauge >= 0.2.4 && < 0.3
653 else
654 buildable: False
656-------------------------------------------------------------------------------
657-- Internal benchmarks for unexposed modules
658-------------------------------------------------------------------------------
660-- We have to copy the streamly library modules here because there is no
661-- way to use unexposed modules from the library.
663benchmark base
664 import: bench-options
665 type: exitcode-stdio-1.0
666 include-dirs: src/Streamly/Internal/Data/Time
667 , src/Streamly/Streams
668 if os(windows)
669 c-sources: src/Streamly/Internal/Data/Time/Windows.c
670 if os(darwin)
671 c-sources: src/Streamly/Internal/Data/Time/Darwin.c
672 hs-source-dirs: benchmark, src
673 main-is: BaseStreams.hs
674 other-modules: Streamly.Internal.Data.Atomics
675 , Streamly.Internal.Data.Stream.StreamD.Type
676 , Streamly.Internal.Data.SVar
677 , Streamly.Internal.Data.Time.Units
678 , Streamly.Internal.Data.Time.Clock
679 , Streamly.Streams.StreamDK.Type
680 , Streamly.Streams.StreamDK
681 , Streamly.Streams.StreamK.Type
682 , Streamly.Streams.StreamK
683 , Streamly.Streams.StreamD
684 , Streamly.Streams.Prelude
685 , Streamly.FileSystem.IOVec
687 , StreamDOps
688 , StreamKOps
689 , StreamDKOps
691 if flag(dev)
692 buildable: True
693 build-depends:
694 base >= 4.8 && < 5
695 , deepseq >= 1.4.1 && < 1.5
696 , random >= 1.0 && < 2.0
697 , gauge >= 0.2.4 && < 0.3
699 , ghc-prim >= 0.2 && < 0.6
700 , containers >= 0.5.8.2 && < 0.7
701 , heaps >= 0.3 && < 0.4
703 -- concurrency
704 , atomic-primops >= 0.8 && < 0.9
705 , lockfree-queue >= 0.2.3 && < 0.3
707 , exceptions >= 0.8 && < 0.11
708 , monad-control >= 1.0 && < 2
709 , mtl >= 2.2 && < 3
710 , transformers >= 0.4 && < 0.6
711 , transformers-base >= 0.4 && < 0.5
713 if impl(ghc < 8.0)
714 build-depends:
715 semigroups >= 0.18 && < 0.19
716 else
717 buildable: False
719executable nano-bench
720 import: bench-options
721 hs-source-dirs: benchmark, src
722 include-dirs: src/Streamly/Internal/Data/Time
723 , src/Streamly/Streams
724 if os(windows)
725 c-sources: src/Streamly/Internal/Data/Time/Windows.c
726 if os(darwin)
727 c-sources: src/Streamly/Internal/Data/Time/Darwin.c
728 main-is: NanoBenchmarks.hs
729 other-modules: Streamly.Internal.Data.Atomics
730 , Streamly.Internal.Data.Stream.StreamD.Type
731 , Streamly.Internal.Data.SVar
732 , Streamly.Internal.Data.Time.Units
733 , Streamly.Internal.Data.Time.Clock
734 , Streamly.Streams.StreamK.Type
735 , Streamly.Streams.StreamK
736 , Streamly.FileSystem.IOVec
737 , Streamly.Streams.StreamD
738 if flag(dev)
739 buildable: True
740 build-depends:
741 base >= 4.8 && < 5
742 , gauge >= 0.2.4 && < 0.3
743 , ghc-prim >= 0.2 && < 0.6
744 , containers >= 0.5.8.2 && < 0.7
745 , deepseq >= 1.4.1 && < 1.5
746 , heaps >= 0.3 && < 0.4
747 , random >= 1.0 && < 2.0
749 -- concurrency
750 , atomic-primops >= 0.8 && < 0.9
751 , lockfree-queue >= 0.2.3 && < 0.3
753 , exceptions >= 0.8 && < 0.11
754 , monad-control >= 1.0 && < 2
755 , mtl >= 2.2 && < 3
756 , transformers >= 0.4 && < 0.6
757 , transformers-base >= 0.4 && < 0.5
758 else
759 buildable: False
761executable adaptive
762 import: bench-options
763 hs-source-dirs: benchmark
764 main-is: Adaptive.hs
765 default-language: Haskell2010
766 if flag(dev)
767 buildable: True
768 build-depends:
769 streamly
770 , base >= 4.8 && < 5
771 , gauge >= 0.2.4 && < 0.3
772 , random >= 1.0 && < 2.0
773 else
774 buildable: False
776executable chart
777 default-language: Haskell2010
778 ghc-options: -Wall
779 hs-source-dirs: benchmark
780 main-is: Chart.hs
781 if flag(dev) && !flag(no-charts) && !impl(ghcjs)
782 buildable: True
783 build-Depends:
784 base >= 4.8 && < 5
785 , bench-show >= 0.3 && < 0.4
786 , split
787 , transformers >= 0.4 && < 0.6
788 else
789 buildable: False
791-------------------------------------------------------------------------------
792-- Examples
793-------------------------------------------------------------------------------
795executable SearchQuery
796 import: exe-options
797 main-is: SearchQuery.hs
798 hs-source-dirs: examples
799 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
800 buildable: True
801 build-Depends:
802 streamly
803 , base >= 4.8 && < 5
804 , http-conduit >= 2.2.2 && < 2.4
805 else
806 buildable: False
808executable ListDir
809 import: exe-options
810 main-is: ListDir.hs
811 hs-source-dirs: examples
812 if flag(examples) || flag(examples-sdl)
813 buildable: True
814 build-Depends:
815 streamly
816 , base >= 4.8 && < 5
817 , directory >= 1.3 && < 1.4
818 if impl(ghc < 8.0)
819 build-depends:
820 transformers >= 0.4 && < 0.6
821 else
822 buildable: False
824executable MergeSort
825 import: exe-options
826 main-is: MergeSort.hs
827 hs-source-dirs: examples
828 if flag(examples) || flag(examples-sdl)
829 buildable: True
830 build-Depends:
831 streamly
832 , base >= 4.8 && < 5
833 , random >= 1.0.0 && < 2
834 else
835 buildable: False
837executable AcidRain
838 import: exe-options
839 main-is: AcidRain.hs
840 hs-source-dirs: examples
841 if flag(examples) || flag(examples-sdl)
842 buildable: True
843 build-Depends:
844 streamly
845 , base >= 4.8 && < 5
846 , mtl >= 2.2 && < 3
847 if impl(ghc < 8.0)
848 build-depends:
849 semigroups >= 0.18 && < 0.19
850 , transformers >= 0.4 && < 0.6
851 else
852 buildable: False
854executable CirclingSquare
855 import: exe-options
856 main-is: CirclingSquare.hs
857 hs-source-dirs: examples
858 if flag(examples-sdl)
859 buildable: True
860 build-Depends:
861 streamly
862 , base >= 4.8 && < 5
863 , SDL >= 0.6.5 && < 0.7
864 else
865 buildable: False
867executable ControlFlow
868 import: exe-options
869 main-is: ControlFlow.hs
870 hs-source-dirs: examples
871 if flag(examples) || flag(examples-sdl)
872 buildable: True
873 build-Depends:
874 streamly
875 , base >= 4.8 && < 5
876 , exceptions >= 0.8 && < 0.11
877 , transformers >= 0.4 && < 0.6
878 , transformers-base >= 0.4 && < 0.5
879 if impl(ghc < 8.0)
880 build-depends:
881 semigroups >= 0.18 && < 0.19
882 else
883 buildable: False
885executable HandleIO
886 import: exe-options
887 main-is: HandleIO.hs
888 hs-source-dirs: examples
889 if flag(examples) || flag(examples-sdl)
890 buildable: True
891 build-Depends:
892 streamly
893 , base >= 4.8 && < 5
894 else
895 buildable: False
897executable FileIOExamples
898 import: exe-options
899 main-is: FileIOExamples.hs
900 hs-source-dirs: examples
901 if flag(examples) || flag(examples-sdl)
902 buildable: True
903 build-Depends:
904 streamly
905 , base >= 4.8 && < 5
906 else
907 buildable: False
909executable EchoServer
910 import: exe-options
911 main-is: EchoServer.hs
912 hs-source-dirs: examples
913 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
914 buildable: True
915 build-Depends:
916 streamly
917 , base >= 4.8 && < 5
918 , network >= 2.6 && < 4
919 if impl(ghc < 8.0)
920 build-depends:
921 transformers >= 0.4 && < 0.6
922 else
923 buildable: False
925executable FileSinkServer
926 import: exe-options
927 main-is: FileSinkServer.hs
928 hs-source-dirs: examples
929 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
930 buildable: True
931 build-Depends:
932 streamly
933 , base >= 4.8 && < 5
934 , network >= 2.6 && < 4
935 if impl(ghc < 8.0)
936 build-depends:
937 transformers >= 0.4 && < 0.6
938 else
939 buildable: False
941executable FromFileClient
942 import: exe-options
943 main-is: FromFileClient.hs
944 hs-source-dirs: examples
945 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
946 buildable: True
947 build-Depends:
948 streamly
949 , base >= 4.8 && < 5
950 else
951 buildable: False
953executable WordClassifier
954 import: exe-options
955 main-is: WordClassifier.hs
956 hs-source-dirs: examples
957 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
958 buildable: True
959 build-Depends:
960 streamly
961 , base >= 4.8 && < 5
962 , hashable >= 1.2 && < 1.4
963 , unordered-containers >= 0.2 && < 0.3
964 else
965 buildable: False
967executable WordCount
968 import: exe-options
969 main-is: WordCount.hs
970 hs-source-dirs: examples
971 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
972 buildable: True
973 build-Depends:
974 streamly
975 , base >= 4.8 && < 5
976 , vector >= 0.12 && < 0.13
977 else
978 buildable: False
980executable CamelCase
981 import: exe-options
982 main-is: CamelCase.hs
983 hs-source-dirs: examples
984 if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
985 buildable: True
986 build-Depends:
987 streamly
988 , base >= 4.8 && < 5
989 else
990 buildable: False