这个功能或模式有名称吗?

Mat*_*ick 16 haskell function typeclass

而不是fmap将函数应用于函数值:

fmap :: Functor f => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

我需要一个函数,其中函子有一个函数,值很简单:

thing :: Functor f => f (a -> b) -> a -> f b
Run Code Online (Sandbox Code Playgroud)

但我找不到一个.

这个模式叫做什么,我将函数函数(或者在应用程序中,或者在monad中)应用于普通值?

我已经实现了它,我只是不太明白我做了什么以及为什么标准库中还没有这样的功能.

ehi*_*ird 19

你不需要Applicative这个; Functor会做得很好:

apply f x = fmap ($ x) f
-- or, expanded:
apply f x = fmap (\f' -> f' x) f
Run Code Online (Sandbox Code Playgroud)

有趣的apply是,实际上是一种概括flip; lambdabotflip将此定义替换为标准Haskell的一个概括,因此这是一个可能的名称,尽管令人困惑.

顺便说一下,经常值得尝试的是Hayoo(它搜索整个Hackage,与Hoogle不同)来查看函数的名称,以及它是否在任何通用包中.在搜索时f (a -> b) -> a -> f b,它会找到flip(Data.Functor.Syntaxfunctors包中)和($#)(从synthesizer包中)作为可能的名称.不过,我可能只是fmap ($ arg) f在使用网站上使用.


Don*_*art 7

正如尼克拉斯所说,这是应用于一些应用函子,以提升价值.

\f a -> f <*> pure a

:: Applicative f => f (a -> b) -> a -> f b
Run Code Online (Sandbox Code Playgroud)

或更一般地(?),使用Category (.)

\f a -> f . pure a

:: (Applicative (cat a), Category cat) => cat b c -> b -> cat a c
Run Code Online (Sandbox Code Playgroud)