几个星期以来,我一直在考虑物体之间的关系 - 尤其是OOP的物体。例如,在 C ++ 中,我们习惯于通过在结构中分层指针或容器来表示需要访问另一个对象的指针。如果对象A
需要访问B
,则在B *pB
中找到A
并不罕见。
但我不再是 C ++ 程序员,我使用函数式语言编写程序,尤其是 Haskell ,这是一种纯函数式语言。可以使用指针,引用或那种东西,但我对此感到奇怪,比如“以非Haskell的方式做”。
然后我对所有这些关系的内容进行了深入思考,并提到了这一点:
“为什么我们甚至通过分层表示这种关系?
我读过一些已经考虑过的人(here)。在我看来,通过显式图形表示关系是更好的方法,因为它使我们能够专注于我们类型的核心,并且稍后通过组合器表达关系(有点像SQL)。 / p>
通过核心我的意思是,当我们定义A
时,我们希望定义{/ 1}是由构成的,而不是 >取决于。例如,在视频游戏中,如果我们有类型A
,那么谈论Character
,Trait
或那种东西是合法的,但是如果我们谈论{{{ 1}}或Skill
?我不再那么肯定了。然后:
Weapon
对我而言,在设计方面听起来确实是错误的。我更喜欢这样的东西:
Items
此外,当有一天添加新功能时,我们可以创建新类型,新图表和链接。在第一个设计中,我们必须打破data Character = {
chSkills :: [Skill]
, chTraits :: [Traits]
, chName :: String
, chWeapon :: IORef Weapon -- or STRef, or whatever
, chItems :: IORef [Item] -- ditto
}
类型,或使用某种类型
努力扩展它。
您如何看待这个想法?您认为在纯函数式语言 Haskell 中处理这类问题最好的是什么?