Computational monad is a concept that became important for programming during the recent two decades. Most distinctively it has been used in the design of Haskell programming language. Monads are the ingredient needed to bridge the gap between mathematical (pure) functions (such as + or exponential) and program functions (such as
malloc or exception throwing). Roughly:
Like in object-oriented programming any self-sustained concept is to be abstracted in a class, in Haskell any effect is to be abstracted in a monad.
Starting from this programming perspective in this course we are going to explore at depth the theory of monads, their significance to programming and beyond. We are going to establish links to concurrency, probabilistic programming, continuation passing style programming, etc. We are going to see that many concepts and ideas in programming can be formulated and understood in terms of monads. We are also going to explore the recently emerged paradigm of effect handling.