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