【问题标题】:Haskell operator or function for applying function from monad to a value?用于将函数从 monad 应用于值的 Haskell 运算符或函数?
【发布时间】:2016-10-20 12:42:42
【问题描述】:

我正在 Haskell 中寻找一个函数或运算符,它实际上是 Monad 等效于 Applicative 运算符 <*>,它应用单子动作而不是裸函数,而不是这个:

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

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

... :: Monad m => m (a -> m b) -> m a -> m b

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

【问题讨论】:

    标签: haskell monads


    【解决方案1】:

    这将是另外两个基本单子函数的简单组合,即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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2020-03-09
    • 2014-05-17
    相关资源
    最近更新 更多