Haskell语法在看似随机的位置出错

时间:2013-03-27 02:49:32

标签: haskell syntax

此代码在几分钟前工作,在我重新启动ghci后,它停止工作.. 现在我在wheresnstsize上收到随机错误。 (不确定我改变了什么导致每个单独的错误)

有人可以指出我的语法有什么问题吗?

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

1 个答案:

答案 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

试试这个并查看是否编译