Changelog for streamly-core-0.3.0
Changelog
0.3.0
See 0.2.2-0.3.0 API Changelog for a full list of deprecations, additions, and changes to the function signatures.
Enhancements
- Added APIs for prompt cleanup of resources, allowing guaranteed cleanup as an alternative to GC-based cleanup.
- Added operations for fair nesting of inner and outer streams for exploring them equally, generally useful but especially useful for logic programming use cases.
- Introduced
Streamly.Data.Scanlwith a newScanltype. Scans can split a stream into multiple streams, process them independently, and merge the results. TheFoldtype is now split intoFoldandScanl. - Added
RingArraymodule for high-performance, unboxed circular buffers. - Added
Streamly.FileSystem.Pathmodule with aPathtype for flexibly typed file system paths. - Added
Streamly.FileSystem.DirIOandStreamly.FileSystem.FileIOto replace the deprecatedStreamly.FileSystem.DirandStreamly.FileSystem.File. The new modules use Streamly’s nativePathtype instead ofFilePath.DirIOAPIs take aReadOptionsargument, and its directory read APIs do not follow symlinks by default. - Removed
Storableconstraint from:Streamly.Data.Stream.isInfixOfStreamly.Data.Array.writeLastN
Deprecations
Following APIs/modules are deprecated and renamed or replaced with new APIs.
Streamly.FileSystem.Dir,Streamly.FileSystem.Filehave been replaced by new modules.- Renamed
writeN-like APIs tocreateOf-like in Array modules. - Renamed
new-like APIs toemptyOf-like in Array modules. - In the Fold module renamed
indexGeneric,lengthGeneric, andfoldlM1'togenericIndex,genericLength, andfoldl1M'respectively.
Internal API Changes
- In
Streamly.Internal.Data.Parser, constructorsPartial,Continue, andDoneare deprecated and replaced withSPartial,SContinue, andSDone. Migration steps:- In parser step functions:
Partial n->SPartial (1-n)Continue n->SContinue (1-n)Done n->SDone (1-n)Error->SError
- Extract function now returns
Parser.Final(instead ofParser.Step):Continue n->FContinue (-n)Done n->FDone (-n)Partial n->FContinue (-n)Error->FError
- If
nis used for decision-making, the logic must be updated accordingly. See docs for details.
- In parser step functions:
- Internal (mut)array functions now use explicit IO callbacks instead of lifted callbacks.
- Removed
Storableconstraint from several ring buffer functions. - Added
Streamly.Internal.Data.IORefmodule exposingIORefand related functions.
0.2.2 (Jan 2024)
- Add fixities
infixr 5forconsandconsMfunctions. - Fix a bug in Array
Eqinstance when the type is a sum type with differently sized constructors. - lpackArraysChunksOf, compact, writeChunksWith, putChunksWith now take the buffer size in number of array elements instead of bytes.
0.2.1 (Dec 2023)
- Make the serialization of the unit constructor deterministic.
- Expose
pinnedSerialize&deserializeviaStreamly.Data.Array.
0.2.0 (Nov 2023)
See 0.1.0-0.2.0 API Changelog for a full list of API changes in this release. Only a few significant changes are mentioned here.
Breaking Changes
ParserKinStreamly.Data.ParserKis not implicitly specialized to arrays anymore. To adapt to the new code, changeParserK a m btoParserK (Array a) m bwhere theArraytype comes fromStreamly.Data.Array. This change also affected the signatures ofparseChunksandparseBreakChunks.- Changed the signature of 'Streamly.Data.Stream.handle' to make the exception handler monadic.
- Behavior change: Exceptions are now rethrown promptly in
bracketIO.
Enhancements
- Serialization: Added a
Streamly.Data.MutByteArraymodule with aSerializetype class for fast binary serialization. The Data.Array module supplies theserializeanddeserializeoperations for arrays. - Unpinned Arrays: Unboxed arrays are now created unpinned by default,
they were created pinned earlier. During IO operations, unpinned arrays
are automatically copied to pinned memory. When arrays are directly
passed to IO operations programmers can choose to create them pinned to
avoid a copy. To create pinned arrays, use the internal APIs with the
pinned*prefix. - StreamK now supports native exception handling routines (handle, bracketIO).
Earlier we had to convert it to the
Streamtype for exception handling.
Deprecations
See 0.1.0-0.2.0 API Changelog for a full list of deprecations.
Internal API Changes
- Fold constructor has changed, added a
finalfield to support finalization and cleanup of a chain of folds. Theextractfield is now used only for mapping the fold internal state to fold result for scanning purposes. If your fold does not require cleanup you can just use your existingextractfunction asfinalas well to adapt to this change. - Many low level internal modules have been removed, they are entirely exported from higher level internal modules. If you were importing any of the missing low level modules then import the higher level modules instead.
- Internal module changes:
- Streamly.Internal.Serialize.FromBytes -> Streamly.Internal.Data.Binary.Parser
- Streamly.Internal.Serialize.ToBytes -> Streamly.Internal.Data.Binary.Stream
- Streamly.Internal.Data.Unbox is now exported via Streamly.Internal.Data.Serialize
- Streamly.Internal.Data.IORef.Unboxed is now exported via Streamly.Internal.Data.Serialize
0.1.0 (March 2023)
Also see streamly-core-0.1.0 API Changelog or https://hackage.haskell.org/package/streamly-core-0.1.0/docs/docs/ApiChangelogs/0.1.0.txt
streamly package is split into two packages, (1) streamly-core that
has only GHC boot library depdendecies, and (2) streamly that contains
higher level operations (including concurrent ones) with additional
dependencies.
- Moved the following modules from
streamlypackage to thestreamly-corepackage:- Streamly.Console.Stdio
- Streamly.Data.Fold
- Streamly.Data.Unfold
- Streamly.FileSystem.Handle
- Streamly.Unicode.Stream
- Added the following new modules:
- Streamly.Data.Array
- Streamly.Data.Array.Generic
- Streamly.Data.MutArray
- Streamly.Data.MutArray.Generic
- Streamly.Data.Parser
- Streamly.Data.ParserK
- Streamly.Data.Stream
- Streamly.Data.StreamK
- Streamly.FileSystem.Dir
- Streamly.FileSystem.File
- Streamly.Unicode.Parser
- Streamly.Unicode.String