同时通过真实世界哈斯克尔工作,我尝试使用下面的代码的解决方案来完成回文锻炼:为什么这种形式可以接受,但另一种形式会引发类型错误?
palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ (head list)
其中提出了一个“无法构造无限类型的错误。然而,简单地更换周围的括号头列表用方括号,它工作正常,如下面的例子证明:
palin :: [a] -> [a]
palin list = list ++ rev list
where rev list
| null list = []
| otherwise = rev (tail list) ++ [head list]
我真的不明白,为什么它很重要,我也不明白什么是“无法构造无限类型= [ a]“错误我答。有人能解释这一点吗?
表达式'(something)** ** never **与形式'[something]'的相应表达式具有相同的类型,您只需用方括号替换括号即可。那*总是很重要! – Ben 2013-12-17 00:29:02