Haskell herencia, datos, constructores

Así que quiero definir múltiples clases de datos para mi juego / asignación de Asteroides:

data One = One {oneVelocity :: Velocity, onePosition :: Position, (((other properties unique to One)))}
data Two = Two {twoVelocity :: Velocity, twoPosition :: Position, (((other properties unique to Two)))}
data Three = Three {threeVelocity :: Velocity, threePosition :: Position, (((other properties unique to Three)))}

Como puede ver, tengo varias clases de datos con algunas propiedades superpuestas (velocidad, posición). Eso también significaba que tenía que darles diferentes nombres por clase de datos ("oneVelocity", "twoVelocity", ...).

Existe alguna forma de permitir que este tipo de datos extienda algo? Pensé en usar un tipo de datos con múltiples constructores, pero algunas de estas clases de datos actuales son muy diferentes y no creo que deberían residir en una clase de datos con múltiples constructores.

Respuestas a la pregunta(2)

Su respuesta a la pregunta