Exploring typed language design in Haskell


Prologue: This lecture series was first presented to MSc students and PhD at Università degli Studi dell'Aquila in January 2010, when the speaker, Ralf Lämmel, was hosted by the research team of Prof. Alfonso Pierantonio.


Tutorial (lecture series)

Authors: Ralf Lämmel and Oleg Kiselyov


Acknowledgement

The authors of the tutorial acknowledge collaboration with other parties on subject matter covered. Specifically, we are grateful for joint work with Klaus Ostermann, Simon Peyton Jones, Keean Schupke, and Chung-chieh Shan. We are grateful to all the PhD students from the CS department at Università degli Studi dell'Aquila who served as "guinea pigs" for (parts of) the lecture series in January 2010.


Abstract

The tutorial furnishes the idea that Haskell is a capable sandbox for programming language researchers and engineers---not so much in the obvious sense of Haskell as a continuously evolving language, but rather in the sense of modelling or embedding typed language concepts in Haskell. The tutorial specifically emphasizes the role of Haskell's type classes in this context. At the heart of the tutorial lies the discipline of type-level programming which enables applications such as embedding extensible records or an object system in Haskell. The tutorial presents different options for type-level programming: multi-parameter type classes with and without overlapping instances; indexed type families, possibly with associated types. The endeavour for an object system in Haskell is particularly advanced in that, initially, Haskells appears to be suboptimally suited for OO programming, but suddenly the incorporation of type-level programming enables an object system with rich expressivity and variations possible, e.g.: structural and nominal subtyping with type inference, co- and contravariance, deep subtyping, and multiple inheritance.


List of lectures

The tutorial lasts about 7 hours (depending on background, and hence, speed of presentation).


Further links


maintained by Ralf Lämmel (Email: rlaemmel@acm.org)