The stigma around Haskell is quite unfortunate. Most complaints that I've heard leveled at Haskell are variations of "it's too academic". Given that those complaints usually come up when one is tackling abstractions like Functors, Applicatives and Monads, it would seem that the true sentiment is that "Haskell is too abstract".<p>Interestingly, I have yet to hear someone complain about abstractions like Collection, Stack, Dictionary, or looking at the ever popular OOP abstractions Class and Method.<p>Why is it that OOP is widely accepted[1], and yet Haskell-like FP has yet to take off? Well, I think I have an explanation for why this is.<p>The abstractions commonly used in Haskell are perhaps a bit "more abstract" than those seen in most OOP programming. Most people can intuit the value of collections/classes/etc., and those that can't are pushed in the right direction by the majority of the industry.<p>Compare the situation of popular imperative languages to that of Haskell: the utility of the former is easily acknowledged and has the support of the industry, whereas the latter is harder to fully appreciate without investing some time and has the industry actively suggesting that the abstractions are useless.<p>Haskell-like FP is, unfortunately, where OOP probably was when it was still "the new thing". "Why would anyone use this? Classes, interfaces, methods, messages... Too academic!"<p>And then OOP picked up momentum as people discovered the utility of encapsulated state, programming to an interface (instead of an implementation), the ability to isolate the System Under Test via mock objects... And then those that tasted the benefits worked really, really hard to shift the mindshare of the industry to accept these abstractions as "good things".<p>I hope Haskell et al will get there some day. The thing is, ideas like Monads are incredibly useful - just as useful as any of the more popular abstractions. They're just one more tool in the toolbox - if you don't know them, you might be missing out.<p>In an attempt to dispel the myth that abstractions common in Haskell are academic and useless for professional programming, I would ask one thing of you: please, please, please watch Tom Stuart's talk "Refactoring Ruby with Monads" (given at Barcelona Ruby Conference 2014): <a href="https://www.youtube.com/watch?v=J1jYlPtkrqQ" rel="nofollow">https://www.youtube.com/watch?v=J1jYlPtkrqQ</a><p>The abstractions are useful. Yes, just like any of the abstractions that you may have already mastered, they do take time to learn. It's an investment. I know the payoff might not be immediately obvious, but I promise that it's right around the corner. There's a practical, pragmatic reason Haskell is being used to great effect at places like ThoughtBot, Facebook, Skedge.me, and more.<p>[1] This is almost a given now: recruiters have often quizzed along the lines of "why is OOP a superior paradigm?"