我试图理解应用函子的交换定律:
u <*> pure y = pure ($ y) <*> u
让我感到困惑的是,函数 application $ y
,请考虑以下示例:
($ 2) :: (a -> b) -> b
为什么第二个参数被应用而不是第一个?
那是一个操作符部分。几个简单的例子:
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!"]
该部分(:"!")
是 的语法糖\c -> c:"!"
,即它需要一个字符c
并将其添加到字符串之前"!"
。
同样,该部分($ 2)
采用一个函数f
并将其简单地应用于number 2
。
请注意,这与普通的部分应用程序不同:
Prelude> ((/) 2) <$> [1..8]
[2.0,1.0,0.6666666666666666,0.5,0.4,0.3333333333333333,0.2857142857142857,0.25]
在这里,我只是将该函数(/)
应用于一个固定参数 2,即股息。这也可以写为左部分 (2/)
。但正确的部分(/2)
应用2
作为除数来代替。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句