什么是开始($)
或(>>=)
应该做的功能.我不是要问究竟是什么$
或>>=
意思,但我明白这一点
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)
我假设这意味着函数($)采用lambda(a - > b)并输出lambda(a - > b),然后下一行我不确定.
但我总是假设功能定义
f :: Int -> Int
Run Code Online (Sandbox Code Playgroud)
必须跟一个带有以f开头的参数的函数,就像我的第一个代码示例一样.
谢谢
中缀应用程序类似于1 + 2
或f $ 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,因此左边的任何一个用作第一个参数,而右边的任何一个用作第二个参数.