monad很强大,当有时我们要连续使用多个monad怎么办,例如在scala使用for将多个monad连接起来,这样可以避免使用匹配,如果可以做到的话将是非常方便,而Monad transformers就是出于这样的目的
We have seen how monads can help handling IO
actions, Maybe
, lists, and state. With monads providing a common way to use such useful general-purpose tools, a natural thing we might want to do is using the capabilities of severalmonads at once. For instance, a function could use both I/O and Maybe
exception handling. While a type like IO (Maybe a)
would work just fine, it would force us to do pattern matching within IO
do-blocks to extract values, something that theMaybe
monad was meant to spare us from.
Enter monad transformers: special types that allow us to roll two monads into a single one that shares the behavior of both.