- Create a new project
`state-monad`* *using the `stack` command with the `simple` template:

stack new state-monad simple

- Open the file
`src/Main.hs`; we will add our code here after the initial `module` declaration.
- Import the following modules:

import Prelude hiding (Either(..)) import Data.Functor import Control.Applicative import Control.Monad

- Now, add the definition for the State Monad. A State Monad will store state
`s` with the monad:

data State s a = State { runState :: s -> (a, s) }

- Now, we will write the
`Functor` instance for the state. Writing the `Functor` instance is easy; we need to transform output `a` with the function `f :: a -> b` and produce `b`:

instance Functor (State s) where fmap f (State stateFunc) = let nextStateFunction ...