Introduction
In the previous chapter, we looked at Functor, Applicative, and monads. In this chapter, we will look at State Monad, a monad where we can store a state and modify it. Once we understand monad, we will understand that we can implement a monad (or an Applicative) for a specific purpose.
It is very likely that a situation will arise where we would like to combine two monads to make a single monad. For example, consider a parser monad, Parser a
and a State Monad State s a
(where s
is the state and a
is the output of the parser). If we also would like to maintain a state along with the parsing output, then we can combine them together with Parser (State s a)
. With this, now, we can either operate in the outer Parser
monad or internal State s a
monad.
Let's take an example of IO
monad with Maybe
:
foo :: IO (Maybe Int) foo = Just 10 bar :: IO (Maybe Int) bar = Nothing add :: IO (Maybe Int) -> IO (Maybe Int) -> IO (Maybe Int) add xfoo ybar = do -- We...