This is **very** interesting question!
When we recruit people to our company (we are working in Haskell everyday), we are basing on some classification between basic, intermediate and advanced stuff. These sections are shown below. I would love to hear what others are thinking about it and what from the below stuff would be widely considered as "basic Haskell knowledge", which would allow for full-time basic Haskell work.
Basics
- type classes
- instances
- functors, applicatives, monads, etc (http://www.haskell.org/haskellwiki/Typeclassopedia)
- functional dependencies
- Patterson condition
- Coverage condition
- Liberal coverage condition
- monad transformers
Intermidiate
- lens
- arrows
- free monads
- GADTs
- Type families
- closed type families
- existential datatypes
- RankNTypes
- church encoding
Advanced
- templateHaskell
- generics
- continuations
-
delimited continuations