This is the eighth part of my Monad series. See the introduction for a list of all the posts.
You can find the code for this post on GitHub here.
Last month I gave a talk at DDD9 loosely based on this series: Monads! What are they and why should I care.
Note: The talk (and audio) starts at 6 minutes into the video.