此代码在几分钟前工作,在我重新启动ghci后,它停止工作..
现在我在where
,snst
或size
上收到随机错误。 (不确定我改变了什么导致每个单独的错误)
有人可以指出我的语法有什么问题吗?
instance Array Tree where
new n x
| n <= 0 = Leaf
| odd n = Node n nst x nst
| even n = Node n (Node (n `div` 2) snst x snst) x snst
where nst = (new (n `div` 2) x)
snst = (new (n `div` 2 - 1) x)
size Leaf = 0
size (Node s _ _ _) = s
答案 0 :(得分:3)
在这些情况下,请确保没有隐藏标签。
我检查了缩进where
的方法是有效的。因此,除非在instance
声明之前出现错误,否则我看不到任何语法错误。
此外,消除错误来源的一个想法是移出new
的定义。
myNew :: ...
myNew n x
| n <= 0 = Leaf
| odd n = Node n nst x nst
| even n = Node n (Node (n `div` 2) snst x snst) x snst
where nst = (new (n `div` 2) x)
snst = (new (n `div` 2 - 1) x)
instance Array Tree where
new = myNew
size Leaf = 0
size (Node s _ _ _) = s
试试这个并查看是否编译