小编has*_*ker的帖子

为什么这种形式可以接受,但另一种形式会引发类型错误?

在通过Real World Haskell工作时,我尝试使用以下代码解决方案完成回文练习:

palin :: [a] -> [a]
palin list = list ++ rev list
    where rev list
           | null list = []
           | otherwise = rev (tail list) ++ (head list)
Run Code Online (Sandbox Code Playgroud)

这引发了"无法构造无限类型错误.但是,只需用方括号替换头列表周围的括号,它就可以正常工作,如下例所示:

palin :: [a] -> [a]
palin list = list ++ rev list
    where rev list
           | null list = []
           | otherwise = rev (tail list) ++ [head list]
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么这很重要,我也不明白"无法​​构造无限类型a = [a]"错误意味着什么.有人可以解释一下吗?

haskell

3
推荐指数
3
解决办法
241
查看次数

标签 统计

haskell ×1