Sjoerd Visscher wrote:
On Jul 3, 2010, at 4:39 PM, Andrew Coppin wrote:

class Container c => Functor c where
  fmap :: (Functor cx, Functor cy, Element cx ~ x, Element cy ~ y) => (x -> y) -> 
(cx -> cy)

However, this fails horribly: The type signature fails to mention c.

You have to mention c, this means an extra argument to fmap. But if you do that you also get the opportunity to restrict what x and y can be.

Well, you can say

 class Container cy => Functor cy where
fmap :: (Functor cx, Element cx ~ x, Element cy ~ y) => (x -> y) -> (cx -> cy)

But that's still wrong.

As you'll have to pass around this extra argument, it will usually be easier to 
just pass around the map function though.

type family F f a :: *
class RFunctor f where
  (%) :: f a b -> (a -> b) -> F f a -> F f b

I have literally no idea what a type family is. I understand ATs (I think!), but TFs make no sense to me.

(For this reason, most if not all of the rest of this post doesn't make sense.)

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to