我正在寻找Haskell中的函数或运算符,它实际上是Monad
运算符Applicative
的{{1}}运算符,它应用了monadic动作而不是裸函数,即而不是这个:
<*>
我正在寻找看起来像这样的东西:
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
我无法相信这不是一个标准功能,但我看不到任何匹配的东西。我错过了什么吗?
答案 0 :(得分:6)
这将是另外两个基本monad函数的简单组合,即join
和ap
;因为:
ap :: Monad m => m (a -> b) -> m a -> m b
join :: Monad m => m (m a) -> m a
我们得到:
(join .) . ap :: Monad m => m (a -> m b) -> m a -> m b
以及:
(join .) . (<*>) :: Monad m => m (a -> m b) -> m a -> m b
或者,仅使用绑定运算符,另一个构造将是:
(. (>>=)) . (>>=) :: Monad m => m (a -> m b) -> m a -> m b