# optics-0.4 (2021-02-22) * See [migration-guide-0.4.md](https://github.com/well-typed/optics/blob/master/migration-guide-0.4.md) for more details * Add support for GHC-9.0 * Drop support for GHC-8.0 * The `FunctorWithIndex`, `FoldableWithIndex` and `TraversableWithIndex` type classes have been migrated to a new package, [`indexed-traversable`](https://hackage.haskell.org/package/indexed-traversable) ([#370](https://github.com/well-typed/optics/pull/370)) * Add `adjoin`, `iadjoin` and `both` to `Optics.[Ix]Traversal` ([#332](https://github.com/well-typed/optics/pull/332), [#372](https://github.com/well-typed/optics/pull/372)) * Add `ifst` and `isnd` to `Optics.IxLens` ([#389](https://github.com/well-typed/optics/pull/389)) * Generalize types of `generic` ([#376](https://github.com/well-typed/optics/pull/376)) * Make `chosen` an indexed lens to see which value is traversed ([#335](https://github.com/well-typed/optics/pull/335)) * Remove `GeneralLabelOptic` extensibility mechanism ([#361](https://github.com/well-typed/optics/pull/361)) * Add `gfield`, `gafield`, `gconstructor`, `gposition` and `gplate` for generics-based data access ([#358](https://github.com/well-typed/optics/pull/358), [#361](https://github.com/well-typed/optics/pull/361)) * Add support for generics-based field lenses and constructor prisms (`gfield` and `gconstructor`) to `LabelOptic` so they can be used via `OverloadedLabels` ([#361](https://github.com/well-typed/optics/pull/361)) * Remove unnecessary INLINE pragmas to reduce compile times ([#394](https://github.com/well-typed/optics/pull/394)) * Simplify the type of `(%)` using new `JoinKinds` and `AppendIndices` classes in place of the `Join` and `Append` type families ([#397](https://github.com/well-typed/optics/pull/397), [#399](https://github.com/well-typed/optics/pull/399)) * Print missing language extensions during TH generation of labels if there are any ([#352](https://github.com/well-typed/optics/pull/352)) * Add support for getters of rank1 polymorphic fields to optics generated with the `makeFieldLabels` family of functions ([#365](https://github.com/well-typed/optics/pull/365)) * Extend support of type-changing optics generated with the `makeFieldLabels` family to type parameters that are phantom and applied to non-injective type families ([#365](https://github.com/well-typed/optics/pull/365)) * Fix TH generation of optics for poly-kinded data families ([#378](https://github.com/well-typed/optics/pull/378)) * Fix `declareFieldLabels` when a field type refers to a type defined in the same quote ([#380](https://github.com/well-typed/optics/pull/380)) # optics-0.3 (2020-04-15) * GHC-8.10 support * Add `filteredBy` and `unsafeFilteredBy` * Add `FunctorWithIndex`, `FoldableWithIndex` and `TraversableWithIndex` instances for `Const` and `Constant` * Add `afoldVL` and `iafoldVL` constructors * Rename `toAtraversalVL` to `atraverseOf`, and `toIxAtraversalVL` to `iatraverseOf` * Generalise `element` and `elementOf` to construct `IxAffineTraversal`s instead of `IxTraversal`s * Change `mapping` to work on optic kinds other than `Iso`: it now supports `Lens` and `Prism` degenerating to `Getter` and `Review` respectively * Generalise `ignored` to be an `IxAffineTraversal` instead of an `IxTraversal` * Add `singular` and `isingular` * Add `(^?!)` operator * Expose `Curry` and `CurryCompose` * Show expected elimination forms on optic kind mismatch * Use stricter `uncurry` for better performance * Add hidden `LabelOptic` instance to postpone instance resolution * Add `GeneralLabelOptic` for pluggable generic optics as labels * Document monoidal structures of `Fold`s * Remove proxy argument from `implies` * Add `itoList` * Improvements to TH-generated optics: - `LabelOptic` instances make optic kind a type equality for better type inference - `LabelOptic` instances for field optics work properly in the presence of type families - Fixed calculation of phantom types in `LabelOptic` prism instances - Better support for generating optics in the presence of kind polymorphism # optics-0.2 (2019-10-18) * Add `non`, `non'` and `anon` to `Optics.Iso` * `ix` can produce optic kinds other than `AffineTraversal` * Generalise type of `generic1` * Move `use` from `Optics.View` to `Optics.State` and restrict its type * Add `preuse` to `Optics.State` * Rename `use`, `uses`, `listening` and `listenings` to reflect the fact that they have `ViewResult`-generalised types * Add `noPrefixFieldLabels` and `noPrefixNamer` to `Optics.TH` * Move some internal definitions out to new `indexed-profunctors` package * Introduce `OpticKind` and `IxList` type synonyms for better type inference * Make `itraverse` for `Seq` faster for `containers >= 0.6.0` * Assorted documentation improvements # optics-0.1 (2019-09-02) * Initial release