Of course it depends what's inside the braces, and what you want to do with it, but I'd be inclined to do something like this:
1) data IX a = IX { constructor :: Int -> a, ... }
2) data IX a b = IX { constructor :: Int -> b, func :: a -> b, ... }
3) data IX a b = IX { iy :: IY a, ... }
4) data IX a b = IX { iz :: IZ b, iy :: IY a, ... }
Can you specify more clearly what the goal of the conversion is? If you want "OO" style behavior the thing that is most important is existential quantification.
-- ryan