I think that Haskell has maybe done a bit of a disservice by making so much hay about using monads for side effects. That&#x27;s super-important in the context of Haskell, of course, but it gives the unfortunate and false impression that that&#x27;s what they&#x27;re really about.<p>I don&#x27;t know that I&#x27;m feeling up to banging out a concrete example in Scheme, but I&#x27;d strongly encourage anyone who&#x27;d like to see monads being put to good use outside the Haskell space to take a look at the .NET ecosystem.  Monads are the soul of LINQ, and F#&#x27;s workflows are essentially just monads wearing Groucho glasses.<p>For a concrete example of where they can be useful, let&#x27;s say you&#x27;ve got the following LINQ query (C# code):<p><pre><code>  var sum = Enumerable.Range(1, 10000)
                      .Select(SomeInterestingCalculation)
                      .Where(SomeInterestingPredicate)
                      .Sum();
</code></pre>
and you want to parallelize it. It&#x27;s pretty easy to do because some clever folks have already done all the hard work and encapsulated the whole mess in an easy-to-use package:<p><pre><code>  var sum = Enumerable.Range(1, 10000)
                      .AsParallel()
                      .Select(SomeInterestingCalculation)
                      .Where(SomeInterestingPredicate)
                      .Sum();</code></pre>