我正试图在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的工作方式,不管是什么类型,输出也是一样的?或者下半部分的问题是不允许它作为所有类型的函数工作?
请记住,这String是别名[Char].
你真正想要的是这个:
concatenate:: [[a]] -> [a]
Run Code Online (Sandbox Code Playgroud)