Expression Problem

Speaker: Giuseppe Scopelliti, The Telegraph

Define a datatype by cases, where one can add new cases to the datatype and new functions over the datatype, without recompiling existing code, and while retaining static type safety (e.g. no casts)