Understanding monads
appliedscala.com