How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Relational database theory
Monad transformers and modular interpreters
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Qualified types: theory and practice
Qualified types: theory and practice
Simplifying and improving qualified types
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
A relational model of data for large shared data banks
Communications of the ACM
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Functional Programming with Overloading and Higher-Order Polymorphism
Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques-Tutorial Text
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
High-level views on low-level representations
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Theory of Relational Databases
Theory of Relational Databases
Strongly typed memory areas programming systems-level data structures in a functional language
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
Understanding functional dependencies via constraint handling rules
Journal of Functional Programming
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Type checking with open type functions
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
A Haskell Hosted DSL for Writing Transformation Systems
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
Type-safe observable sharing in Haskell
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Instance chains: type class programming without overlapping instances
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
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.