haskell不能构造无限类型

时间:2014-05-21 02:06:18

标签: haskell

我是哈斯凯尔的新手。 我写了一个简单的代码。 但它不起作用。 我得到这个'无法构造无限类型'的错误。 它是如何解决的。

reverse' list
        | null list = []
        | otherwise = (reverse' (tail list)) : (head list) 

1 个答案:

答案 0 :(得分:6)

问题源于您使用:运算符,其类型为

(:) :: a -> [a] -> [a]

因此它需要一个元素和一个列表,并返回一个前面包含该元素的新列表。你在哪里

reverse' (tail list) : head list
-- parentheses removed since they're not needed

reverse' (tail list)的类型为[a]head list的类型为a,因此编译器会尝试将其设为a ~ [a],显然无法工作。相反,您可以使用++运算符并将head list放入列表本身:

reverse' (tail list) ++ [head list]

但请记住,这不是一个非常有效的解决方案,因为它们是单链表,所以在Haskell列表末尾的连接很慢。