I never said object-orientation and functional programming are opposites. (You can use objects to compute mathematical functions.) And, for that matter, imperative and functional programming aren&#x27;t opposites either. (You can use imperative procedures to compute mathematical functions.) See: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11180173" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11180173</a> .<p>The awkwardness I&#x27;m talking about comes primarily from the non-orthogonality of Scala&#x27;s features. For instance, there are situations where subclasses and implicits are both reasonable alternatives for a given programming task. On the other hand, in ML and Haskell, it is often clear which language feature is the right tool for the job.