В Haskell есть много функций, которые эквивалентны, но различны, потому что Applicative
(соответственно Functor
) не был суперклассом Monad
.Например:
return
против pure
ap
против <*>
liftM
против liftA
против fmap
liftM2
, liftM3
и т. Д.против liftA2
, liftA3
и т. д.
mapM
/ forM
против traverse
/ for
mapM_
/ forM_
против traverse_
/ for_
sequence
против sequenceA
mzero
& mplus
(от MonadPlus
) против empty
& <|>
(от Alternative
)
Старые функции с их оригинальными Monad
сигнатурамивсе еще присутствуют, но в новом коде, поскольку было реализовано Applicative-Monad Proposal (AMP) , вы всегда можете использовать Applicative
версии, потому что они немного более общие, то есть вы всегда можетезамените return
на pure
, но не наоборот.