# Changelog
All notable changes to `frunk` and its subcrates will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased]:
- avoid clippy::unneeded_field_pattern (https://github.com/lloydmeta/frunk/pull/216)
## [0.4.2]:
- Removed `proc-macro-hack` machinery (`proc-macros-impl`) (https://github.com/lloydmeta/frunk/pull/214)
- Add function for explicitly extending an hlist (https://github.com/lloydmeta/frunk/pull/209)
## [0.4.1]:
- Documentation fix for `Hcons::sculpt` (https://github.com/lloydmeta/frunk/pull/194)
- Optimise Semigroup for HashSet and HashMap (https://github.com/lloydmeta/frunk/pull/196)
- Update to 2021 edition (https://github.com/lloydmeta/frunk/pull/200)
- Add `extract` to get value out of 1-type coproduct (https://github.com/lloydmeta/frunk/pull/201)
- Fix needless borrow (https://github.com/lloydmeta/frunk/pull/202)
- Add `Coproduct::map` (https://github.com/lloydmeta/frunk/pull/204)
## [0.4.0]:
- [Breaking change] Rename `Hlist!` type macro to `HList!` (https://github.com/lloydmeta/frunk/issues/132)
- [Breaking change] Remove deprecated `HList.length()` (https://github.com/lloydmeta/frunk/issues/125)
- [Breaking change] `HFoldRightable` rework: now `HFoldRightable::foldr` does not differ from `HFoldLeftable::foldl` in **calling**, like `std::iter::DoubleEndedIterator::rfold` does not differ from `std::iter::Iterator::fold`. Note: though `foldr` **behavior** wasn't changed, all old `foldr` calls would either stop compiling or produce wrong results (https://github.com/lloydmeta/frunk/issues/171)
- [Breaking change] Bump quote, syn and proc-macro2 to 1 (https://github.com/lloydmeta/frunk/pull/183)
- Fix unicode identifiers support https://github.com/lloydmeta/frunk/pull/186
## [0.3.2] - 2021-04-16
- Allow folding hlist with a single Poly (https://github.com/lloydmeta/frunk/pull/170)
## [0.3.1] - 2019-12-21
- Refactoring derives (https://github.com/lloydmeta/frunk/pull/157)
- Add support for deriving LabelledGeneric on enums (https://github.com/lloydmeta/frunk/pull/158)
- Added HZippable (https://github.com/lloydmeta/frunk/pull/160)
- Add a type macro for paths (https://github.com/lloydmeta/frunk/pull/161)
## [0.3.0] - 2019-03-23
### Added
- More transmogrifications supported out of the box (https://github.com/lloydmeta/frunk/pull/152)
- `Box`, `Option`, `Vec` and more.
- More idiomatic Debug impl for Field Debug impls should use DebugStruct #153
- [no-std] support https://github.com/lloydmeta/frunk/pull/148
- Note: this is a breaking change, see [the PR](https://github.com/lloydmeta/frunk/pull/148) for details
## [0.2.4] - 2019-02-10
### Added
- Added `ToMut` trait, which allows borrowing mutably from a Coproduct or HList.
- Added support for `#[derive(LabelledGeneric)]` on tuple structs
- Added `Path` model and `PathTraverser` trait, which allows for composable lens-like-usage
### Changed
- Make macros call themselves recursively with `$crate::`
## [0.2.3]
- Skipped due to [release mis-steps](https://github.com/lloydmeta/frunk/pull/150#issue-251682325)
## [0.2.2] - 2018-10-21
- Added support for [transmogrifying (recursively sculpting)](https://docs.rs/frunk/0.2.2/frunk/labelled/trait.Transmogrifier.html) one data type into another
## [0.2.1] - 2018-09-29
- Upgraded to `syn` 0.15 and `quote` to 0.6
## [0.2.0] - 2018-04-20
### Added
- :confetti_ball: Forces joined with new collaborators [@Centril] and [@ExpHP]!
- `frunk` now adheres to semantic versioning!
- Inherent method wrappers for many trait methods on HList and Coproduct.
- Re-exports for a variety of essential items at the root level of `frunk`.
- Module `frunk::prelude` for extension traits and similar.
- Methods `Coproduct::embed` and `Coproduct::subset`.
- `...tail` argument in each of the HList and Coproduct macros.
- The `Func` trait, an alternative to `Fn` that can be implemented on stable.
- The `Poly` wrapper type and `poly_fn!` macro, which use `Func` to provide
order-free mapping.
- `map_repr` and `map_intern` for `Generic`, convenience methods for
temporarily converting an object into its generic representation or
a similar type.
### Changed
- A general paradigm shift from per-module glob imports to the more
Rusty model of *`use` what you need.* Many of the other changes listed
help accomodate this.
- Renamed the `with-serde` feature to `serde`, in line with convention.
- Various unnecessary type parameters have been removed or replaced with
associated types. This affects `CoprodInjector`, `HMappable`,
and `HFold{Left,Right}able`.
- Moved `hlist::IntoReverse` to accompany `Func` in the new `traits` module.
- Moved `hlist::{Here, There, Suffixed}` to a new `indices` module.
- The zero index `Here` is no longer an empty type. We have... *plans.*
:japanese_ogre:
- Character types were moved from `labelled` to `labelled::chars`.
- Mapping/folding by reference is now written as `list.to_ref().map(...)`,
where formerly `as_ref()` was used. The new `to_ref()` trait composes
orthogonally to many other features of HList and Coproduct, and relieves
frunk from providing impls for `&HCons` that can be susceptible to the
dreaded "Overflow evaluating `_: std::marker::Sized`" error.
- *Lots* of documentation improvements!
### Removed
- The identity `AsRef` impls on HList and Coproduct, which were only
present to support the old `as_ref().map(...)` pattern.
## 0.1.36 - 2018-02-25
### Features present
Prior to v0.2.0, `frunk` did not keep a detailed changelog, and did not adhere to semver.
The following list is a modest attempt to summarize the features of v0.1.36.
- The types `HList`s and `Coproduct`s, which serve as variadic product and sum types.
- Many methods are provided through individual traits.
- The SYB traits `Generic` and `LabelledGeneric` for conversions between similarly-shaped structs.
- The `frunk_derives` crate provides `#[derive(Generic, LabelledGeneric)]`.
- The functional traits `Semigroup` and `Monoid`, with a number of implementations.
- A number of implementations are provided.
- The `frunk_laws` crate provides `quickcheck`-compatible predicates for testing custom impls.
- The convenience macros `hlist!`, `Hlist!`, `hlist_pat!`, `field!`.
- The `Validated` type, a non-short-circuiting alternative to `Result`.
## Older versions
A raw overview of older versions is available in the form of commit logs:
* [0.1.36](https://github.com/lloydmeta/frunk/compare/v0.1.35...v0.1.36) - 2018-02-25
* [0.1.35](https://github.com/lloydmeta/frunk/compare/v0.1.34...v0.1.35) - 2018-02-11
* [0.1.34](https://github.com/lloydmeta/frunk/compare/v0.1.33...v0.1.34) - 2017-10-25
* [0.1.33](https://github.com/lloydmeta/frunk/compare/v0.1.32...v0.1.33) - 2017-09-27
* [0.1.32](https://github.com/lloydmeta/frunk/compare/v0.1.31...v0.1.32) - 2017-09-09
* [0.1.31](https://github.com/lloydmeta/frunk/compare/v0.1.30...v0.1.31) - 2017-09-04
* [0.1.30](https://github.com/lloydmeta/frunk/compare/v0.1.29...v0.1.30) - 2017-06-21
* [0.1.29](https://github.com/lloydmeta/frunk/compare/v0.1.28...v0.1.29) - 2017-06-03
* [0.1.28](https://github.com/lloydmeta/frunk/compare/v0.1.27...v0.1.28) - 2017-04-25
* [0.1.27](https://github.com/lloydmeta/frunk/compare/v0.1.25...v0.1.27) - 2017-04-23
* [0.1.25](https://github.com/lloydmeta/frunk/compare/v0.1.22...v0.1.25) - 2017-04-20
* [0.1.22](https://github.com/lloydmeta/frunk/compare/v0.1.20...v0.1.22) - 2017-03-22
* [0.1.20](https://github.com/lloydmeta/frunk/compare/v0.1.19...v0.1.20) - 2017-03-17
* [0.1.19](https://github.com/lloydmeta/frunk/compare/v0.1.18...v0.1.19) - 2017-03-16
* [0.1.18](https://github.com/lloydmeta/frunk/compare/v0.1.17...v0.1.18) - 2017-03-06
* [0.1.17](https://github.com/lloydmeta/frunk/compare/v0.1.16...v0.1.17) - 2017-03-04
* [0.1.16](https://github.com/lloydmeta/frunk/compare/v0.1.11...v0.1.16) - 2017-03-04
* [0.1.11](https://github.com/lloydmeta/frunk/compare/v0.1.10...v0.1.11) - 2017-03-01
* [0.1.10](https://github.com/lloydmeta/frunk/compare/v0.1.9...v0.1.10) - 2017-03-01
[@lloydmeta]: https://github.com/lloydmeta
[@ExpHP]: https://github.com/ExpHP
[@Centril]: https://github.com/Centril
[Unreleased]: https://github.com/lloydmeta/frunk/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/lloydmeta/frunk/compare/v0.1.36...v0.2.0