# Change Log
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/).
## [Unreleased]
### Added
- `Fn3-8` static factory overloads to aid in coercing lambdas
- Adding composition guarantees to `LensLike`
- `CmpEqBy`, `CmpEq`, `GTBy`, `GT`, `LTBy`, `LT`, `GTEBy`, `GTE`, `LTEBy`, and `LTE` inequality checks
- `MinBy`, `MaxBy`, `Min`, and `Max` semigroups
- `Product2-8` interfaces, representing general product types
- `Union`, a monoid that behaves like a lazy set union on `Iterable`s
- `Difference`, a semigroup that behaves like a partially lazy set difference on `Iterable`s
- `LambdaMap`, extension point for `j.u.Map`, similar to `LambdaIterable`
- `Sequence#sequence` overloads for `j.u.Map` that traverse via intermediate `LambdaMap` instances
- `Intersection`, a semigroup that behaves like a lazy set intersection on `Iterable`s
- `Fn0`, a function from `Unit` to some value
- `Fn1#thunk`, producing an `Fn0`
- `Absent`, a monoid over `Maybe` that is absence biased
- `RateLimit`, a function that iterates elements from an `Iterable` according to some rate limit
- `Try#withResources`, `Try`'s expression analog to Java 7's try-with-resources statement
- `Occurrences`, for counting the occurrences of the members of an `Iterable`
- `Effect`, an `Fn0` returning `UNIT`
- `Noop`, a no-op `Effect`
- `Fn1#widen`, add an ignored argument to the beginning of any function to raise its arity by one
### Changed
- `Tuple2-8` now implement `Product2-8`
- `Into` now accepts `Map.Entry`
- `Into3-8` now accept a product of the same cardinality, instead of requiring a tuple
- `CoProduct2-8#project` now return generalized products
- `Choice2-8#project` return tuples
- `liftA2` receives more parameters to aid inference
- `Compose#getCompose` now supports inference
### Removed
- `MapLens#mappingValues`, deprecated in a prior release
- `CollectionLens#asSet`, deprecated in a prior release
- `CollectionLens#asStream`, deprecated in a prior release
## [3.0.3] - 2018-05-27
### Added
- `Lens#toIso`, for converting a lens to an iso
- `HMap#hMap` overloads up to 8 bindings deep
- `Schema`, schemas for extracting multiple values from `HMap`s by aggregating `TypeSafeKey`s
### Fixed
- Deforested iterables execute in intended nesting order, where essential
## [3.0.2] - 2018-05-21
### Added
- `IterableLens#mapping`, an `Iso` that maps values
### Changed
- `TypeSafeKey.Simple` now has a default `#apply` implementation
### Fixed
- mapped `TypeSafeKey` instances can be used for initial put in an `HMap`, and the base key can be used to retrieve them
- Merged pull request fixing issue storing values at mapped `TypeSafeKey` in `singletonHMap`
## [3.0.1] - 2018-05-13
### Changed
- `ToMap` accepts an `Iterable` covariant in `Map.Entry`
- `RecursiveResult#invert` is also a `RecursiveResult`
- `First`/`And`/`Or` monoids all utilize short-circuiting
- `Monoid#foldLeft/foldRight` delegate to `Monoid#reduceLeft/reduceRight`, respectively
### Added
- `Upcast` for safely casting up a type hierarchy
- `SetLens`, lenses operating on `Set`s
- `ToArray`, for converting `Iterable` to `A[]`
## [3.0.0] - 2018-05-04
### Changed
- ***Breaking Change***: `Sequence` now has two more type parameters to aid in inference
- ***Breaking Change***: `Traversable#traverse` now has three more type parameters to aid in inference
- ***Breaking Change***: `Monad#zip` now forces `m a -> b` before `m a` in default `Applicative#zip` implementation; this is only breaking for types that are sensitive to computation order (the resulting values are the same)
- ***Breaking Change***: `TypeSafeKey` is now dually parametric (single parameter analog is preserved in `TypeSafeKey.Simple`)
- `Bifunctor` is now a `BoundedBifunctor` where both parameter upper bounds are `Object`
- `Peek2` now accepts the more general `BoundedBifunctor`
- `Identity`, `Compose`, and `Const` functors all have better `toString` implementations
- `Into3-8` now supports functions with parameter variance
- `HListLens#tail` is now covariant in `Tail` parameter
- More functions now automatically deforest nested calls (`concat` `cons`, `cycle`, `distinct`, `drop`, `dropwhile`, `filter`, `map`, `reverse`, `snoc`, `take`, `takewhile`, `tail`)
- `Flatten` calls `Iterator#hasNext` less aggressively, allowing for better laziness
- `Lens` subtypes `LensLike`
- `View`/`Set`/`Over` now only require `LensLike`
- `HMap#keys` now returns a `Set`
- `HMap#values` now returns a `Collection`
- `Unfoldr` is now lazier, deferring all computations until `hasNext/next` calls
- `Present` is now a singleton
### Added
- `BoundedBifunctor`, a `Bifunctor` super type that offers upper bounds for both parameters
- `Try`, a `Monad` representing an expression-like analog of `try/catch/finally`
- `CheckedRunnable`, the `Runnable` counterpart to `CheckedSupplier` that can throw checked exceptions
- `Unit`, the lambda analog to `Void`, except actually inhabited by a singleton instance
- `Kleisli`, the abstract representation of a `Kleisli` arrow (`Monad#flatMap`) as an `Fn1`
- `These`, a `CoProduct3` of `A`, `B`, or `Tuple2`
- `Span`, for splitting an `Iterable` into contiguous elements matching a predicate
- `MagnetizeBy` and `Magnetize`, for grouping elements by pairwise predicate tests
- `Both`, for dually applying two functions and producing a `Tuple2` of their results
- `Lens#both`, for dually focusing with two lenses at once
- `IfThenElse`, an expression form for `if` statements
- `CheckedRunnable` and `CheckedSupplier` conversion and convenience methods
- `LensLike`, common capabilities that make a type usable as if it were a `Lens`
- `Iso`, isomorphisms between two types (invertible functions that are also lenses)
- `Exchange`, a `Profunctor` that can extract the morphisms from an `Iso`
- `HMapLens`, lenses focusing on `HMap`
- `MapLens#mappingValues(Iso)`, a lawful lens that maps the values of a `j.u.Map`
- `Under`, the inverse of `Over` for `Iso`
- `TypeSafeKey` is an `Iso` and supports mapping
- `TypeSafeKey.Simple`, the single parameter version of `TypeSafeKey`
- `Either#trying` overloads that accept `CheckedRunnable`
### Deprecated
- `MapLens#mappingValues(Function)` is now deprecated in favor of the overload that takes an Iso
## [2.1.1] - 2018-01-16
### Changed
- ***Breaking Change***: Moved `Trampoline` and `RecursiveResult` to better package
## [2.1.0] - 2018-01-14
### Changed
- ***Breaking Change***: `CollectionLens#asSet` is now lawful and preserves new incoming values in the update set
- ***Breaking Change***: `IterableLens#head` is now a `Lens.Simple, Maybe>` and is lawful
- ***Breaking Change***: `ListLens#elementAt` is now a `Lens.Simple, Maybe>` supporting defensive copies
- ***Breaking Change***: `MapLens#valueAt` is now a `Lens.Simple