<div dir="ltr"><div class="gmail_extra"><div>On 22 December 2013 20:26, Brent Yorgey <<a href="mailto:byorgey@seas.upenn.edu" target="_blank">byorgey@seas.upenn.edu</a>> wrote:</div><div><br></div><div>> You have encoded a Foo dictionary as an Either Int a -> Either a Int</div>

<div>> function, but that is very different than saying that having a Foo</div><div>> dictionary is *equivalent* to having an Either Int a -> Either a Int</div><div>> function.  They are not equivalent; in particular, you could have a</div>

<div>> function which sends Left 5 to Right 6, which does not correpond to</div><div>> anything in Foo.  Put another way, if you try to write a Foo instance</div><div>> given only some unknown function of type (Either Int a -> Either a</div>

<div>> Int), you will find that you cannot do it.  So my point stands that it</div><div>> is not always possible to *characterize* a type class as a natural</div><div>> transformation.</div><div><br></div><div>OK, I think see what you're saying: while you can represent any Foo instance as an "Either Int a -> Either a Int", not every "Either Int a -> Either a Int" represents a Foo instance.</div>

<div><br></div><div>I guess I was originally hoping to encode a bunch of equations into a single one, so that rather than a collection of similar equations, one for each function in the type class...</div><div><br></div>
<div>
  fmap f . foo == foo . fmap f</div><div>  fmap f . bar == bar . fmap f</div><div>  fmap f . baz == baz . fmap f</div><div><br></div><div>...you could encode the typeclass signature as some function "sig" and express the same condition as a single equation (which would be true if and only if the above equations were true):</div>

<div><br></div><div>  fmap f . sig == sig . fmap f</div><div><br></div><div>I don't know if that's always possible. As you pointed out, you'd need dinatural transformations in general, which I've had a look at, although I confess I find it hard to get the same intuition about them as for regular natural transformations. If you wanted to write that blog post, you'd have at least one guaranteed keen reader ;-)</div>

<div><br></div><div>Cheers,</div><div><br></div><div>-- Matt</div></div></div>