[Haskell-cafe] Type parameters in type families

Hugo Pacheco hpacheco at gmail.com
Mon Mar 17 18:04:45 EDT 2008


I am trying to understand some differences of parameterizing or not some
arguments of type families.
I have some code such as

*type family G a :: * -> *

instance Functor (G Int) where
   fmap f (Left ()) = Left ()
   fmap f (Right x) = Right (f x)

ggg :: Functor (G a) => G a x -> G a x
ggg = fmap id*

and it works fine.
However, I need to parameterize one extra argument (due to type equality):

*type family F a x :: *

class FunctorF d where
    fmapF :: (x -> y) -> F d x -> F d y

fff :: (FunctorF a) => F a b -> F a b
fff = fmapF id*

This second scenario fails to compile because the compiler cannot unify
types a and b with types d and x from the fmapF declaration.
Is there any other option than passing dummy variables to fmapF?
class FunctorF d where
    fmapF :: d -> x -> (x -> y) -> F d x -> F d y

fff :: (FunctorF a) => a -> b -> F a b -> F a b
fff a b = fmapF a b id*

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080317/92a75221/attachment.htm

More information about the Haskell-Cafe mailing list