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

时间:2019-06-17 12:04:29

标签: haskell typing

我想找到map.map的类型。第一张图片是我找到的解决方案,但我不太了解。我的解决方案就像第二幅图所示,但这是错误的。我不了解该解决方案的明显特点。为什么会这样?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

简短答案:箭头类型构造函数(->)右关联运算符。

箭头是右联想。这意味着如果您写:

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

更详细,您写道:

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

因此,假设(.)的第一个参数具有类型(a -> b),则这意味着类型(d -> e) -> ([d] -> [e]) ~ a -> b~表示相同类型),因此{{1 }}和a ~ d -> e。当然,当我们用第二个b ~ [d] -> [e]键入check时,同样如此。

请牢记这一点,就像节点所说的那样,得出:

map

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

例如:

f -> g