> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
为什么第二个不是函数?我必须写
(+(-1))
或者,还有更好的方法?
最佳答案
这是因为 (-1)
被解释为负数,但是 (+1)
被解释为柯里化(Currying)函数 (\x->1+x)
.
在 haskell 中,(a **)
是 (**) a
的语法糖, 和 (** a)
是 (\x -> x ** a)
.然而(-)
是一种特殊情况,因为它既是一元运算符(否定)又是二元运算符(减号)。因此,这种语法糖不能在这里明确应用。当你想要(\x -> a - x)
你可以写(-) a
, 并且,正如 Currying subtraction 中已经回答的那样,您可以使用函数negate
和 subtract
消除一元和二元之间的歧义-
功能。
关于function - +1 和 -1 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210182/