It is intimidating indeed.  The unfortunate fact today is that you must understand and use several language extensions to write real production Haskell code.  On the plus side, perhaps the right way to get started is to write everything out longhand and then when you find yourself asking &quot;Man I wish the compiler could do all of this for me&quot; then you&#x27;ll know what extension to enable.  :)<p>Many extensions (ExistentialQuantification, Rank2Types, RankNTypes, ScopedTypeVariables, TemplateHaskell) are necessary for writing certain types of code in Haskell.  I would not be surprised at all to see them folded into the next official version of the Haskell language.<p>Others are very convenient but relatively benign syntax sugar (RecordWildCards, TupleSections, OverloadedStrings, LambdaCase, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable).  These extensions can obliterate huge amounts of boilerplate that you&#x27;d need to write otherwise.<p>Others are more experimental and will remain as extensions for a while.<p>I believe I heard that the Haskell Prime effort is going to start again, and a new version of the language will integrate the most important and mature extensions, but I&#x27;m not following very closely.  <a href="https:&#x2F;&#x2F;prime.haskell.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;prime.haskell.org&#x2F;</a>