使用ADD和类型类构建程序

时间:2013-11-25 21:52:00

标签: haskell

我是haskell的新手,我认为我理解ADT和类型类的概念,但我仍然有点困惑。

我尝试创建一个小游戏,然后开始布局数据结构。

现在我开始

data Consumable = Food
                | Water
                | Potion

data Equipment = Weapon
               | Shield

ConsumableEquipment都有关系,两者都是项目,但我不确定如何在haskell中表达这一点。

我想也许我应该创建一个名为Item的类型类

Class Item where
  use ::

然后使耗材和设备成为Item的两个实例。或者我可以像

那样表达
data Item = OneTimeUseable Consumable
          | Equipable Equipment

感觉haskell比我学到的其他语言更具表现力,我在设计应用程序时遇到了一些麻烦。

您可以提供给我的任何提示/指南?

2 个答案:

答案 0 :(得分:8)

我的经验法则是设计您的程序,就好像类型不存在一样。如果你后来遇到一个真正需要类型类的抽象来避免样板,那么继续添加它。

答案 1 :(得分:3)

你可以坚持工会理念。

data Item = Consume Consumable | Equip Equipment

我会远离制作自己的类型课程。这些通常用于有法律的东西,如monad,functor,applicative。

你也可以开始思考实际上做了什么,并使用具有函数作为成员的数据类型。

data Consumable = Consumable
   {
      -- what happens to the player when he consumes said item
     consume   :: Player -> Player
     -- could this player sell this item and get more money
   , sell      :: Player -> Player
   }