Streaming, dataflow programming and declarative concurrency.
For upgrading to streamly-0.9.0+ please read the Streamly-0.9.0 upgrade guide.
Streamly is a standard library for Haskell that focuses on C-like performance, modular combinators, and streaming data flow model. Streamly consists of two packages, the streamly-core package provides functionality that depends only on boot libraries, and the streamly package provides additional functionality like concurrency, time, lifted exceptions, and networking. For unified documentation visit the streamly website.
Streamly provides unified, modular building blocks to build high-performance, concurrent, scalable applications in Haskell. Stream fusion optimizations in streamly enable exceptional modularity with high performance comparable to C. Streamly complements the Haskell base package, supplying additional functionality to quickly build general-purpose applications in Haskell. For high-level functionality built over streamly like streaming OS processes, shell programming, GNU coreutils, statistics, and compression libraries please see the streamly ecosystem packages.
Performance with modularity:
Performance on par with C (Benchmarks)
API close to standard Haskell lists (Examples)
Declarative concurrency with automatic scaling
Filesystem, fsnotify, network, and Unicode support included
Fast binary serialization (with optional JSON like features)
More functionality is provided via many (ecosystem packages)
Unified and powerful abstractions:
Unifies streams, arrays, folds, and parsers
Unifies
Data.List
,list-t
, andlogict
with streamingUnifies concurrency with standard streaming abstractions
Unifies reactive, time-domain programming with streaming
Unifies binary serialization and unboxed arrays
Interworks with other streaming libraries
Streamly: Idiomatic Haskell with C-Like Performance
Upgrading to 0.9.0+
Please read the Streamly 0.9.0 Upgrade Guide.
Overview
Streamly is a powerful Haskell library that provides developers with the essential building blocks to create safe, scalable, modular, and high-performance software. With Streamly, developers can enjoy the benefits of Haskell's type safety while leveraging C-like program performance. Streamly offers a comprehensive range of features, comprising:
- Haskell's strong type safety.
- C-program-like performance capabilities.
- Flexible, modular building blocks.
- Idiomatic functional programming.
- Fearless, declarative concurrency for seamless parallel execution.
- A collection of ecosystem libraries for fast and efficient development.
Check out the Streamly Getting Started Guide and Quick Overview for an introduction to the library. For more detailed documentation, visit the Haskell Streamly website.
Blazing Fast
Streamly delivers C-like speed in Haskell by fusing stream pipelines using the stream-fusion technique, resulting in compiled code that is equivalent to handwritten C code, eliminating intermediate allocations and function calls.
For a comprehensive comparison of Streamly to other Haskell streaming libraries, check out our streaming benchmarks page. In fact, Streamly's fused loops can be up to 100 times faster than those of libraries without stream fusion.
Declarative Concurrency
Streamly introduces declarative concurrency to standard functional streaming abstractions. Declarative concurrency abstracts away the low-level details of concurrency management, such as locks and threads, and allows for easier and safer parallelization of code. For example, with Streamly you can do things like repeat actions concurrently to generate a stream of results, map functions concurrently on a stream, and combine multiple streams concurrently to create a single output stream.
Unified API
Streamly provides a comprehensive and unified API for basic programming needs, covering a wide range of areas including streaming, concurrency, logic programming, reactive programming, pinned and unpinned arrays, serialization, builders, parsers, unicode processing, file-io, file system events, and network-io. By unifying functionality from disparate Haskell libraries, Streamly simplifies development while delivering equivalent or improved performance. Additionally, the complexity of handling combinations of lazy, strict, bytestring, and text is eliminated by using streams for lazy evaluation, and by generalizing bytestring and text to arrays.
Check out Streamly's documentation for more information about Streamly's features.
Batteries Included
In addition to the fundamental programming constructs, Streamly also provides higher-level functionality through supporting packages such as streamly-process, streamly-shell, and streamly-coreutils that are essential for general programming tasks. Check out the streamly-examples repository for some program snippets.
Highly Modular
Traditionally, you must choose between modularity and performance when writing code. However, with Haskell Streamly, you can have the best of both worlds. By taking advantage of GHC's stream fusion optimizations (such as case-of-case
and spec-constr
), Streamly achieves performance comparable to an equivalent C program while still allowing for highly modular code.
Credits
The following authors/libraries have influenced or inspired this library in a significant way:
Please see the credits
directory for a full list of contributors, credits and licenses.
Licensing
Streamly is an open source project available under a liberal BSD-3-Clause license
Contributing to Streamly
As an open project we welcome contributions:
Getting Support
Professional support is available for Streamly: please contact [email protected].
You can also join our community chat channel on Gitter.