使用ADT和类型类构建程序

Mai*_*ein 1 haskell

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

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

现在我开始了

data Consumable = Food
                | Water
                | Potion

data Equipment = Weapon
               | Shield
Run Code Online (Sandbox Code Playgroud)

双方ConsumableEquipment有关系,都是项目,但我不知道我应该如何在Haskell表达这种.

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

Class Item where
  use ::
Run Code Online (Sandbox Code Playgroud)

然后制作消耗品和设备两个物品的实例.或者我可以表达它

data Item = OneTimeUseable Consumable
          | Equipable Equipment
Run Code Online (Sandbox Code Playgroud)

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

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

Tom*_*lis 8

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