I came across this question on modeling inheritance in Haskell and it reminded me that I have a little more complicated version of the same problem. I\'ll adopt the example from
Are you aware that a Tuple with arity of 2 has a Functor instance, which maps over the second item? We can use it to our benefit.
Functor
data PositionAndVelocity = PositionAndVelocity Vec3 Vec3 data Colour = ... f1 :: (PositionAndVelocity, Camera) -> ... f2 :: (Colour, Camera) -> ...