2015-08-29 63 views
3

有兩個參數的函數>>=嗎?喜歡的東西多參數monadic綁定

bind2 :: m a -> m b -> (a -> b -> m c) -> m c 
+2

'Control.Monad.liftM2' - 帶有不同(通常更方便)順序的參數 – luqui

+1

@luqui:'liftM2'採用類型'a - > b - > c'的函數,而這個假設的'bind2'採用類型'a - > b - > mc'的函數。 – icktoofay

+9

哎呀,你是對的,馬虎閱讀。不幸的是,沒有。你可以使用'join(liftM2 op x y)'。 – luqui

回答

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] 
+1

luqui的評論似乎給了一個合理的組合。 – dfeuer