我试图理解应用仿函数的交换法则:
u <*> pure y = pure ($ y) <*> u
Run Code Online (Sandbox Code Playgroud)
让我困惑的是,函数应用程序$ y,请考虑以下示例:
($ 2) :: (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)
为什么第二个参数不应用于第一个?
这是一个操作员部分.一些简单的例子:
Prelude> (/2) <$> [1..8]
[0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0]
Prelude> (:"!") <$> ['a'..'e']
["a!","b!","c!","d!","e!"]
Run Code Online (Sandbox Code Playgroud)
该部分(:"!")是语法糖\c -> c:"!",即它需要一个字符c并将其预先添加到字符串中"!".
同样,该部分($ 2)采用一个函数f并简单地将其应用于数字2.
请注意,这与普通的部分应用程序不同:
Prelude> ((/) 2) <$> [1..8]
[2.0,1.0,0.6666666666666666,0.5,0.4,0.3333333333333333,0.2857142857142857,0.25]
Run Code Online (Sandbox Code Playgroud)
在这里,我只是将函数(/)应用于一个固定的参数2,即被除数.这也可以写成左侧部分 (2/).但是正确的部分(/2)适用2于除数.
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |