It all started with my boss coming to me – “I don’t like EitherT”, he said. “All right, you should be using MonadError anyway” – I replied. “Oh, I don’t like that even more”. So I decided to help him out and everything went south. I ended up wrestling `Free` and `Cofree`, fighting stack overflows, benchmarking trampolines with flame graphs and, finally, rolled up my own monad which I call `Sealed`. I promise I’ll put a GitHub link, but for now I am not really proud of it. My boss and my company love it, though. So I thought I could share with you how to use monads to make your boss happy.
Topics I’ll cover:
– monadic error handling and flow control
– explore design and implementation of various existing monads in Scala,
– learn how to design a lawful monad from scratch and test it,
– how to deal with various issues that arise in the process: stack safety, performance implications,
– benchmarking with JMH and flame graphs