我在 Haskell 中定义了一个 Tree 数据类型和一个关联的“size”方法,用于计算树中元素的数量。这以前有效,但是我已经更新了 Tree 数据类型以使用命名字段,如下面的定义:
data Tree a = Empty
| Leaf {value::a}
| Node {left :: (Tree a), value :: a, right :: (Tree a)}
deriving (Eq, Ord, Show)
例如,我发现(通过在 GHCi 中玩耍)我可以使用函数(左 n)访问命名字段。但是,当我尝试使用此功能时,出现错误:
size :: Tree a -> Int
size Empty = 0
size (Leaf l) = 1
size (Node n) = size (left n) + 1 + size (right n)
GHCi 简单地说“不在范围内:左”和右的等价物。Tree 定义在一个名为 Tree 的模块中,大小定义在一个名为 Main 的模块中,但是对于未命名的字段,在从 Tree 数据类型访问变量时,我从来没有遇到过范围问题。