As I am learning Haskell, I see that there is a lot of language extensions used in real life code. As a beginner, should I learn to use them, or should I avoid them at all cost?
But be sure to enable them intentionally -- only when you decide you need them.
Do this on a per-module basis via {-# LANGUAGE Rank2Types #-} (for example).