Composewell builds Streamly and other open-source Haskell libraries. We also offer consulting and training in Haskell and high-performance functional programming. Learn more at composewell.com.
streamly-0.11.0 and streamly-core-0.3.0 are now available on Hackage. User guides, combined reference and Hoogle search across all Streamly ecosystem packages can be found on the Streamly website.
Important features in this release are:
Scans with Scanl
: The new
Streamly.Data.Scanl
module allows you to compose multiple stateful transformations (i.e.
scans) on a stream. You can split a stream into multiple constituent
streams, process each independently, and then merge the results. With
Streamly.Data.Scanl.Prelude,
you can compose concurrent scans i.e. each branch of the split scan can
run in a different thread.
New concurrent fold combinators: Extended Streamly.Data.Fold.Prelude with some powerful concurrent fold combinators.
Deterministic resource cleanup: Introduced APIs that guarantee
timely resource release, eliminating reliance on GC-based cleanup. The
library now offers low-level IO primitives and high-level stream
combinators for resource management — everything you can do with
resourcet
, and more, is built in.
Fair nesting of streams: Added operations that interleave inner and outer streams fairly, ensuring balanced exploration. Particularly powerful for logic programming.
Circular buffers: Added Streamly.Data.RingArray, a high-performance, unboxed circular buffer.
File system paths: Streamly.FileSystem.Path module leverages streamly arrays, and streams for performance and flexibility, provides better safety, and is intended for gradual type safe extensions in future. The type can be directly coerced into OsPath.
streamly-text package provides coercion from the Text
type to
streamly Array
type and vice-versa.
streamly-fsevents package provides file system event watch streams (fsnotify) — portable as well as full support for low level OS specific file system event APIs. This was earlier part of the streamly package, now has been split into a separate package.
We’ve made every effort to prevent breaking changes, and the API has remained stable since version 0.9.0.
See the following docs for more details: