我在Hoogle上找不到任何东西,但有一个标准函数或运算符,其签名如下:
func :: (a -> b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
即给出两个函数f和g一个元素x作为参数计算f x (g x)?
Ale*_*ing 10
你正在寻找的功能是(<*>).为什么?嗯,确实(<*>)有一个更通用的类型:
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
但请考虑我们可以专注f于(->) r,它有一个Applicative实例:
(<*>) :: (->) r (a -> b) -> (->) r a -> (->) r b
Run Code Online (Sandbox Code Playgroud)
...然后我们可以重新排列类型,因此它->是中缀而不是前缀,因为它通常是:
(<*>) :: (r -> a -> b) -> (r -> a) -> (r -> b)
Run Code Online (Sandbox Code Playgroud)
...这与您的签名模数字母重命名相同.
这工作,因为函数类型,(->)具有的情况下Functor,Applicative和Monad,这是惯用称为"读者".这些实例为所有参数设置了一个额外的参数,这正是你的函数所做的.
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |