## New in 1.0

- Breaking change: all instances now need to specify the variance of all type
parameters.
- Breaking change: instances of the form
`NFunctor (f a)`

are no longer
allowed. Instead, write `NFunctor f`

and use `NonvariantT`

to indicate that
`a`

cannot be mapped.
`NFunctor`

is now even more general: in addition to generalizing `Functor`

,
`Bifunctor`

, `Trifunctor`

, etc., it now also generalizes `Contravariant`

,
`Invariant`

, and `Profunctor`

!
- Introducing new infix operators corresponding to each variance.
`(<#>)`

is
still used for covariant type parameters, so after updating the instances,
all the call sites which were using the 0.1 API should still work. `(>#<)`

is
used for contravariant type parameters, `(<#>/>#<)`

is used for invariant
type parameters, which can be mapped given both a covariant and a
contravariant function, and `(ðŸ‘»#ðŸ‘»)`

is used for phantom type parameters.
- Introducing the
`(-#-)`

operator, which can be used instead of any other
operator in order to leave the corresponding type parameter untouched.
- Introducing support for mapping over type parameters of kind
`* -> *`

using
natural transformations. The corresponding infix operators have two hashes:
the covariant operator is `(<##>)`

, the contravariant operator is `(>##<)`

,
etc.
- Introducing the
`VarianceTransformer`

typeclass, via which you can add
support for other variances and other kinds.
- It is no longer needed (nor allowed) to write both an
`NFunctor Either`

instance and an `NFunctor (Either a)`

instance corresponding to `Either`

's
`Bifunctor`

and `Functor`

instances. Instead, the `NFunctor (Either a)`

instance is derived from the `NFunctor Either`

instance.

## New in 0.1.0.0

- Initial release of the
`NFunctor`

typeclass