Я хотел бы использовать haskell для реализации игры и хотел бы использовать систему классов типов для реализации системы элементов. Это будет работать примерно так:
data Wood = Wood Int
instance Item Wood where
image a = "wood.png"
displayName a = "Wood"
instance Flammable Wood where
burn (Wood health) | health' <= 0 = Ash
| otherwise = Wood health'
where health' = health - 100
где классы Item и Flammable выглядят примерно так:
class Item a where
image :: a -> String
displayName :: a -> String
class Flammable a where
burn :: (Item b) => a -> b
Для этого мне понадобится способ определить, является ли значение экземпляром класса типа.
Модуль Data.Data предоставляет аналогичные функции, поэтому я полагаю, что это возможно.