以($)或(>>=)开头的函数应该做什么。我不是在问$或>>=到底是什么意思,但我明白
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开头的参数的函数,就像我的第一个代码示例。
谢谢
发布于 2017-12-28 00:48:57
Infix应用程序,如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语法规则是:如果一个标识符由字母(可能还包括数字,在非主导位置)组成,那么它被解析为一个带有右边所有参数的函数,或者在没有参数的情况下被简单地解析为一个常量值。如果它由任何其他符号组成,并且不被括号所包围,那么它被解析为一个infix,也就是说,将左边的任何位置用作第一个参数,而位于右侧的任何元素都被用作第二个参数。
https://stackoverflow.com/questions/48000209
复制相似问题