我正在阅读一份关于Haskell的在线指南,对中缀运算符和过滤器的组合感到好奇。
假设你有一个函数,例如:
filter (>5) [6, 10, 5]
这将返回[6,10],这似乎是筛选应该工作的直观方式。
然而,执行以下操作
filter ((>) 5) [6, 10, 5]
返回一个空列表(这仍然有意义,(>)检查其第一个参数是否大于第二个参数)。
然而,filter通常被定义为类似于:
filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
当类型系统知道它有一个中缀运算符时,大多数这些中缀运算符是这样编写的,部分应用的函数需要原始前缀函数的前导参数吗?例如,中缀运算符 > 是否定义为类似于以下代码(语法可能有误):
infix> :: Int -> Int-> Bool
infix> x y = (>) y x
x infix> y = (>) x y
抱歉,如果这个问题不太有意义的话。我感觉自己在理解部分应用中缺少一些基础知识,尤其是当p是一个部分应用的中缀运算符时,它是如何被评估的。