我学习Haskell。
这不是运算符,因为运算符必须有两个参数:
(###) :: Int -> Int -> Int -> Int
(###) a b c = a + b + c
但是这个案子呢:
(###) :: Int -> Int -> (Int -> Int)
(###) a b = \c -> a + b + c
此函数有两个参数,但返回一个函数......现在是运算符吗?我认为它不是运营商,因为第二个变量首先是部分应用。但我不确定我是对的。操作员可以返回一个函数吗?
答案 0 :(得分:7)
没有规则说操作符必须有两个参数,实际上,在语义上,Haskell中的所有函数只接受一个参数。您的两个示例完全相同,因为Int -> Int -> Int -> Int
类型被隐式括起来为Int -> (Int -> (Int -> Int))
。
您可以像这样使用您的运营商
(1 ### 2) 3
或
1 ### 2 $ 3