This is a collection of links I found to be useful when learning about various theoretical computer science and abstract algebra concepts. It’s largely made for myself, but I’ve structured it so that anybody should be able to make use of it. They assume a basic knowledge of functional programming (if you’re at Edi, that implies you’ve taken inf1a-fp at least), but I’ve tried to note where extra learning is necessary.

Category Theory

You’ve probably heard that Haskell is based around Category Theory. CT is a really abstract mathematical field, and isn’t usually taught at undergrad. However, the underlying concepts are often deceptively simple, and with the right frame of mind, you could easily learn enough to massively improve your Haskell skills.

Lambda Calculus and other parts of Theoretical Computer Science

This section focuses mainly on topics related to the theory of computation. Prior knowledge is basic/intermediate Haskell and logic notation (again, if you passed inf1a at Edinburgh you’re ready)

Monads etc.

Ah, monads. The “just trust me dude” of Haskell, at least from the perspective of a beginner. While I recommend learning general category theory first (it’s what I did!) to fully understand them, it’s handy to know how to use them regardless.

Practical Haskell

As much as I like messing around with abstract concepts, it’s occasionally useful to compute things. After all, what use is a computer if you can’t use it to compute things? The following is a collection of links that should help you in writing more idiomatic Haskell and in using GHC to your full advantage.

Type Theory

Type theory is a very active area of interest in theoretical CS as of the time of writing. It plays a fundamental role in the theory of computation and can allow us to reason about code in a very rigorous manner (something that is very useful for compiler devs). It’s a natural link between Haskell, Category Theory and the various logic algebras.

Topology, Homotopy and Homology

These closely related fields of maths deal mainly with “manifolds”, or continuous surfaces in spaces. There’s many interesting results that can be widely applied to different fields (as exemplified by HoTT above). These links should serve as a decent primer into the various topics, and provide good intuition for further study.

Combinatorial Game Theory

Fun Things