on fec4a83 help sign in
134 lines 5.5 kB history raw
1# [Streamly][]: Idiomatic Haskell with C-Like Performance
3[![Gitter chat](https://badges.gitter.im/composewell/gitter.svg)](https://gitter.im/composewell/streamly)
4[![Hackage](https://img.shields.io/hackage/v/streamly.svg?style=flat)](https://hackage.haskell.org/package/streamly)
6Streamly is a powerful Haskell library that provides developers with
7the essential building blocks to create safe, scalable, modular, and
8high-performance software. With Streamly, developers can enjoy the
9benefits of Haskell's type safety while leveraging C-like program
10performance. Streamly offers a comprehensive range of features,
11comprising:
13* Haskell's strong type safety.
14* C-program-like performance capabilities.
15* Flexible, modular building blocks.
16* Idiomatic functional programming.
17* Fearless, declarative concurrency for seamless parallel execution.
18* A collection of ecosystem libraries for fast and efficient development.
20Check out the [Streamly Setup and Usage
21Guide](/docs/User/Tutorials/setup-and-usage.md) and [Quick
22Overview](/docs/User/Tutorials/quick-overview.md) for an introduction
23to the library. For more detailed documentation, visit the [Haskell
24Streamly website][Streamly].
26## Blazing Fast
28Streamly delivers C-like speed in Haskell by fusing stream pipelines
29using the stream-fusion technique, resulting in compiled code that is
30equivalent to handwritten C code, eliminating intermediate allocations
31and function calls.
33For a comprehensive comparison of Streamly to other Haskell streaming
34libraries, check out our [streaming benchmarks][streaming-benchmarks]
35page. In fact, Streamly's fused loops can be up to 100 times faster than
36those of libraries without stream fusion.
38## Declarative Concurrency
40Streamly introduces declarative concurrency to standard functional
41streaming abstractions. Declarative concurrency abstracts away the
42low-level details of concurrency management, such as locks and threads,
43and allows for easier and safer parallelization of code. For example,
44with Streamly you can do things like repeat actions concurrently to
45generate a stream of results, map functions concurrently on a stream,
46and combine multiple streams concurrently to create a single output
47stream.
49## Unified API
51Streamly provides a comprehensive and unified API for basic programming
52needs, covering a wide range of areas including streaming, concurrency,
53logic programming, reactive programming, pinned and unpinned arrays,
54serialization, builders, parsers, unicode processing, file-io, file
55system events, and network-io. By unifying functionality from disparate
56Haskell libraries, Streamly simplifies development while delivering
57equivalent or improved performance. Additionally, the complexity
58of handling combinations of lazy, strict, bytestring, and text is
59eliminated by using streams for lazy evaluation, and by generalizing
60bytestring and text to arrays.
62Check out [Streamly's documentation][Streamly] for more information
63about Streamly's features.
65## Batteries Included
67In addition to the fundamental programming constructs, Streamly also
68provides higher-level functionality through supporting packages such as
69[streamly-process][], [streamly-shell][], and [streamly-coreutils][]
70that are essential for general programming tasks. Check out the
71[streamly-examples][] repository for some program snippets.
73## Highly Modular
75Traditionally, you must choose between modularity and performance when
76writing code. However, with [Haskell Streamly][Streamly], you can have
77the best of both worlds. By taking advantage of GHC's stream fusion
78optimizations (such as `case-of-case` and `spec-constr`), Streamly achieves
79performance comparable to an equivalent C program while still allowing
80for highly modular code.
82## Credits
84The following authors/libraries have influenced or inspired this library in a
85significant way:
87 * Roman Leshchinskiy ([vector](http://hackage.haskell.org/package/vector))
88 * Gabriella Gonzalez ([foldl](https://hackage.haskell.org/package/foldl))
89 * Alberto G. Corona ([transient](https://hackage.haskell.org/package/transient))
91Please see the [`credits`](/docs/User/ProjectRelated/Credits.md) directory for a full
92list of contributors, credits and licenses.
94## Licensing
96Streamly is an [open source](https://github.com/composewell/streamly)
97project available under a liberal [BSD-3-Clause license][LICENSE]
99## Contributing to Streamly
101As an open project we welcome contributions:
103* [Streamly Contributor's Guide][CONTRIBUTING.md]
104* [Contact the streamly development team](mailto:streamly@composewell.com)
106## Getting Support
108Professional support is available for [Streamly][]: please contact
109[support@composewell.com](mailto:support@composewell.com).
111You can also join our [community chat
112channel](https://gitter.im/composewell/streamly) on Gitter.
114<!--
115Link References.
116-->
118[Streamly]: https://streamly.composewell.com/
119[streaming-benchmarks]: https://github.com/composewell/streaming-benchmarks
120[concurrency-benchmarks]: https://github.com/composewell/concurrency-benchmarks
121[streamly-examples]: https://github.com/composewell/streamly-examples
122[streamly-process]: https://github.com/composewell/streamly-process
123[streamly-shell]: https://github.com/composewell/streamly-shell
124[streamly-coreutils]: https://github.com/composewell/streamly-coreutils
126<!--
127Keep all the unstable links here so that they can be updated to stable
128links (for online docs) before we release.
129-->
131<!-- local files -->
132[LICENSE]: /LICENSE
133[CONTRIBUTING.md]: /docs/Developer/Contributing.md
134[docs]: docs/