如何在Haskell中使用泛型

Phi*_*rip 1 generics haskell

我正试图在Haskell中围绕仿制药.我的问题是我创建了一个连接函数,它接受一个字符串列表并返回一个巨大的字符串.

concatenate:: [String] -> String
concatenate xs = foldl (\acc x -> acc ++ x) [] xs
Run Code Online (Sandbox Code Playgroud)

但是现在我想要的不是字符串列表,而是使用任何列表.这可以是字符串,也可以是整数.所以说

concatenate ["Phil", "is"] 
Run Code Online (Sandbox Code Playgroud)

同时产生"菲利斯"

concatenate [[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)

生成[1,2,3,4].

我发现了

concatenate:: [a] -> a
concatenate xs = foldl (\acc x -> acc ++ x) [] xs
Run Code Online (Sandbox Code Playgroud)

不起作用,我不知道为什么.不是haskell的工作方式,不管是什么类型,输出也是一样的?或者下半部分的问题是不允许它作为所有类型的函数工作?

Pub*_*bby 5

请记住,这String是别名[Char].

你真正想要的是这个:

concatenate:: [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)