Language and Program Design for Functional Dependencies

Abstract:

Eight years ago, functional dependencies, a concept from the theory
of relational databases, were proposed as a mechanism for avoiding
common problems with multiple parameter type classes in Haskell.
In this context, functional dependencies give programmers a means
to specify the semantics of a type class more precisely, and to obtain
more accurate inferred types as a result. As time passed, however,
several issues were uncovered---both in the design of a language to
support functional dependencies, and in the ways that programmers
use them---that led some to search for new, better alternatives.

This paper focusses on two related aspects of design for functional
dependencies: (i) the design of language/type system extensions that
implement them; and (ii) the design of programs that use them. Our goal
is to clarify the issues of what functional dependencies are, how they
should be used, and how the problems encountered with initial proposals
and implementations can be addressed.