[Haskell-cafe] an instance in other than the last type parameters

Stefan Holdermans stefan at cs.uu.nl
Fri Jul 17 15:25:57 EDT 2009


Petr,

> If I want to make it a functor in the last type variable (b), I can  
> just define
>
>> instance Functor (X a) where
>>  fmap f (X a b) = X a (f b)
>
> But how do I write it if I want X to be a functor in its first type  
> variable?

Short answer: you can't. Easiest way to workaround is to define a  
newtype wrapper around your original datatype:

newtype X' b a = X' {unX' :: X a b}

instance Functor (X' b) where
   fmap g (X' (X a b)) = X' (X b (g a))

Cheers,

   Stefan


More information about the Haskell-Cafe mailing list