graft-0.1.0.0: CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and versions follow the [Haskell PVP](https://pvp.haskell.org/), as described in [CONTRIBUTING.md](CONTRIBUTING.md).
## [0.1.0.0] - 2026-10-27
Initial release.
- Immutable, lossless green trees (`Graft.Green`) with caller-defined syntax
kinds, cached UTF-8 byte lengths and child offsets, and structural sharing.
Persistent replacement, splicing, insertion and removal of a node's
children, with structured errors. Folds and traversals over trees, `Functor`
over kinds, and `NFData`, `Hashable` and `Exception` instances.
- Read-only cursors (`Graft.Cursor`): a zipper with parent, child, sibling,
ancestor and token navigation, absolute byte ranges, and lookup by offset or
range. Navigation never rebuilds the tree.
- Edits as values (`Graft.Edit`): plans of replacements, splices, insertions
and removals that all refer to the base tree and are applied together, with
conflicts rejected; the same plan as text edits to the source; and a
top-down rewrite that shares every untouched subtree.
- Builders for parsers (`Graft.Builder`, `Graft.Build`), as a pure value or in
a monad, with checkpoints for wrapping already-emitted elements.
- Typed AST views over cursors (`Graft.Ast`), written by hand per grammar.
- A line index (`Graft.LineIndex`) for line and column positions in UTF-8
bytes or UTF-16 code units, with a separate position type for each unit.
- Byte ranges (`Graft.Range`) and the `Graft` module, which exports the types
and classes; functions are meant for qualified import, as in `Cursor.parent`
and `Edit.apply`.
[0.1.0.0]: https://github.com/andreabedini/graft/releases/tag/v0.1.0.0
<!-- generated by git-cliff -->