我试图在 Haskell 的列表中展平任意数量的列表。我知道这个问题之前已经在 Stack 上发布过,但是那里的答案对我来说太复杂了(我是 Haskell 的新手),或者不是满足我需求的答案(例如 concat 对我不起作用,因为我必须自己为考试学习指南编写这个 flatten 函数)。我还在 Haskell 中编写了自己的 flatten 函数,以了解为什么顶级解决方案使用模块。
这是我到目前为止所拥有的。
flatten :: [[a]] -> [a]
flatten [] = []
flatten (x:xs) = flatten x:flatten xs
但是,我收到一个错误:
Inferred type is not general enough
*** Expression : flatten
*** Expected type : [[a]] -> [a]
*** Inferred type : [[[a]]] -> [[a]]
编辑:对不起!我误解了我的考试学习问题。列表的所有元素实际上都必须是列表。例如,
[[[1,2,3], [4,5,6]], [7,8,9]]
而不是[1, [2,3,4]]
。