&gt; As for frustration working with Scala - I didn&#x27;t notice, despite working on a few projects for a few years now.<p>TBH, if you&#x27;re using Scala as a slightly better Java&#x2F;C#, then you&#x27;re probably going to get a lot of mileage out of it. As someone who really would prefer Haskell, the problem I find is that Scala has all these <i>tantalizing</i> features that you <i>really want to use</i> but which turn out to be broken in subtle ways. Anyone who&#x27;s used scalaz will know what I mean.<p>The absurdity of &quot;for { ... } yield&quot; notation is one of the first things that springs to mind. (Given that &quot;return&quot; is <i>NOT</i> special or magical in any way in a Monad and <i>can</i>, in fact, meaningfully be repeated in the same function.).<p>The other major thing is that you can arbitrarily (and subtly!) do side effects while in &quot;monadic&quot; notation. That nullifies most of the advantages of <i>having</i> a do&#x2F;for-yield notation in the first place.<p>There&#x27;s also the stack overflow issues that are rampant if you actually try to use monads seriously in Scala, etc. etc. (This boils down to the JVM not having tail-call elimination.)<p>Scala is basically a cocktease when it comes to FP features. It promises loads, but doesn&#x27;t really deliver. These days, I&#x27;d actually probably prefer C#&#x2F;Kotlin&#x2F;Ceylon over Scala[1] because at least they don&#x27;t lead you astray in this way. (Obviously, I&#x27;d prefer to rewrite everything in Haskell, but we have an actual existing&#x2F;working system written in Scala to support, so...)<p>TL;DR: These days we&#x27;re using Scala as a &quot;better Java&quot; and if that&#x27;s what you want, then you probably won&#x27;t be disappointed. If you&#x27;re looking for FP-as-it-should-be then you <i>will</i> be disappointed.<p>[1] Assuming we&#x27;re <i>only</i> talking about language, not the wider ecosystem.