无法想出更好的主题,不幸......抱歉。
我有一个函数,它接受两个纯参数并返回一个monadic值。 我有两个monadic值可以加入其中。 这可能是我想念的愚蠢。 我通常会使用(=<<),如果它只是一个参数,但现在我被困在两个。
所以我需要一个具有此类签名的函数
(a1 -> a2 -> m b) -> m a1 -> m a2 -> m b
Hoogle没有给我任何东西。 我知道我可以使用'做'符号,但我想知道这是否可以没有? 是否可以使用绑定操作符来这样:
(function =<< value1) =<< value2
我以为&#39; liftM2&#39;可能有用但它需要一个返回纯值的函数。
谢谢。
答案 0 :(得分:7)
一种可能的解决方案是将join :: Monad m => m (m a) -> m a
与liftM2
结合使用:
join $ liftM2 function value1 value2
答案 1 :(得分:1)
没有这样的功能,但定义一个功能是微不足道的。
bind2 f m n = do
m' <- m
n' <- n
f m' n'