【发布时间】:2021-12-19 09:29:25
【问题描述】:
我不明白为什么map . filter 泛型类型是map . filter :: (a -> Bool) -> [[a]] -> [[a]]。
我知道地图和过滤器类型是map :: (a -> b) -> [a] -> [b] 和filter :: (a -> Bool) -> [a] -> [a]。还有(.) :: (b -> c) -> (a -> b) -> a -> c。
所以我的猜测是 a = (a -> Bool) -> [a], b = [a] 并且由于 filter 的输出不是函数,我认为 map . filter 会返回一个函数,该函数期望函数 (a -> b)。
我不明白为什么该类型是a 的列表列表,因为map 和filter 都没有列表列表。我也不明白为什么它只适用于一个功能,因为两者都需要一个。
有人能解释一下它是如何工作的吗?
【问题讨论】:
-
请注意,
a -> b -> c与a -> (b -> c)的含义相同。(a -> b) -> c是完全不同的类型 - 但您的 cmets 暗示您认为它是等价的。
标签: haskell filter types type-inference map-function