2014-02-06 53 views
4

在Haskell中,有:?綁定多個參數

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

是否有一個功能:()

bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c 
+4

我也想要它。 – augustss

+4

爲什麼不使用符號? – user2407038

+0

@ user2407038因爲有時綁定更優雅。 –

回答

5

這是符號的意思。

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

它是如此簡單,我可能不會甚至定義一個額外的操作它,而我只用直接做記號。

13

不完全是,但你可以使用

5

,或者只使用第一個原則(>> =),像這樣(在ghci中試用)

Prelude> :set +t 

Prelude> let bind2 x y f = x >>= \ a -> y >>= \ b -> f a b 
bind2 :: Monad m => m a -> m a1 -> (a -> a1 -> m b) -> m b 

Prelude> let bind2 x y f = do a <- x ; b <- y ; f a b 
bind2 :: Monad m => m t -> m t1 -> (t -> t1 -> m b) -> m b