类型(地图。地图)

时间:2017-08-17 12:13:56

标签: haskell function-composition

我试图了解表达式(map . map)的类型。由于(.)的类型为(b -> c) -> (a -> b) -> a -> c,我不明白它如何与map函数一起使用,因为map有两个不符合函数(b -> c)的参数和(a -> b)

2 个答案:

答案 0 :(得分:5)

引用GHCI:

Prelude> :t map.map
map.map :: (a -> b) -> [[a]] -> [[b]]

但是对于地图本身,输入是

map :: (a -> b) -> [a] -> [b]

你可以看作

map :: (a -> b) -> ([a] -> [b])

所以,如果我们有那个 (.) :: (t2 -> t3) -> (t1 -> t2) -> t1 -> t3

然后:

  • 类型t1(a -> b)
  • 类型t2([a] -> [b])
  • 类型t3([[a]] -> [[b]])

答案 1 :(得分:1)

我喜欢考虑的一种方式是mapa -> b变为[a] -> [b],因此map . map会两次完成。第一张地图将您的a -> b变为[a] -> [b],第二张地图重复该过程,将其转换为[[a]] -> [[b]]

"将map应用于a -> b会将其变为[a] -> [b]",因此将map应用于[a] -> [b]似乎非常合乎逻辑[[a]] -> [[b]]会将其变为map。您只需将-- apply map to a function once map :: (a -> b) -> ( [a] -> [b] ) -- apply map to a function twice map . map :: (a -> b) -> ( [[a]] -> [[b]] ) -- apply map to a function three times map . map . map :: (a -> b) -> ([[[a]]] -> [[[b]]]) 应用于某个功能两次。

顺便提及:

onClick(e) {

}