Haskell 绑定多个参数

Haskell 绑定多个参数,haskell,monads,Haskell,Monads,在哈斯克尔,有: (>>=) :: Monad m => m a -> (a -> m b) -> m b 是否有一个函数:(?) 不完全是,但你可以用 bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c bind2 x y f = join $ liftM2 f x y 或者,只使用第一原则(>>=),像这样(在ghci中尝试) Prelude>:设置+t

在哈斯克尔,有:

(>>=) :: Monad m => m a -> (a -> m b) -> m b
是否有一个函数:(?)


不完全是,但你可以用

bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c
bind2 x y f = join $ liftM2 f x y

或者,只使用第一原则(>>=),像这样(在ghci中尝试)

Prelude>:设置+t
前奏曲>让bind2 x y f=x>>=\a->y>>=\b->f a b
bind2::Monad m=>ma->ma1->(a->a1->mb)->mb
前奏曲>让bind2xyf=doamt1->(t->t1->mb)->mb

这就是do符号的含义

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
bind2::(Monad m)=>ma->mb->(a->b->mc)->mc
bind2 ma mb f=do

为什么不使用do符号?@user2407038,因为有时bind更优雅。
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
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