streamly
Version 0.7.3.2 revision 0 uploaded by adithyaov.
Package meta
- 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 streaming, pipes, and 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 list-t and also the logic programming library logict. The grouping, splitting and windowing combinators in streamly can be compared to the window operators in 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 async package. Streamly is a first class reactive programming library. If you are familiar with 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 Yampa or 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 bytestring, 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 file in the package
Building: 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: examples directory in the package
Guides: docs directory in the package, for documentation on advanced topics, limitations, semantics of the library or on specific use cases.
- Author
- Harendra Kumar
- Bug reports
- https://github.com/composewell/streamly/issues
- Category
- Control, Concurrency, Streaming, Reactivity
- Copyright
- 2017 Harendra Kumar
- Homepage
- https://github.com/composewell/streamly
- Maintainer
- streamly@composewell.com
- Package URL
- n/a
- Stability
- Experimental
Components
- lib:streamly
- exe:AcidRain
- exe:CamelCase
- exe:CirclingSquare
- exe:ControlFlow
- exe:EchoServer
- exe:FileIOExamples
- exe:FileSinkServer
- exe:FromFileClient
- exe:HandleIO
- exe:ListDir
- exe:MergeSort
- exe:SearchQuery
- exe:WordClassifier
- exe:WordCount
- test:array-test
- test:data-array-test
- test:internal-data-fold-test
- test:internal-prelude-test
- test:loops
- test:maxrate
- test:nested-loops
- test:parallel-loops
- test:primarray-test
- test:properties
- test:pure-streams-base
- test:pure-streams-streamly
- test:smallarray-test
- test:string-test
- test:test
- test:version-bounds