3
我在Haskell中定义了一个Tree数据类型,并且在关联的'size'方法中计算了树中元素的个数。在此之前的工作,但是我已经更新为使用命名字段为如下定义的树数据类型:在Haskell函数中访问命名的字段
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数据类型访问变量的情况,使用非命名域时,我从来没有遇到范围问题。
我试过所有的建议,但我仍然得到'不在范围内'的错误。我可以在GHCi中使用'left'和'right',但似乎无法在我的主模块中使用它们。 – benwad 2010-02-09 13:19:24
您是否在模块中导出名称? (这些名字也是功能)。你需要在模块代码中使用“module TreeModule(Tree Node Leaf left right)”。 – 0xfe 2010-02-09 13:24:20
谢谢 - 我已经从代码中省略了左值,右值和值声明。 – benwad 2010-02-09 13:29:30