I’ve worked on two non-trivial language implementations in Haskell (Idris 1 and Cryptol).
In addition to monad transformers, as @Kleidukos mentioned, I would also make sure to be aware of the differences between and use cases for String
vs ByteString
vs Text
. It would be useful to have experience with parsing technology (Happy/Alex and/or Megaparsec) and a pretty-printing library. Depending on the architecture of the compiler, you may need to know how to write concurrent systems - for this, Simon Marlow’s book is excellent. Finally, you should understand GHC’s exceptions mechanism, and how to catch exceptions in IO. Aside from this, I don’t think there’s much Haskell-specific going on in a language implementation, and it would be more important to study up on things like type checking algorithms, code generation techniques, intermediate representations, and static analysis. These fundamentals are not Haskell-specific, but they are likely to be relevant for a language implementation job, depending on the specifics of the language in question.