我希望使用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模块提供了类似的功能,这让我相信这是可能的。