1
4

2 回答 2

4

仔细看类型:

foldl1 :: Foldable t => (a -> a -> a) -> t a -> a

[Char] 在调用函数之前需要将值转换为,因为函数期望其参数的类型和返回类型相同。(并且只有第一次使用该函数会获得两个相同类型的参数。)

要使用foldl1,请先映射show列表。

foldl1 (++) (map show [12, 23, 45, 66])
于 2019-03-04T20:50:08.197 回答
3

如果查看 的类型签名foldl1 :: Foldable t => (a -> a -> a) -> t a -> a,您会发现 lambda 必须返回与列表中的类型相同的类型。这是因为该返回值随后用于计算下一步。

这不会发生,foldl因为 lambda 可以返回任何类型,因为该值仅用作累加器。我没有时间写一个更清晰的答案,但只是谷歌 foldl1 来了解其中的区别

于 2019-03-04T20:49:58.347 回答