(Eu sei que as representações de dados não são consideradas objetos em Haskell, mas dado que estou tentando representar algo visual, achei que o termo objeto seria apropriado)
Normalmente, nesse tipo de situação, você criaria um tipo de dados simples ou talvez um registro para agregar os diferentes campos:
As classes de tipo são para quando você precisa de um envio polimórfico para muitas implementações da mesma função. Esse certamente não é o caso de escala e posição, para o qual você terá apenas uma implementação. As dimensões podem ter formas diferentes de serem calculadas, como as dimensões naturais de um bitmap, mas essas diferenças quase certamente podem ser contabilizadas no momento da construção.