Tips in avoiding Haskell Success at all cost

tl;dr: Few days ago there were about 20 job offer for Haskell. In only one day! How is that possible? As a real haskeller, I find this situation unbearable!

After all, we must avoid success at all cost. And I’ll help SPJ achieve this honorable goal.

Prevent Interest from beginner

Imagine a situation were you see people demonstrating some interest in learning Haskell.

Quick! Prevent them from going further.

If they come from the dynamic (uni-typed) languages like Python, Javascript…:

Haskell? A statically typed language??? Hmm… You mean like C and Java?

Such a remark should immediately shut down any interest in Haskell.

If they want to produce application with them:

Haskell? Isn’t it only a language for student! I don’t think it is useful for REAL WORLD applications!

If they just want to learn something new:

Haskell? Ah yes, I remember, mostly they only have the equivalent of Java interfaces and they stopped there. They don’t even have classes!!!! Can you imagine? I don’t even speak about class inheritance.

We’re in 2016! And they don’t even support basic Object Oriented Programming. What a joke!

If they love low level programming:

Haskell? Ah yes, I heard that lazyness make it impossible to think about code complexity and generally cause lot of space leaks.

And if it is not enough:

Haskell? Ah yes. I’m not fan of their Stop the World GC.

If they come from LISP and the statically typed language remark wasn’t enough. Try to mention the lack of macros in Haskell. Don’t mention template Haskell or even less Generics and all recent progress in GHC.

Make it difficult to install

Many hints there:

Send them on another compiler than GHC

Explain that they should never use a binary distribution of GHC! And they must compile it manually! It might not stop them but it will make the installation process much more tedious.

Lie! Explain there is a severe security issue with latest tools. Explain they must use cabal-install 1.18 or older.

Also explain them that in order to be able to handle lib dependencies correctly they MUST first learn Nix! Never talk about stack, cabal freeze, … While Nix is great, forcing new user completely alien to all these concepts to first learn it before starting to write their first line of code can greatly reduce their enthusiasm. Bonus point if you make them believe you can only program in Haskell on NixOS.

Make it difficult to learn

Make new comers feel dumb

The very first thing to do is to explain how Haskell is so easy to learn. How natural it is for everybody you know. And except someone you always considered very dumb, everybody was very productive in Haskell in few hours.

Use vocabulary alien to them as much as possible. Here is a list of terms you should use in the very first minutes of your description of Haskell:

catamorphism (bonus if you mention that the word come from the Greek κατα for catastrophe, that way you’ll look like a snob and you also use the word catastrophe in a Haskell context).

Monad! Of course you should use it ASAP! And explain they are exactly like potatoes or bananas shaped chairs. Double bonus if you explain that monad are really simple as they are just a monoid in the category of endofunctors.

This nice example should overflow the number of new concepts a Haskell newcomer should deal with:

Language extensions. Each extension can take a lot of time to be explained.

Strange notations:

:<|>

'[] instead of []

Proxy

Immediate usage of $

deriving ha ha! You’ll need to explain typeclasses first!

the definition for getItemById

Of course use the most of your energy explaining the language extensions first. Use a great deal of details and if possible use as much as possible references to Category Theory. You’ll get bonus points if you mention HoTT! Double bonus points if you explain that understanding all details in HoTT is essential to use Haskell on a daily basis.

Explain that what this does is incredible but for the wrong reasons. For example don’t mention why instance ToJSON Item is great. But insist that we achieved to serve a JSON with extreme elegance and simplicity. Keep insisting on the simplicity and forgot to mention type safety which is one of the main benefit of Servant.

If you’re afraid that this example might be too close to a real world product, you can simply use some advanced lenses examples: