## 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