以($)
或(>>=)
为开头的函数有哪些?我并没有确切地问$
或>>=
是什么意思,但我理解
f :: Int -> Int
f x = x+2
是一个取整数并加两个的函数,但是在学习Haskell的过程中我遇到的问题是解决方案类似于以下内容:
($) :: (a -> b) -> (a -> b)
f $ x = f x
来自What does $ mean/do in Haskell?
我认为这意味着函数($)采用lambda(a - > b)并输出lambda(a - > b),然后下一行我不确定。
但我总是假设功能定义
f :: Int -> Int
必须跟一个带有参数的函数,这个函数以f开头,就像我的第一个代码示例一样。
由于
答案 0 :(得分:7)
1 + 2
或f $ x
等中缀应用程序分别只是(+) 1 2
和($) f x
的语法糖。这不管它们是出现在模式匹配(=
的左侧)还是出现在表达式中。所以,你的片段去了
f :: Int -> Int
f x = (+) x 2
($) :: (a -> b) -> (a -> b)
($) f x = f x
后者也可以写成
apply :: (a -> b) -> a -> b
apply f x = f x
语法规则是:如果标识符由字母(可能是数字,在非前导位置)组成,则它被解析为右边所有参数的函数,或者如果没有参数则简单地作为常量值。如果它由任何其他符号组成并且没有被括号括起来,则它被解析为中缀,即desugared,因此左边的任何一个用作第一个参数,而右边的任何一个用作第二个参数。