命名函数($)或(>> =)

w12*_*220 0 haskell

什么是开始($)(>>=)应该做的功能.我不是要问究竟是什么$>>=意思,但我明白这一点

f :: Int -> Int
f x = x+2
Run Code Online (Sandbox Code Playgroud)

是一个取整数并添加两个的函数,但在学习Haskell的过程中我遇到的问题是解决方案如下所示:

($) :: (a -> b) -> (a -> b)
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

来自Haskell的$ mean/do是什么?

我假设这意味着函数($)采用lambda(a - > b)并输出lambda(a - > b),然后下一行我不确定.

但我总是假设功能定义

f :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

必须跟一个带有以f开头的参数的函数,就像我的第一个代码示例一样.

谢谢

lef*_*out 7

中缀应用程序类似于1 + 2f $ x仅仅是(+) 1 2和的语法糖($) f x.无论它们是出现在模式匹配(左侧=)还是出现在表达式中.所以,你的片段是desugar

f :: Int -> Int
f x = (+) x 2

($) :: (a -> b) -> (a -> b)
($) f x = f x
Run Code Online (Sandbox Code Playgroud)

后者也可以写

apply :: (a -> b) -> a -> b
apply f x = f x
Run Code Online (Sandbox Code Playgroud)

语法规则是:如果标识符由字母(可能是数字,在非前导位置)组成,则它被解析为右边所有参数的函数,或者如果没有参数则简单地作为常量值.如果它由任何其他符号组成并且没有被括号括起来,则它被解析为中缀,即desugared,因此左边的任何一个用作第一个参数,而右边的任何一个用作第二个参数.