【发布时间】:2017-07-23 03:42:56
【问题描述】:
当谈到 Haskell 语法和函数式编程语言时,我仍然是初学者,所以当我查看 Data.Function.on 的类型声明 on :: (b -> b -> c) -> (a -> b) -> a -> a -> c 时,我的解释是它需要四个参数:(b -> b -> c), (a -> b)、a、a,并返回c。但是,当我查看Data.Function.on 的一般使用语法(*) `on` f = \x y -> f x * f y 时,它只采用两个函数参数,而不是四个,那么类型签名与使用语法有何关系?
【问题讨论】:
-
(->)是右结合的,所以(b -> b -> c) -> (a -> b) -> a -> a -> c等价于(b -> b -> c) -> (a -> b) -> (a -> a -> c)。请注意末尾a -> a -> c周围的括号。 -
相当于
on (*) f x y = f x * f y。