<commit_before># Partial Lenses Changelog

## 13.0.0

As discussed in issue
[#131](https://github.com/calmm-js/partial.lenses/issues/131), optics working on
arrays, objects, and strings, no longer remove empty values by default.  It
appears that by default removal, on average, makes optics compositions more
complex.  In most cases this change means that uses of `L.define` or
`L.required` with an empty value `{}`, `[]`, or `""`, can simply be removed.
`L.define` and `L.required` now give a warning in case they are used with an
empty value and a matching empty value passes through them redundantly.  In
cases where removal of empty values is desired, one can e.g. compose with
`L.defaults`.

Removed previously obsoleted `L.findHint`.

The current plan is to change Partial Lenses to support so called naked or
prototypeless objects with `null` prototype (i.e. `Object.create(null)`) in the
next major version.  This is a breaking change although it is likely that it
will not affect most users.  Usefully warning for this change of behaviour by
adding diagnostics to optics seems somewhat difficult.  *This note was moved
from 12.0.0.*

## 12.0.0

As documented in 11.21.0:
* Support for lazy algebras with the `delay` function was removed.
* `L.cache` was removed.
* `L.augment` was removed.
* `L.find` and `L.findWith` were changed to support a hint.
* `L.findHint` was marked for removal.

## 11.22.1

Tightened the specification of a number of isomorphisms, including `L.uri`,
`L.uriComponent`, `L.indexed`, `L.keyed`, and `L.reverse`, so that their
inverses treat unexpected inputs as undefined.  This is considered a bug fix as
the behaviour wasn't previously strictly specified.<commit_msg>Note on use of `L.valueOr` to provide defaults<commit_after># Partial Lenses Changelog

## 13.0.0

As discussed in issue
[#131](https://github.com/calmm-js/partial.lenses/issues/131), optics working on
arrays, objects, and strings, no longer remove empty values by default.  It
appears that by default removal, on average, makes optics compositions more
complex.  In most cases this change means that uses of `L.define` or
`L.required` with an empty value `{}`, `[]`, or `""`, can simply be removed.
`L.define` and `L.required` now give a warning in case they are used with an
empty value and a matching empty value passes through them redundantly.  In
cases where removal of empty values is desired, one can e.g. compose with
`L.defaults`.  In cases where some default value is needed, one can e.g. compose
with `L.valueOr`.

Removed previously obsoleted `L.findHint`.

The current plan is to change Partial Lenses to support so called naked or
prototypeless objects with `null` prototype (i.e. `Object.create(null)`) in the
next major version.  This is a breaking change although it is likely that it
will not affect most users.  Usefully warning for this change of behaviour by
adding diagnostics to optics seems somewhat difficult.  *This note was moved
from 12.0.0.*

## 12.0.0

As documented in 11.21.0:
* Support for lazy algebras with the `delay` function was removed.
* `L.cache` was removed.
* `L.augment` was removed.
* `L.find` and `L.findWith` were changed to support a hint.
* `L.findHint` was marked for removal.

## 11.22.1

Tightened the specification of a number of isomorphisms, including `L.uri`,
`L.uriComponent`, `L.indexed`, `L.keyed`, and `L.reverse`, so that their
inverses treat unexpected inputs as undefined.  This is considered a bug fix as
the behaviour wasn't previously strictly specified.
{'fraction_non_alphanumeric': 0.0891032917139614, 'fraction_numerical': 0.015891032917139614, 'mean_word_length': 4.276946107784431, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '445684', 'n_tokens_mistral': 1062, 'n_tokens_neox': 1000, 'n_words': 496}