Haskell((<x)y)和(((<)x)y之间的差异

Gre*_*ato 4 haskell

我无法理解为什么这些会有所不同.

Prelude> :t ((<) 3)
((<) 3) :: (Num a, Ord a) => a -> Bool
Prelude> ((<) 3) 2
False
Prelude> 

Prelude> :t (< 3)
(< 3) :: (Num a, Ord a) => a -> Bool
Prelude> (< 3) 2
True
Prelude> 
Run Code Online (Sandbox Code Playgroud)

我怀疑有一个直截了当的答案,但我甚至不知道用什么词来描述第一和第二个案例之间的区别.我很乐意编辑我的问题,一旦有人告诉我这是什么情况,使用正确的命名法.

int*_*jay 9

(<) 3适用3作为的第一个(左)参数<.所以(<) 3 2是一样的3 < 2.

(< 3)部分适用3作为右操作数<.这是可以与二进制中缀运算符一起使用的特殊语法.所以(< 3) 2是一样的2 < 3.

要将3左操作数作为一个部分应用,您可以写:(3 <).所以(3 <) 2是一样的3 < 2.

使用lambdas进行演示:(< 3)与...相同\x -> x < 3,并且(3 <)相同\x -> 3 < x.