普通函数组合的类型为
(.) :: (b -> c) -> (a -> b) -> a -> c
我认为这应该适用于类似以下类型:
(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
一个具体的例子:计算差的平方。我们可以写成 diffsq a b = (a - b) ^ 2
,但是感觉上我应该能够组合 (-)
和 (^2)
来编写类似于 diffsq = (^2) . (-)
的东西。当然,我做不到。我能做的一件事是使用元组代替两个参数作为
(-)
的输入,通过使用 uncurry
进行转换,但这并不相同。我想知道是否可能实现我想要的东西?如果不行,那么我误解了什么使我认为它应该是可能的?
注意:这个问题 已经在这里 被问过了,但是没有给出我怀疑必须存在的答案。
blackbird :: (c -> d) -> (a -> b -> c) -> a -> -> b -> d
。你可以将它视为对普通函数应用进行“后变换器”的应用。 - stephen tetleyuncurry (-)
的解决方案,因为它比其他方案更简单,并指向了潜在的问题。 - George Co