Haskell自己的递归concat方法

Haskell自己的递归concat方法,haskell,recursion,concat,Haskell,Recursion,Concat,我在Haskell上练习递归,需要在嵌套列表上使用自己的推进来实现concat方法 我试过了 myConcat :: [[a]] -> [a] myConcat [[]] = [] myConcat ((x:xs)) = x : myConcat ((xs)) 但它似乎不起作用 myConcat[[1,2],[3,4,5],[6]==[1,2,3,4,5,6] 这就是目标 主要的问题是我真的不知道如何使用嵌套列表。因为x在这里是一个列表(它的类型是[a]),你不

我在Haskell上练习递归,需要在嵌套列表上使用自己的推进来实现concat方法

我试过了

    myConcat :: [[a]] -> [a]
    myConcat [[]] = []
    myConcat ((x:xs)) = x : myConcat ((xs))
但它似乎不起作用

myConcat[[1,2],[3,4,5],[6]==[1,2,3,4,5,6]
这就是目标


主要的问题是我真的不知道如何使用嵌套列表。

因为
x
在这里是一个列表(它的类型是
[a]
),你不能在这里使用
x:…
,除非你再次想要创建列表列表,但是你的
myConcat
会像列表的
id
函数一样工作

在这里,您需要将
x
附加到列表的其余部分,这样您就可以使用:


请注意,您忘记了基本情况
[]
。通过编写
[[]]
将列表与一个元素匹配:空列表。这是不一样的。

您好,您只需将您的
x:myConcat xs
替换为
x++myConcat xs

因为
x
是一个列表,您不能在这里使用
x:…
,除非您再次想要创建列表。您介意发布类型错误以供将来搜索吗?这还不够。模式匹配仍不完整。是,请确保列表为空!我的解决方案不完整,我只是想强调一下
++
myConcat :: [[a]] -> [a]
myConcat [] = []
myConcat (x:xs) = x ++ myConcat xs