在Haskell中将两种数据类型链接在一起

时间:2014-07-09 09:18:02

标签: haskell types functional-programming

我是Haskell的绝对初学者。 我想构建两种数据类型,如:

data A = A B
data B = B A

(当然,在对象中有附加数据)

我想创建一个这样的对象:

A (B this)

这应该是A - 对象。 A应该包含对B的引用,而B应该包含对A的引用。

如何将两个数据对象链接在一起的函数式编程是否可行或是否存在另一种解决方案?

1 个答案:

答案 0 :(得分:2)

完全按照你说的方式可能:

recursiveA :: A
recursiveA = A recursiveB

recursiveB :: B
recursiveB = B recursiveA

或者,如果你喜欢它,

recursiveA = fix $ A . B

但实际上,这是无用的。在函数式语言中, not 想要考虑 1 对象 2 的引用。我们谈论,以及"参考"价值与价值本身是一回事,因为我们没有可变性来搞砸。你不能像在Java中那样使用refences。

将两种类型链接在一起的最明显 - 通常最好 - 的方法是将它们放在另一个data中。

data AandB = AandB A B

1 嗯,还有IORef,它给你一个可变的参考......但这真是一个讨厌的现实世界的住宿黑客,而不是你应该用作初学者的东西。

2 BTW,当说"对象":类型是对象时,许多更具数学倾向的Haskeller将意味着类型 category Hask

相关问题