In my opinion, the only way to understand monads is to use them. They&#x27;ll be a little weird at first, but the type system will guarantee you&#x27;re using them in the right way. The thing is that you don&#x27;t really need to understand how a given monad works under the hood; you just need to know how it&#x27;s going to act when you use it. For example, I couldn&#x27;t write the State monad instance right now, not without quite a bit of puzzling anyway. But I use the State monad all the time, because I know how it&#x27;s going to act:<p><pre><code>    addToState :: Int -&gt; State Int ()
    addToState number = do
      currentState &lt;- get
      put $ number + currentState
</code></pre>
How is this working exactly? Well who cares. I know that once this function is called, my state will have been incremented by the given amount.