High performance, concurrent functional programming abstractions
Go to file
2024-07-02 23:07:30 +05:30
.circleci Update packcheck 2024-06-27 17:32:10 +05:30
.github/workflows Use GHC-9.8.1 for packdiff 2024-07-02 22:44:29 +05:30
benchmark Fix hlint in benchmarks 2024-06-25 00:25:15 +05:30
bin Fix streamly versions in the doc 2023-03-09 18:02:56 +05:30
core Support FreeBSD in streamly-core 2024-05-01 13:22:33 +05:30
docs Add changelog entry for rate control fix 2024-07-02 23:07:30 +05:30
examples Fix markdown 2021-04-05 07:56:54 +05:30
src Fix rate control in preStopCheck of ordered stream worker 2024-07-02 23:07:30 +05:30
targets Disable the Stream.Rate target as it is dev only 2024-06-25 00:24:02 +05:30
test Bump the upper bound of network 2024-06-28 17:51:49 +05:30
.cirrus.yml Add a cirrus CI for FreeBSD 2024-05-01 13:22:33 +05:30
.ghci Add .ghci to use -fobject-code option 2021-01-18 12:48:35 +05:30
.gitignore Update .gitignore 2022-02-04 08:02:40 +05:30
.hlint.ignore Fix hlint issues for streamly-core 2024-01-29 14:10:49 +05:30
.hlint.yaml Fix hlint issues for streamly-core 2024-01-29 14:10:49 +05:30
.packcheck.ignore Add a cirrus CI for FreeBSD 2024-05-01 13:22:33 +05:30
appveyor.yml Update the packcheck github commit in the CIs 2024-04-30 00:22:45 +05:30
cabal.project Rename parseKChunks to chunkParse 2023-02-16 10:31:19 +05:30
cabal.project.coverage Extract streamly-core out of streamly 2022-03-10 01:25:49 +05:30
cabal.project.doctest Use StreamD by default, expose StreamK as separate module 2023-02-06 22:09:26 +05:30
cabal.project.ghc-head Upgrade lockfree-queue to version 0.2.4 2022-08-28 01:37:46 +05:30
cabal.project.hpc-coveralls Update hpc-coveralls git revision 2021-06-15 17:53:20 +05:30
cabal.project.O0 Add a repl script in "bin" 2022-08-21 00:07:05 +05:30
cabal.project.packdiff Update packdiff repo commit 2024-07-02 22:44:29 +05:30
cabal.project.report Use a previous version of streamly in the tools used 2023-07-13 17:29:39 +05:30
cabal.project.streamly Remove streamly-core from extra-source files 2022-10-12 22:33:58 +05:30
cabal.project.Werror Extract streamly-core out of streamly 2022-03-10 01:25:49 +05:30
cabal.project.Werror-nocode Fix Werror-nocode build 2022-08-21 00:05:14 +05:30
CHANGELOG.md Rename "ProjectRelated" document node to "Project" (#2378) 2023-07-06 16:46:50 +05:30
configure Bump the major versions of packages (Post release task) 2024-02-23 13:25:08 +05:30
configure.ac Bump the major versions of packages (Post release task) 2024-02-23 13:25:08 +05:30
CONTRIBUTING.md Symlink a few moved dev files 2022-04-11 01:16:09 +05:30
default.nix Update nix to 22.05 2022-09-05 20:09:47 +05:30
hie.yaml Cleanup and sort benchmark paths in hie.yaml 2024-06-25 00:24:02 +05:30
LICENSE Remove unecessary license sections in the LICENSE files 2023-07-28 00:50:03 +05:30
README.md Rename "ProjectRelated" document node to "Project" (#2378) 2023-07-06 16:46:50 +05:30
Setup.hs Remove doctests 2021-06-21 14:53:18 +05:30
stack.yaml Update the stack file 2023-03-09 18:02:56 +05:30
streamly.cabal Bump the upper bound of unicode-data 2024-07-02 19:36:13 +05:30

Streamly: Idiomatic Haskell with C-Like Performance

Gitter chat Hackage Hackage

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 support@composewell.com.

You can also join our community chat channel on Gitter.