Haskell is a language with many characteristics rooted in formal mathematics. Which mathematical topics should I study to gain a deeper appreciation and understanding of the language? I imagine that Abstract Algebra and Category Theory are both good topics to explore, for example.