Haskell 中 map.map 的类型是什么?

What is the type of map.map in Haskell?

我想找到map.map的类型。第一张图片是我找到的解决方案,但我不太明白。我的解决方案就像第二张图片中的那样,但这是错误的。我不明白解决方案的标记位。为什么会这样?

简答:箭头类型构造函数(->)是一个右结合运算符。

箭头是右结合的。这意味着如果你写:

map :: (d -> e) ->  [d] -> [e]

更详细,您写道:

map :: (d -> e) -> ([d] -> [e])

因此,鉴于 (.) 的第一个参数具有类型 (a -> b),因此这意味着类型 (d -> e) -> ([d] -> [e]) ~ a -> b~ 表示相同类型),因此 a ~ d -> eb ~ [d] -> [e]。当我们用第二个 map.

输入 check 时,当然也是如此

考虑到这一点,我们因此,就像节点所说的那样得出:

(.) map map :: (f -> g) -> ([[f]] -> [[g]])

因此这意味着此函数采用类型 f -> g 的函数,并将列表列表中的所有元素映射到维护结构的列表列表。

例如:

Prelude> (.) map map (+1) [[1,4,2,5], [], [1,3], [2]]
[[2,5,3,6],[],[2,4],[3]]