Deriving Contravariant and Profunctor

David Feuer david.feuer at gmail.com
Fri Sep 11 18:22:15 UTC 2015


Oh, I see... you get horrible overlap problems there. Blech! I guess
they'll all act the same (modulo optimized <$ and such), but GHC can't
know that and will see them as forever incoherent.

On Fri, Sep 11, 2015 at 1:52 PM, Edward Kmett <ekmett at gmail.com> wrote:
> 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 at 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 at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
>


More information about the ghc-devs mailing list