首页 文章

使用ADT和类型类构建程序

提问于
浏览
1

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

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

现在我开始了

data Consumable = Food
                | Water
                | Potion

data Equipment = Weapon
               | Shield

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

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

Class Item where
  use ::

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

data Item = OneTimeUseable Consumable
          | Equipable Equipment

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

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

2 回答

  • 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
       }
    
  • 8

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

相关问题