普通的功能组成属于这种类型
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
我认为这应该概括为类型:
(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
Run Code Online (Sandbox Code Playgroud)
一个具体的例子:计算差分平方.我们可以写diffsq a b = (a - b) ^ 2,但感觉我应该能够编写(-)和(^2)编写类似的东西diffsq = (^2) . (-).
当然,我不能.我可以做的一件事是使用一个元组而不是两个参数(-),通过转换它uncurry,但这不一样.
有可能做我想要的吗?如果没有,我误解的是什么让我认为它应该是可能的?
注意:这里已经有效地提出过这个问题,但是没有给出答案(我怀疑必须存在).