多参数monadic绑定

Kwa*_*rtz 3 monads haskell

是否存在>>=两个参数的函数?就像是

bind2 :: m a -> m b -> (a -> b -> m c) -> m c
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 5

我不知道你可以使用哪些聪明的组合器来构建标准库,但是冒着明显的风险,很容易实现自己:

bind2 :: Monad m => (a -> b -> m c) -> m a -> m b -> m c
bind2 f ma mb = do
  a <- ma
  b <- mb
  f a b

> bind2 (\a b -> [a,b]) [1,2,3] [4,5,6]
[1,4,1,5,1,6,2,4,2,5,2,6,3,4,3,5,3,6]
Run Code Online (Sandbox Code Playgroud)

  • luqui 的评论似乎给出了一个明智的组合。 (2认同)