packages feed

Cabal revisions of streamly-0.7.3.2

Hackage metadata revisions edit the .cabal file after upload; each diff below is one revision.

revision 1
-cabal-version:      2.2-name:               streamly-version:            0.7.3.2-synopsis:           Beautiful Streaming, Concurrent and Reactive Composition-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.-  .-  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-  <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-  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-  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-  <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:-  .-  * /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.-  * <https://github.com/composewell/streaming-benchmarks Streaming Benchmarks>-  * <https://github.com/composewell/concurrency-benchmarks Concurrency Benchmarks>-  .---homepage:            https://github.com/composewell/streamly-bug-reports:         https://github.com/composewell/streamly/issues-license:             BSD-3-Clause-license-file:        LICENSE-tested-with:         GHC==7.10.3-                   , GHC==8.0.2-                   , GHC==8.4.4-                   , GHC==8.6.5-                   , GHC==8.8.1-                   , GHC==8.10.1-author:              Harendra Kumar-maintainer:          streamly@composewell.com-copyright:           2017 Harendra Kumar-category:            Control, Concurrency, Streaming, Reactivity-stability:           Experimental-build-type:          Configure--extra-source-files:-    Changelog.md-    credits/*.md-    credits/base-4.12.0.0.txt-    credits/primitive-0.7.0.0.txt-    credits/bjoern-2008-2009.txt-    credits/clock-0.7.2.txt-    credits/foldl-1.4.5.txt-    credits/pipes-concurrency-2.0.8.txt-    credits/transient-0.5.5.txt-    credits/vector-0.12.0.2.txt-    credits/Yampa-0.10.6.2.txt-    README.md-    docs/streamly-vs-async.md-    docs/streamly-vs-lists.md-    docs/transformers.md-    docs/Build.md-    design/*.md-    design/*.png-    bench.sh-    stack.yaml-    src/Streamly/Internal/Data/Stream/Instances.hs-    src/inline.hs-    configure.ac-    configure-    src/Streamly/Internal/Data/Time/config.h.in-    benchmark/streamly-benchmarks.cabal-    benchmark/README.md-    benchmark/*.hs-    benchmark/lib/Streamly/Benchmark/*.hs-    benchmark/Streamly/Benchmark/Memory/*.hs-    benchmark/Streamly/Benchmark/Data/*.hs-    benchmark/Streamly/Benchmark/Data/Prim/*.hs-    benchmark/Streamly/Benchmark/Data/Stream/*.hs-    benchmark/Streamly/Benchmark/FileIO/*.hs-    benchmark/Streamly/Benchmark/Prelude/*.hs-    benchmark/Streamly/Benchmark/Prelude/Serial/*.hs--extra-tmp-files:-    config.log-    config.status-    autom4te.cache-    src/Streamly/Internal/Data/Time/config.h--source-repository head-    type: git-    location: https://github.com/composewell/streamly--flag fusion-plugin-  description: Use fusion plugin for benchmarks and executables-  manual: True-  default: False--flag inspection-  description: Enable inspection testing-  manual: True-  default: False--flag debug-  description: Debug build with asserts enabled-  manual: True-  default: False--flag dev-  description: Development build-  manual: True-  default: False--flag has-llvm-  description: Use llvm backend for code generation-  manual: True-  default: False--flag no-fusion-  description: Disable rewrite rules for stream fusion-  manual: True-  default: False--flag streamk-  description: Use CPS style streams when possible-  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------------------------------------------------------------------------------------ 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--    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-               -fdicts-strict-               -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-  if flag(fusion-plugin) && !impl(ghcjs) && !impl(ghc < 8.6)-    ghc-options: -fplugin Fusion.Plugin-    build-depends:-        fusion-plugin     >= 0.2   && < 0.3---- Used by maxrate test, benchmarks and executables-common exe-options-  import: compile-options, optimization-options, threading-options-  if flag(fusion-plugin) && !impl(ghcjs) && !impl(ghc < 8.6)-    ghc-options: -fplugin Fusion.Plugin-    build-depends:-        fusion-plugin     >= 0.2   && < 0.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-                     , Streamly.Data.Prim.Array--                    -- Memory storage-                       Streamly.Memory.Malloc-                     , Streamly.Memory.Ring--    if impl(ghc < 9)-      other-modules:-          Streamly.FileSystem.IOVec-        , Streamly.FileSystem.FDIO-        , Streamly.FileSystem.FD--    exposed-modules:-                       Streamly.Prelude-                     , Streamly-                     , Streamly.Data.Fold-                     , Streamly.Data.Unfold-                     , Streamly.Data.Unicode.Stream--                    -- IO devices-                     , Streamly.Memory.Array-                     , Streamly.FileSystem.Handle--                     , Streamly.Tutorial--                     -- Internal modules-                     , Streamly.Internal.BaseCompat-                     , Streamly.Internal.Control.Monad-                     , Streamly.Internal.Data.Strict-                     , Streamly.Internal.Data.Atomics-                     , Streamly.Internal.Data.Time-                     , Streamly.Internal.Data.Time.Units-                     , Streamly.Internal.Data.Time.Clock-                     , Streamly.Internal.Data.SVar-                     , Streamly.Internal.Data.Array-                     , Streamly.Internal.Data.Prim.Array.Types-                     , Streamly.Internal.Data.Prim.Array-                     , Streamly.Internal.Data.SmallArray.Types-                     , Streamly.Internal.Data.SmallArray-                     , Streamly.Internal.Memory.Array.Types-                     , Streamly.Internal.Memory.Array-                     , Streamly.Internal.Memory.ArrayStream-                     , Streamly.Internal.Data.Fold.Types-                     , Streamly.Internal.Data.Fold-                     , Streamly.Internal.Data.Parser-                     , Streamly.Internal.Data.Parser.Types-                     , Streamly.Internal.Data.Parser.Tee-                     , 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-                     , Streamly.Internal.Data.Pipe.Types-                     , Streamly.Internal.Data.Pipe-                     , Streamly.Internal.Data.List-                     , Streamly.Internal.FileSystem.Handle-                     , 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--                     -- Mutable data-                     , Streamly.Internal.Mutable.Prim.Var--    if !impl(ghcjs)-       exposed-modules:-                       Streamly.Network.Socket-                     , Streamly.Network.Inet.TCP--                     , 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-                     , directory         >= 1.2.2 && < 1.4-                     , exceptions        >= 0.8   && < 0.11-                     , ghc-prim          >= 0.2   && < 0.10-                     , mtl               >= 2.2   && < 3-                     , primitive         >= 0.5.4 && < 0.8-                     , transformers      >= 0.4   && < 0.6--                     , heaps             >= 0.3     && < 0.5--                    -- concurrency-                     , atomic-primops    >= 0.8   && < 0.9-                     , lockfree-queue    >= 0.2.3 && < 0.3--                    -- transfomers-                     , monad-control     >= 1.0   && < 2-                     , transformers-base >= 0.4   && < 0.5--                     , fusion-plugin-types >= 0.1 && < 0.2--  if !impl(ghcjs)-    build-depends:-                       network           >= 2.6   && < 4-  if impl(ghc < 8.0)-    build-depends:-                       semigroups        >= 0.18   && < 0.19--  if flag(inspection)-    build-depends:     template-haskell   >= 2.14  && < 2.17-                     , inspection-testing >= 0.4   && < 0.5--  -- 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-  js-sources: jsbits/clock.js-  hs-source-dirs: test-  build-depends:-      streamly-    , 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.15-    , hspec             >= 2.0   && < 3-  default-language: Haskell2010--test-suite pure-streams-base-  import: test-options-  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--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-  js-sources: jsbits/clock.js-  hs-source-dirs: test-  build-depends:-      streamly-    , base              >= 4.8   && < 5-    , QuickCheck        >= 2.10  && < 2.15-    , hspec             >= 2.0   && < 3-  if impl(ghc < 8.0)-    build-depends:-        transformers  >= 0.4 && < 0.6-  default-language: Haskell2010--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.15-    , 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.15-  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.15-    , 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-    , base              >= 4.8   && < 5-    , QuickCheck        >= 2.10  && < 2.15-    , 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.15-    , 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.15-    , 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-  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--test-suite version-bounds-  import: test-options-  type: exitcode-stdio-1.0-  default-language: Haskell2010-  main-is: version-bounds.hs-  hs-source-dirs:  test-  build-Depends:-      streamly-    , ghc-    , base   >= 4.8   && < 5------------------------------------------------------------------------------------ Examples----------------------------------------------------------------------------------executable SearchQuery-  import: exe-options-  main-is: SearchQuery.hs-  hs-source-dirs:  examples-  if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)-    buildable: True-    build-depends:-        streamly-      , base          >= 4.8   && < 5-      , http-conduit  >= 2.2.2 && < 2.4-    if impl(ghc < 8.0)-      build-depends:-        unliftio-core < 0.2-  else-    buildable: False--executable ListDir-  import: exe-options-  main-is: ListDir.hs-  hs-source-dirs:  examples-  if flag(examples) || flag(examples-sdl)-    buildable: True-    build-Depends:-        streamly-      , base    >= 4.8   && < 5-    if impl(ghc < 8.0)-      build-depends:-          transformers  >= 0.4    && < 0.6-  else-    buildable: False--executable MergeSort-  import: exe-options-  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 && < 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-    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-  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--executable HandleIO-  import: exe-options-  main-is: HandleIO.hs-  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)-    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-    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-      , network           >= 2.6   && < 4-    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--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-      , hashable             >= 1.2   && < 1.4-      , 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+cabal-version:      2.2
+name:               streamly
+version:            0.7.3.2
+x-revision: 1
+synopsis:           Beautiful Streaming, Concurrent and Reactive Composition
+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.
+  .
+  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
+  <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
+  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
+  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
+  <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:
+  .
+  * /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.
+  * <https://github.com/composewell/streaming-benchmarks Streaming Benchmarks>
+  * <https://github.com/composewell/concurrency-benchmarks Concurrency Benchmarks>
+  .
+
+
+homepage:            https://github.com/composewell/streamly
+bug-reports:         https://github.com/composewell/streamly/issues
+license:             BSD-3-Clause
+license-file:        LICENSE
+tested-with:         GHC==7.10.3
+                   , GHC==8.0.2
+                   , GHC==8.4.4
+                   , GHC==8.6.5
+                   , GHC==8.8.1
+                   , GHC==8.10.1
+author:              Harendra Kumar
+maintainer:          streamly@composewell.com
+copyright:           2017 Harendra Kumar
+category:            Control, Concurrency, Streaming, Reactivity
+stability:           Experimental
+build-type:          Configure
+
+extra-source-files:
+    Changelog.md
+    credits/*.md
+    credits/base-4.12.0.0.txt
+    credits/primitive-0.7.0.0.txt
+    credits/bjoern-2008-2009.txt
+    credits/clock-0.7.2.txt
+    credits/foldl-1.4.5.txt
+    credits/pipes-concurrency-2.0.8.txt
+    credits/transient-0.5.5.txt
+    credits/vector-0.12.0.2.txt
+    credits/Yampa-0.10.6.2.txt
+    README.md
+    docs/streamly-vs-async.md
+    docs/streamly-vs-lists.md
+    docs/transformers.md
+    docs/Build.md
+    design/*.md
+    design/*.png
+    bench.sh
+    stack.yaml
+    src/Streamly/Internal/Data/Stream/Instances.hs
+    src/inline.hs
+    configure.ac
+    configure
+    src/Streamly/Internal/Data/Time/config.h.in
+    benchmark/streamly-benchmarks.cabal
+    benchmark/README.md
+    benchmark/*.hs
+    benchmark/lib/Streamly/Benchmark/*.hs
+    benchmark/Streamly/Benchmark/Memory/*.hs
+    benchmark/Streamly/Benchmark/Data/*.hs
+    benchmark/Streamly/Benchmark/Data/Prim/*.hs
+    benchmark/Streamly/Benchmark/Data/Stream/*.hs
+    benchmark/Streamly/Benchmark/FileIO/*.hs
+    benchmark/Streamly/Benchmark/Prelude/*.hs
+    benchmark/Streamly/Benchmark/Prelude/Serial/*.hs
+
+extra-tmp-files:
+    config.log
+    config.status
+    autom4te.cache
+    src/Streamly/Internal/Data/Time/config.h
+
+source-repository head
+    type: git
+    location: https://github.com/composewell/streamly
+
+flag fusion-plugin
+  description: Use fusion plugin for benchmarks and executables
+  manual: True
+  default: False
+
+flag inspection
+  description: Enable inspection testing
+  manual: True
+  default: False
+
+flag debug
+  description: Debug build with asserts enabled
+  manual: True
+  default: False
+
+flag dev
+  description: Development build
+  manual: True
+  default: False
+
+flag has-llvm
+  description: Use llvm backend for code generation
+  manual: True
+  default: False
+
+flag no-fusion
+  description: Disable rewrite rules for stream fusion
+  manual: True
+  default: False
+
+flag streamk
+  description: Use CPS style streams when possible
+  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
+
+-------------------------------------------------------------------------------
+-- 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
+
+    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
+               -fdicts-strict
+               -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
+  if flag(fusion-plugin) && !impl(ghcjs) && !impl(ghc < 8.6)
+    ghc-options: -fplugin Fusion.Plugin
+    build-depends:
+        fusion-plugin     >= 0.2   && < 0.3
+
+-- Used by maxrate test, benchmarks and executables
+common exe-options
+  import: compile-options, optimization-options, threading-options
+  if flag(fusion-plugin) && !impl(ghcjs) && !impl(ghc < 8.6)
+    ghc-options: -fplugin Fusion.Plugin
+    build-depends:
+        fusion-plugin     >= 0.2   && < 0.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
+                     , Streamly.Data.Prim.Array
+
+                    -- Memory storage
+                       Streamly.Memory.Malloc
+                     , Streamly.Memory.Ring
+
+    if impl(ghc < 9)
+      other-modules:
+          Streamly.FileSystem.IOVec
+        , Streamly.FileSystem.FDIO
+        , Streamly.FileSystem.FD
+
+    exposed-modules:
+                       Streamly.Prelude
+                     , Streamly
+                     , Streamly.Data.Fold
+                     , Streamly.Data.Unfold
+                     , Streamly.Data.Unicode.Stream
+
+                    -- IO devices
+                     , Streamly.Memory.Array
+                     , Streamly.FileSystem.Handle
+
+                     , Streamly.Tutorial
+
+                     -- Internal modules
+                     , Streamly.Internal.BaseCompat
+                     , Streamly.Internal.Control.Monad
+                     , Streamly.Internal.Data.Strict
+                     , Streamly.Internal.Data.Atomics
+                     , Streamly.Internal.Data.Time
+                     , Streamly.Internal.Data.Time.Units
+                     , Streamly.Internal.Data.Time.Clock
+                     , Streamly.Internal.Data.SVar
+                     , Streamly.Internal.Data.Array
+                     , Streamly.Internal.Data.Prim.Array.Types
+                     , Streamly.Internal.Data.Prim.Array
+                     , Streamly.Internal.Data.SmallArray.Types
+                     , Streamly.Internal.Data.SmallArray
+                     , Streamly.Internal.Memory.Array.Types
+                     , Streamly.Internal.Memory.Array
+                     , Streamly.Internal.Memory.ArrayStream
+                     , Streamly.Internal.Data.Fold.Types
+                     , Streamly.Internal.Data.Fold
+                     , Streamly.Internal.Data.Parser
+                     , Streamly.Internal.Data.Parser.Types
+                     , Streamly.Internal.Data.Parser.Tee
+                     , 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
+                     , Streamly.Internal.Data.Pipe.Types
+                     , Streamly.Internal.Data.Pipe
+                     , Streamly.Internal.Data.List
+                     , Streamly.Internal.FileSystem.Handle
+                     , 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
+
+                     -- Mutable data
+                     , Streamly.Internal.Mutable.Prim.Var
+
+    if !impl(ghcjs)
+       exposed-modules:
+                       Streamly.Network.Socket
+                     , Streamly.Network.Inet.TCP
+
+                     , 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
+                     , directory         >= 1.2.2 && < 1.4
+                     , exceptions        >= 0.8   && < 0.11
+                     , ghc-prim          >= 0.2   && < 0.10
+                     , mtl               >= 2.2   && < 3
+                     , primitive         >= 0.5.4 && < 0.9
+                     , transformers      >= 0.4   && < 0.6
+
+                     , heaps             >= 0.3     && < 0.5
+
+                    -- concurrency
+                     , atomic-primops    >= 0.8   && < 0.9
+                     , lockfree-queue    >= 0.2.3 && < 0.3
+
+                    -- transfomers
+                     , monad-control     >= 1.0   && < 2
+                     , transformers-base >= 0.4   && < 0.5
+
+                     , fusion-plugin-types >= 0.1 && < 0.2
+
+  if !impl(ghcjs)
+    build-depends:
+                       network           >= 2.6   && < 4
+  if impl(ghc < 8.0)
+    build-depends:
+                       semigroups        >= 0.18   && < 0.19
+
+  if flag(inspection)
+    build-depends:     template-haskell   >= 2.14  && < 2.17
+                     , inspection-testing >= 0.4   && < 0.5
+
+  -- 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
+  js-sources: jsbits/clock.js
+  hs-source-dirs: test
+  build-depends:
+      streamly
+    , 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.15
+    , hspec             >= 2.0   && < 3
+  default-language: Haskell2010
+
+test-suite pure-streams-base
+  import: test-options
+  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
+
+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
+  js-sources: jsbits/clock.js
+  hs-source-dirs: test
+  build-depends:
+      streamly
+    , base              >= 4.8   && < 5
+    , QuickCheck        >= 2.10  && < 2.15
+    , hspec             >= 2.0   && < 3
+  if impl(ghc < 8.0)
+    build-depends:
+        transformers  >= 0.4 && < 0.6
+  default-language: Haskell2010
+
+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.15
+    , 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.15
+  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.15
+    , 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
+    , base              >= 4.8   && < 5
+    , QuickCheck        >= 2.10  && < 2.15
+    , 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.15
+    , 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.15
+    , 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
+  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
+
+test-suite version-bounds
+  import: test-options
+  type: exitcode-stdio-1.0
+  default-language: Haskell2010
+  main-is: version-bounds.hs
+  hs-source-dirs:  test
+  build-Depends:
+      streamly
+    , ghc
+    , base   >= 4.8   && < 5
+
+-------------------------------------------------------------------------------
+-- Examples
+-------------------------------------------------------------------------------
+
+executable SearchQuery
+  import: exe-options
+  main-is: SearchQuery.hs
+  hs-source-dirs:  examples
+  if (flag(examples) || flag(examples-sdl)) && !impl(ghcjs)
+    buildable: True
+    build-depends:
+        streamly
+      , base          >= 4.8   && < 5
+      , http-conduit  >= 2.2.2 && < 2.4
+    if impl(ghc < 8.0)
+      build-depends:
+        unliftio-core < 0.2
+  else
+    buildable: False
+
+executable ListDir
+  import: exe-options
+  main-is: ListDir.hs
+  hs-source-dirs:  examples
+  if flag(examples) || flag(examples-sdl)
+    buildable: True
+    build-Depends:
+        streamly
+      , base    >= 4.8   && < 5
+    if impl(ghc < 8.0)
+      build-depends:
+          transformers  >= 0.4    && < 0.6
+  else
+    buildable: False
+
+executable MergeSort
+  import: exe-options
+  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 && < 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
+    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
+  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
+
+executable HandleIO
+  import: exe-options
+  main-is: HandleIO.hs
+  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)
+    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
+    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
+      , network           >= 2.6   && < 4
+    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
+
+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
+      , hashable             >= 1.2   && < 1.4
+      , 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