Summary: Why Dependent Types Matter
Thorsten Altenkirch Conor McBride
The University of Nottingham
The University of St Andrews
We exhibit the rationale behind the design of Epigram, a dependently typed programming language and
interactive program development system, using refinements of a well known program--merge sort--as a
running example. We discuss its relationship with other proposals to introduce aspects of dependent types into
functional programming languages and sketch some topics for further work in this area.
Types matter. That's what they're for--to classify data with respect to criteria which matter: how they should
be stored in memory, whether they can be safely passed as inputs to a given operation, even who is allowed to
see them. Dependent types are types expressed in terms of data, explicitly relating their inhabitants to that data.
As such, they enable you to express more of what matters about data. While conventional type systems allow
us to validate our programs with respect to a fixed set of criteria, dependent types are much more flexible, they
realize a continuum of precision from the basic assertions we are used to expect from types up to a complete
specification of the program's behaviour. It is the programmer's choice to what degree he wants to exploit the