Skip to main content

CHANGELOG.md

# Changelog

## v1.0.0 (2026-06-16)

- Fixed `Access.fetch/2` and `Access.pop/2` to no longer treat stored falsy
  values (e.g. `false`, `nil`) as missing; entries are now compared against
  the array's default value instead of a truthy check.
- Improved `Collectable.into/1` to append via `:array.set/3` starting at the
  original array's `size/1`, instead of rebuilding through
  `to_list/from_list`. The original array's `default` and `fixed` attributes
  are now preserved.
- Improved `Enumerable.slice/1` to return a `slicing_fun`, so partial slices
  touch only the requested window rather than materializing the full list.
  The implementation is selected at compile time: the 2-arity form on
  Elixir 1.14–1.17, and the 3-arity form (with `step` support) on
  Elixir 1.18+, which silences the deprecation warning emitted on those
  versions.
- Replaced the soft-deprecated `unless` macro in `from_erlang_array/1` for
  forward compatibility with Elixir 1.19+.
- Fixed typespecs so `mix dialyzer` passes on Elixir 1.18 / OTP 28+. The
  hand-written `array()` opaque tuple now delegates to `:array.array/0`, and
  `orddict()` is exposed as a regular `@type` (it is a user-constructable
  list of `{index, value}` tuples, not an opaque value).
- Added a GitHub Actions workflow exercising `mix compile --warnings-as-errors`,
  `mix test`, and `mix dialyzer` across every supported Elixir 1.14–1.20 /
  OTP 24–29 combination.
- Documented the `Access`, `Enumerable`, and `Collectable` protocols in the
  README, added examples for the remaining public API, and fixed a stale
  output value and a typo (`Convertions` → `Conversions`).
- Added regression tests covering the `Access` falsy-value fix, `Collectable`
  attribute preservation, the `Enum.slice/3` `start/length` form, and stepped
  ranges (`Enum.slice(arr, 0..5//2)`) to exercise the 3-arity `slicing_fun`'s
  step path on Elixir 1.18+.

## v0.1.3 (2023-04-21)

- Improved the README.md by providing examples

## v0.1.2 (2023-04-21)

- Added tests to get full coverage
- Replaced the implementation of `ExArray.equal?/2`
- Added a clause for non `ExArray` argument for `ExArray.is_array/1`
- Fixed the implementation of `ExArray.from_erlang_array/1` to return an `ExArray`

## v0.1.1 (2023-04-21)

- Changed the internal implementation of `ExArray`
- Improved the typespecs and documentations

## v0.1.0 (2023-04-20)

- Version initial