1

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

concatenate:: [String] -> String
concatenate xs = foldl (\acc x -> acc ++ x) [] xs

但现在我想代替字符串列表,使用任何东西的列表。这可以是字符串,也可以是整数。所以说

concatenate ["Phil", "is"] 

生成“Philis”,同时

concatenate [[1,2],[3,4]]

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

我发现

concatenate:: [a] -> a
concatenate xs = foldl (\acc x -> acc ++ x) [] xs

不起作用,我不知道为什么。不是haskell的工作方式,无论a是什么类型,输出也是a?还是后半部分的问题不允许它作为所有类型的函数工作?

4

1 回答 1

5

请记住,这String[Char].

你真正想要的是:

concatenate:: [[a]] -> [a]
于 2013-05-14T01:29:48.670 回答