使用两个参数绑定运算符(=<&lt ;;)

时间:2014-03-12 05:45:07

标签: haskell

无法想出更好的主题,不幸......抱歉。

我有一个函数,它接受两个纯参数并返回一个monadic值。 我有两个monadic值可以加入其中。 这可能是我想念的愚蠢。 我通常会使用(=<<),如果它只是一个参数,但现在我被困在两个。

所以我需要一个具有此类签名的函数

(a1 -> a2  -> m b) -> m a1 -> m a2 -> m b

Hoogle没有给我任何东西。 我知道我可以使用'做'符号,但我想知道这是否可以没有? 是否可以使用绑定操作符来这样:

(function =<< value1) =<< value2

我以为&#39; liftM2&#39;可能有用但它需要一个返回纯值的函数。

谢谢。

2 个答案:

答案 0 :(得分:7)

一种可能的解决方案是将join :: Monad m => m (m a) -> m aliftM2结合使用:

join $ liftM2 function value1 value2

答案 1 :(得分:1)

没有这样的功能,但定义一个功能是微不足道的。

bind2 f m n = do
     m' <- m
     n' <- n
     f m' n'