Haskell 用于将函数从 monad 应用到值的运算符或函数?
Haskell operator or function for applying function from monad to a value?
我正在 Haskell 中寻找一个函数或运算符,它实际上是 Monad
等效于 Applicative
运算符 <*>
的函数或运算符,它应用一个单子动作而不是一个裸函数,而不是这个:
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
我正在寻找看起来像这样的东西:
... :: Monad m => m (a -> m b) -> m a -> m b
我不敢相信这不是标准函数,但我看不到任何匹配的东西。我错过了什么吗?
这将是另外两个基本 monad 函数的简单组合,即 join
and 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
我正在 Haskell 中寻找一个函数或运算符,它实际上是 Monad
等效于 Applicative
运算符 <*>
的函数或运算符,它应用一个单子动作而不是一个裸函数,而不是这个:
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
我正在寻找看起来像这样的东西:
... :: Monad m => m (a -> m b) -> m a -> m b
我不敢相信这不是标准函数,但我看不到任何匹配的东西。我错过了什么吗?
这将是另外两个基本 monad 函数的简单组合,即 join
and 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