dmz>>История про пушку выглядит надуманной.
F>вот сейчас было обидно ._.
Нет, ну правда — отрисовка двухствольной пушки как-то отличается
от одноствольной? Казалось бы, и то, и другое — либо спрайт, либо
векторная модель в том или ином виде.
Просто постановка до боли напомнила замшелые задачки для собеседований — типа кто от
кого наследует — квадрат от прямоугольника или наоборот. Или построить иерархию
наследования для геометрических фигур.
Определение похожего поведения для разных типов обычно решается
тайпклассами или явной диспетчеризацией (PM) или совмещением
обоих подходов.
Может, лучше какие-то кейсы привести? Так-то:
class Drawable a where
draw :: Canvas -> a -> Canvas
data GunOneBarrel = GunOneBarrel GunAttributes
instance Drawable GunOneBarrel where
draw _ (GunOneBarrel{..}) = undefined
data GunTwoBarrels = GunTwoBarrels GunAttributes
instance Drawable GunTwoBarrels where
draw _ (GunTwoBarrels{..}) = undefined