我需要澄清(>>=)和(>=>)的区别。
我知道绑定运算符(>>=),但不明白何时使用(>=>)是有用的。请用简单的玩具示例来解释一下。
*Main Control.Monad> :type (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
*Main Control.Monad> :type (>=>)
(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c
我知道绑定运算符(>>=),但不明白何时使用(>=>)是有用的。请用简单的玩具示例来解释一下。
编辑:根据@Thomas的评论进行更正。
f >=> g = \x -> f x >>= g
- BergiwithFile
范围内与之后发生的print
。 - Thomas M. DuBuissonwithX (h >=> p)
和withX h >>= p
之间的惰性差异与>=>
和>>=
之间的差异无关。这就像fmap g $!! fmap f $ x
和fmap (g . f) $!! x
之间的区别一样。 - leftaroundabout