# 1.1.0.2 -- 2024-12-07
- Compatibility with *base-orphans* 0.9.3
- Tested with GHC 8.0 - 9.12.0
# 1.1.0.1
- Compatibility with *base* 4.21 (GHC 9.12)
- Avoid dependency on *contravariant*
# 1.1.0.0
- Remove `Eq` and `Ord` for `Generically1` instances.
They are now available in *base* 4.18, and *base-orphans* 0.8.8
for backwards compatibility.
- (Revisions) Also compatible with *base* 4.20 (GHC 9.10) and 4.19 (GHC 9.8)
# 1.0.0.1
- Compatibility with *base* 4.18 (GHC 9.6)
# 1.0.0.0
- `Generically` and `Generically1` are in *base* 4.17 (GHC 9.4.1)!
+ *generic-data* reexports `Generically` and `Generically1` if using *base* >= 4.17.
The following instances remain as orphans: `Eq`, `Ord`, `Read`, `Show`,
`Enum`, `Ix`, `Bounded`, `Foldable`, `Traversable`, `Read1`, `Show1`.
+ base 4.17 includes instances for the non-stock-derivable classes:
`Semigroup` and `Monoid` for `Generically`; `Eq1`, `Ord1`, `Functor`,
`Applicative`, and `Alternative` for `Generically1`.
+ Note: the `Semigroup` and `Monoid` instances of *base*'s `Generically`
are those of *generic-data*'s `GenericProduct` (which is subtly different
from `Generically`'s previous instance in *generic-data*).
+ `Generically` and `Generically1` are no longer defined using record syntax,
so the `unGenerically`(`1`) field accessor no longer exists.
The field accessors for `FiniteEnumeration` and `GenericProduct` were also
removed for uniformity.
# 0.9.2.1
- No external changes.
- Use cabal-docspec instead of doctest
# 0.9.2.0
- Add instance of `Bounded` for `FiniteEnumeration` (the same as `Generically`)
# 0.9.1.0
- Fix `conIdToString` (it was completely broken)
- Add `conIdMin` and `conIdMax` representing the leftmost and rightmost
constructors of a data type.
- Add `NonEmptyType` and `IsEmptyType` to express the constraint that
a generic type must or must not be empty.
- Reexport `Generic` and `Generic1` for convenience.
# 0.9.0.0
- Improved definition of `gfoldMap`, `gtraverse`, and `sequenceA`.
The optimized Core of `Traversable` instances eliminates all `GHC.Generic` instance
boilerplate. In many cases, it is identical to the result of GHC's `DeriveFoldable`
and `DeriveTraversable` extensions (note: this was already not a problem for
`gfmap`).
It's worth noting that there are currently issues with inlining which prevent
optimizations that *generic-data* would ideally rely on.
+ The biggest issue is that GHC will not even inline the `to` and `from`
methods of the `Generic` instance it derives for large types (this shows
up at around 5 constructors and 10 fields, which is indeed not really
big). This will be fixed by a patch for GHC (WIP):
https://gitlab.haskell.org/ghc/ghc/-/merge_requests/2965
+ There appear to be some more inlining issues beyond that (issue #40).
# 0.8.3.0
- Add generic `Read`. Thanks to RyanGlScott.
# 0.8.2.0
- Add microsurgery `CopyRep`.
- Improve documentation of `Microsurgery` module.
- Fix a bug where `gshowsPrec` would incorrectly display prefix uses of
symbol data constructors or record selectors (e.g., `data R = (:!:) Int Int`
or `data S = MkS { (##) :: Int -> Int }`). Thanks to RyanGlScott.
- Fix a bug where `gshowsPrec` would incorrectly display infix uses of
alphanumeric data constructors (e.g., ```data T = Int `MkT` Int```).
Thanks to RyanGlScott.
# 0.8.1.0
- Add `Old` type family mapping newtypes to their underlying type.
# 0.8.0.0
- Add `GenericProduct`, for deriving `via GenericProduct B` when `B` is not the
type `A` you want the derived instance for.
Note this used to be `Generically`'s behavior for `Monoid` before 0.7.0.0.
- Add generic implementations for `Ix`. Thanks to Topsii.
- Add `conIdNamed`, to get a `ConId` by its type-level name
- Add instance `Show (ConId a)`
- Improve type errors for deriving `Semigroup` and `Monoid` via `Generically`.
Thanks to yairchu.
# 0.7.0.0
- Change `Monoid` instance for `Generically`, to be compatible with users'
non-generic instances of `Semigroup`. Thanks to yairchu.
- Add `gcoerce`, `gcoerceBinop`.
# 0.6.0.1
- Fix derivation of `Show1` for `(:.:)`
# 0.6.0.0
- Add `Surgery` newtype for DerivingVia
- `Derecordify`, `Typeage`, `RenameFields`, `RenameConstrs`, `OnFields`
are no longer type families, but defunctionalized symbols
to be applied using `GSurgery`.
# 0.5.0.0
- Specialize `onData` to `Data`
- Add some instances for `U1` and `V1` in `Microsurgery`
- Add `OnFields` and `DOnFields` surgeries ("higher-kindification")
# 0.4.0.0
- Created `Microsurgery` module. Initial set of surgeries:
+ `Derecordify`
+ `Typeage`
+ `RenameFields`, `RenameConstrs`
+ Some doc about using generic-lens for surgeries
# 0.3.0.0
- Add generic implementations of `enumFrom`, `enumFromThen`, `enumFromTo`,
`enumFromThenTo`. They are actually required to be explicit for correct
`Enum` instances. Thanks to Topsii.
- Parameterize `GEnum` by a type-level option, and add `FiniteEnum` option
to allow `Enum` to be derived for composite types. Thanks to Topsii.
# 0.2.0.0
- Remove `Generic.Data.Types.Map`
- Add `Generic.Data.Data.Types.toData` and `fromData`
- Remove `Defun` module (subsumed by `first-class-families` package)
# 0.1.1.0
- Add `gconIndex`
- Interface for constructor tags
- Type-level `Meta` accessors
- Add basic `Newtype` functions
# 0.1.0.0
Released generic-data