我是haskell的新手,我认为我理解ADT和类型类的概念,但我仍然有点困惑。
我尝试创建一个小游戏,然后开始布局数据结构。
现在我开始
data Consumable = Food
| Water
| Potion
data Equipment = Weapon
| Shield
Consumable
和Equipment
都有关系,两者都是项目,但我不确定如何在haskell中表达这一点。
我想也许我应该创建一个名为Item的类型类
Class Item where
use ::
然后使耗材和设备成为Item的两个实例。或者我可以像
那样表达data Item = OneTimeUseable Consumable
| Equipable Equipment
感觉haskell比我学到的其他语言更具表现力,我在设计应用程序时遇到了一些麻烦。
您可以提供给我的任何提示/指南?
答案 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
}