If your goal is to write software that serves a purpose, the best thing you can do is start the project and get feedback from users. If you can write an interactive console application using product and sum types, you probably already know enough! Everything else is best learned through concrete experience.
If your goal is to learn advanced topics, well, that’s a different story.
For what it’s worth, I consider myself a competent Haskeller, and here are some areas of knowledge I have that I think contribute to that feeling. Note that knowledge in almost all of these domains is best gained through the school of hard knocks.
- build tools (one of: stack, cabal)
- language extensions: which ones are safe and easy, which ones are more scary (starting point: GHC2021)
- how haskell libraries can depend on system libraries (generally C libraries like libz), and how to handle that.
- how to look things up (all of: Hoogle, Cabal user guide, GHC user guide)
- how to manage Haskell dependencies (one of: stack, cabal lock files, Nix)
- use of hlint and a code formatter (one of: ormolu, fourmolu, stylish-haskell)
- functional programming style: use of functions for abstraction, encapsulation, generalization
- use of product and sum types: modeling the domain, choosing the right level of explicitness, using newtypes
- test libraries and test strategies
- choosing Haskell dependencies: bog-standard choices or the ones I have a personal preference towards
- use of standard library abstractions: Functor, Applicative, Monad, Foldable, Traversable, IO, ReaderT, (not) StateT
- exception handling, particularly so-called asynchronous exceptions (though I am shaky here)
- profiling (see Haskell Optimization Handbook)
Deep areas that I may never learn about:
- Yoneda-level category theory
- Type-checking theory
- GC optimization
Special mention of things I have managed to avoid learning so far, but some people enjoy or need, and i’ll probably learn when my personal thunk gets forced:
- use of streaming libraries (streamly, conduit, pipes)
- use of lens or other optics libraries
- use of effects libraries