Actually it is trickier than you'd think.

With "Functor" you can pretend that contravariance doesn't exist.

With both profunctor and contravariant it is necessarily part of the puzzle.

data Compose f g a = Compose (f (g a))

* are both f and g contravariant leading to a functor?
* is f contravariant and g covariant leading to a contravariant functor?
* is f covariant and g contravariant leading to a contravariant functor?

data Wat p f a b = Wat (p (f a) b)

is p a Profunctor or a Bifunctor? is f Contravariant or a Functor?

We investigated adding TH code-generation for the contravariant package, and ultimately rejected it on these grounds.

https://github.com/ekmett/contravariant/issues/17

-Edward



On Fri, Sep 11, 2015 at 12:49 PM, David Feuer <david.feuer@gmail.com> wrote:
Would it be possible to add mechanisms to derive Contravariant and
Profunctor instances? As with Functor, each algebraic datatype can
only have one sensible instance of each of these.

David Feuer
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs