普通函数组合的类型
(.) :: (b -> c) -> (a -> b) -> a -> c
我认为这应该概括为以下类型:
(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
一个具体的例子:计算差异平方。我们可以写diffsq a b = (a - b) ^ 2
,但感觉我应该能够作曲(-)
并(^2)
写出类似的东西diffsq = (^2) . (-)
。
我当然不能。我可以做的一件事是使用元组而不是两个参数来(-)
转换它uncurry
,但这是不一样的。
有可能做我想做的事吗?如果不是,我有什么误解让我认为它应该是可能的?
注意:这实际上已经在这里问过了,但没有给出答案(我怀疑必须存在)。