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]]
答案 0 :(得分:4)
[wrap xs]
包含wrap xs
的整个结果。你不想包装整个结果。您只想包装列表其余部分的每个单独元素,这正是wrap xs
已经完成的。因此,wrap
是:
wrap :: [a] -> [[a]]
wrap [] = []
wrap (x:xs) = [x] : wrap xs
错误告诉您,您正在尝试使用GHC期望[t]
的{{1}}。这正是我们上面所说的,你要包装的东西太多了。