我在教程中得到了这个问题,我真的不知道如何去做。
为了确保这一点,必须如何用p和f来定义g和h
filter p . map f = map g . filter h
总是抱着?
任何指向正确方向的人都会非常感激。
答案 0 :(得分:9)
很明显,f :: a -> b
和p :: b -> Bool
。由于我们无法对f
和g
做出任何其他假设,因此必须定义
h = p . f
g = f
现在h :: a -> Bool
和g :: a -> b
。
答案 1 :(得分:4)
考虑类型。
f :: a -> b
g :: a -> b
p :: b -> Bool
h :: a -> Bool
答案 2 :(得分:2)
另一种看法:
map g (filter h A)
是集合{g(a) : with h(a) is true and a is elt from A}
filter p (map f A)
是集合{f(a) : with p(f(a) is true and a is elt from A}
要使这些集合相等,我们必须选择f = g
和h(a) = p(f(a))
。