Haskell Typeclass Inspection

Я хотел бы использовать 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 предоставляет аналогичные функции, поэтому я полагаю, что это возможно.

5
задан adrusi 5 February 2012 в 16:11
поделиться