在Haskell中,有:
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)
有功能:(?)
bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c
Run Code Online (Sandbox Code Playgroud)
cdk*_*cdk 13
不完全,但你可以使用
bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c
bind2 x y f = join $ liftM2 f x y
Run Code Online (Sandbox Code Playgroud)
或者,只使用第一原则(>> =),像这样(在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
Run Code Online (Sandbox Code Playgroud)
这是符号的意思.
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
Run Code Online (Sandbox Code Playgroud)
这很简单,我甚至可能不会为它定义一个额外的运算符,而是直接使用do notation.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |