在数据类型定义中,我如何命名'类似的参考?

时间:2015-02-04 22:02:01

标签: haskell types

我可以这样定义一个树:

data Tree a = Leaf a | Branch (Tree a) (Tree a)

假设我想提醒自己,第一棵树是左边的树,第二棵树是右边的树。

我试过

data Tree a = Leaf a | Branch (L (Tree a)) (R(Tree a))

失败了。因此,Haskell知道Branch是一个构造函数,但在LR给出此声明时无法做同样的事情。

我试图帮助:

data L a = L a
           deriving (Show)

data R a = R a
           deriving (Show)

data Tree a =
  Leaf a | Branch (L (Tree a)) (R (Tree a))
  deriving (Show)

这样可行,但现在我可以拥有L "whatever"而不是左分支。似乎我需要提醒自己第一棵树是'左'而第二棵树是'右'。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:4)

听起来你想要一张唱片:

data Tree a = Leaf a | Branch { l :: Tree a, r :: Tree a}

然后你可以有一个

Leaf 3

Branch { l=Leaf 4, r=... }