Haskell - 统一会给出无限类型

时间:2018-04-06 12:31:43

标签: haskell typeerror

我是Haskell的新手,我刚遇到这个问题/错误。

我不知道发生了什么,我也不是很熟悉使用列表并将它们定义为(l:k) ...我真的不知道l和k被认为是什么......我是一个元素,k是一个列表?

无论如何,我很感激有人向我解释了这些l和k的东西,或者在使用list的函数内部(l:t:k),也许是一种编写这个简单删除函数的方法,假设元素在列表中,找到所需元素的第一个外观并删除它,返回新列表。

    delete :: Eq b => b -> [b] -> [b]
    delete r (l:k)
        | inside r k = [l]:delete(r k)
        | otherwise = k

1 个答案:

答案 0 :(得分:2)

模式l:k做了三件事:

  1. 如果模式匹配
  2. ,它会告诉您列表不为空
  3. 它将l绑定到列表的第一个元素
  4. 它将k绑定到列表的其余部分。
  5. 如果您有非空列表,则需要将术语rl进行比较。如果他们相等,您只需返回列表的其余部分。否则,您将l放回到递归调用产生的列表中。

    如果列表 为空,您还需要处理它,只需返回一个空列表即可。 (从r删除[]会产生[]。)

    delete :: Eq b => b -> [b] -> [b]
    delete r (h:t) | r == h = t   -- h for head, t for tail
                   | otherwise = h : delete r t
    delete _ [] = []   -- base case