# ChangeLog / ReleaseNotes
## Version 0.4.2.0
* `Rec` instances for `Eq1`, `Ord1`, `Show1`, `Eq`, `Ord`, and `Show`.
Instances for `Eq1`, `Ord1` and `Show1` are available only with transformers
==0.5.\* or with base >=4.9 (i.e. GHC >=8). (**new**)
* Introducing `WrappedLensLike` data type along with a simplified type
`WrappedLensLike'`. For each of these we have corresponding `lns` and `lns'`
operation for unpacking `WrappedLensLike`. (**new**)
* `lns :: WrappedLensLike f s t a b -> (a -> f b) -> s -> f t`
* `lns' :: WrappedLensLike' f s a -> (a -> f a) -> s -> f s`
* Allowing fields\/accessors to occur in multiple data constructors by not
creating duplicit instances, thanks to
[Andy Morris](https://github.com/andy-morris). See
[pull request #2](https://github.com/trskop/overloaded-records/pull/2).
(**change**)
* Data type `Label (l :: Symbol)` that can be used to pass label value around.
(**new**)
* Instances for `fst`, `snd`, `thd` and `curry` fields for 11-tuples, 12-tuples
up to 15-tuples. (**new**)
* Instances for `head` and `tail` fields for `NonEmpty` list. (**new**)
* Instances for `HasField` and `ModifyField` `Rec context r` where `r` is
monomorphic. This is just a poor man's instance, since its usability is very
limited, but helpful in those special cases. Hopefully we will be able to
find a way how to define overloaded records machinery for `Rec context r` in
general. (**new**)
## Version 0.4.1.0
* Introducing `Getter` newtype along with `get` function. (**new**)
* `get :: Getter s a -> s -> a`
* Introducing `Rec` data type that allows passing polymorphic record along with
its instances as a normal value. (**new**)
* Corrections and updates in documentation (**change**)
* Uploaded to [Hackage][]:
<http://hackage.haskell.org/package/overloaded-records-0.4.1.0>
## Version 0.4.0.0
* Renamed `SetField` type class to `ModifyField`, it now contains following
methods (**breaking change**):
* `modifyField :: Proxy# l -> (a -> b) -> s -> t`
* `setField :: Proxy# l -> s -> b -> t`
* `fieldLens :: Functor f => Proxy# l -> (a -> f b) -> s -> f t`
* Instances for tuples (i.e. `(a, b)`, `(a, b, c)`, ...) and lists (i.e.
`[a]`). (**new**)
* Definitions from `Data.OverloadedRecords.TH` were moved to
`Data.OverloadedRecords.TH.Internal`, so that API can be split in to stable
and unstable (internal) API. (**change**)
* Aliases `HasField'` and `ModifyField'` that enforce `s = t` and `a = b`. This
is similar to definitions like `Lens'`. Simplified versions of methods and
functions are included using the same naming convention. (**new**)
* `Setter` and `Setter'` changed to type aliases for `Modifier` type.
(**breaking change**)
* Introducing `Setting` type alias for `Modifier` along with `setting`, which
is an alternative to `set` operation. (**new**)
* `setting :: Setting a s t b -> Proxy a -> b -> s -> t`
* Changed order of arguments of functions `set` and `set'` (**breaking
change**):
* `set :: Setter s t b -> b -> s -> t`
* `set' :: Setter' s a -> a -> s -> s`
* Introduced type family `R` that can be used to define more compact type
signatures when mentioning multiple record fields in it. (**new**)
* Uploaded to [Hackage][]:
<http://hackage.haskell.org/package/overloaded-records-0.4.0.0>
## Version 0.3.0.0
* Fixed defaultMakeFieldName, which actually behaved correctly only in very few
cases. (**bug fix**)
* Added missing `HAVE_OVERLOADED_LABELS` macro, that actually allows us to use
GHC's `IsLabel` on GHC >8. (**bug fix**)
* Exposing previously hidden `FromArrow` and `IsFieldAccessor`. (**change**)
* Few simple unit tests. (**new**)
* Uploaded to [Hackage][]:
<http://hackage.haskell.org/package/overloaded-records-0.3.0.0>
## Version 0.2.0.0
* Function `overloadedRecords` renamed to `overloadedRecord`. There is also new
`overloadedRecords` function, that behaves as `overloadedRecord`, but for
multiple types at once. (**breaking change**)
* It is now possible to customize overloadedRecord\* family of functions with
custom getter and setter implementation. (**new**)
* Types and functions follow, hopefully, better naming conventions. (**change**)
* More low-level template haskell functions for those cases when it is
necessary to build your own higher-level ones, or when you need much more
control over the result. (**new**)
* Uploaded to [Hackage][]:
<http://hackage.haskell.org/package/overloaded-records-0.2.0.0>
## Version 0.1.0.0
* First public release.
* Uploaded to [Hackage][]:
<http://hackage.haskell.org/package/overloaded-records-0.1.0.0>
[Hackage]:
http://hackage.haskell.org/
"HackageDB (or just Hackage) is a collection of releases of Haskell packages."