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

时间:2017-08-19 15:19:47

标签: 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> 

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

1 个答案:

答案 0 :(得分:9)

(<) 33应用为<的第一个(左)参数。因此(<) 3 23 < 2相同。

(< 3)是一个section,它将3作为<的右操作数。这是可以与二进制中缀运算符一起使用的特殊语法。因此(< 3) 22 < 3相同。

要将3作为左操作数应用于一个部分,您可以编写:(3 <)。因此(3 <) 23 < 2相同。

使用lambdas进行演示:(< 3)\x -> x < 3相同,(3 <)\x -> 3 < x相同。