在列表的每个顶级元素周围包裹[]

时间:2017-06-29 03:23:20

标签: haskell

wrap [1,2,3] should output [[1],[2],[3]]
wrap [[1],[2],[3]] should output [ [[1]], [[2]], [[3]] ]

我的实施是:

wrap [] = []
wrap (x:xs) = [x] :  [wrap xs]

和haskell输出错误:发生检查:无法构造无限类型:t~ [t]

预期类型:[t] - > [T] 实际类型:[t] - > [[T]]

1 个答案:

答案 0 :(得分:4)

[wrap xs]包含wrap xs的整个结果。你不想包装整个结果。您只想包装列表其余部分的每个单独元素,这正是wrap xs已经完成的。因此,wrap是:

wrap :: [a] -> [[a]]
wrap [] = []
wrap (x:xs) = [x] : wrap xs

错误告诉您,您正在尝试使用GHC期望[t]的{​​{1}}。这正是我们上面所说的,你要包装的东西太多了。