是否有一个计算`fx(gx)`的标准函数?

msc*_*idt 4 haskell

我在Hoogle上找不到任何东西,但有一个标准函数或运算符,其签名如下:

func :: (a -> b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

即给出两个函数fg一个元素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,ApplicativeMonad,这是惯用称为"读者".这些实例为所有参数设置了一个额外的参数,这正是你的函数所做的.


Gur*_*las 9

f <*> g⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

请参阅https://wiki.haskell.org/Pointfree.