用于将函数从monad应用于值的Haskell运算符或函数?

时间:2016-06-18 23:28:08

标签: haskell monads

我正在寻找Haskell中的函数或运算符,它实际上是Monad运算符Applicative的{​​{1}}运算符,它应用了monadic动作而不是裸函数,即而不是这个:

<*>

我正在寻找看起来像这样的东西:

(<*>) :: Applicative f => f (a -> b) -> f a -> f b

我无法相信这不是一个标准功能,但我看不到任何匹配的东西。我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

这将是另外两个基本monad函数的简单组合,即joinap;因为:

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