Petr, > 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)) Err.... fmap g (X' (X a b)) = X' (X (g a) b) Cheers, Stefan