Working developer's definition of Monad

Published by @alf on 2016-08-22

One day, there was an interview and I’ve got a question, “What is a working Scala developer’s definition of a Monad?”

Now I want you to come up with your own definition before we proceed.

We can focus on different aspects of monads in order to come up with a good answer: the question mentions Scala, so there might be something Scala-specific about monads, it mentions “a working developer” — supposedly, as opposite to a mathematician — so we’ll need to see what matters for a developer, and why the mathematician’s definition might not suit us; in fact, Scala monads are not exactly monads in the mathematical sense, so we’ll need to look at that closer.

Syntax Sugar PoV

Let’s start with Scala: the main reason we care about monads in Scala is that there’s a syntax sugar for them (as explained in Wadler:1992, any monad can be used in for-comprehensions).

syntax sugar example

Now, a syntax sugar means that compiler will convert (desugar) the for loop into something less fancy. How does it do that? Scala documentation (Scala-yield-FAQ) says, “Scala’s “for comprehensions” are syntactic sugar for composition of multiple operations with foreach, map, flatMap, filter or withFilter. Scala actually translates a for-expression into calls to those methods, so any class providing them, or a subset of them, can be used with for comprehensions.” The Scala Programming Language by Martin Odersky explains that in further details:

(Note the “Things become a bit more involved if the left hand side of the generator is an arbitrary pattern pat instead of a single variable or a tuple.” bit — but I digress)

We can play with the desugared view by using REPL and the following mode:

Monad Laws PoV

That Pesky Future

The associativity law falls apart in case of the Future monad. Is it really a problem? Can it bite?

Wadler:1992 Scala-yield-FAQ


Here’s a talk on monads in Scala and their role in for-comprehensions, by Dan Rosen. I found it to be a very good explanation of both monads for real-life, and the constructs behind for comprehensions :

There’s a “monads in Scala” talk,, which is way too mathematical for our purposes.