How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
On the complexity of ML typeability with overloading
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
ESOP'92 Symposium proceedings on 4th European symposium on programming
Qualified types: theory and practice
Qualified types: theory and practice
Type Classes with Functional Dependencies
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
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
Journal of Functional Programming
Type checking with open type functions
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Language and program design for functional dependencies
Proceedings of the first ACM SIGPLAN symposium on Haskell
Experience report: using hackage to inform language design
Proceedings of the third ACM Haskell symposium on Haskell
PADL'05 Proceedings of the 7th international conference on Practical Aspects of Declarative Languages
Experience report: using hackage to inform language design
Proceedings of the third ACM Haskell symposium on Haskell
How to make ad hoc proof automation less ad hoc
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Proceedings of the seventh ACM SIGPLAN workshop on Generic programming
Mutual exclusion by interpolation
FLOPS'12 Proceedings of the 11th international conference on Functional and Logic Programming
Formalizing address spaces with application to Cuda, OpenCL, and beyond
Proceedings of the 6th Workshop on General Purpose Processor Using Graphics Processing Units
Closed type families with overlapping equations
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.00 |
Type classes have found a wide variety of uses in Haskell programs, from simple overloading of operators (such as equality or ordering) to complex invariants used to implement type-safe heterogeneous lists or limited subtyping. Unfortunately, many of the richer uses of type classes require extensions to the class system that have been incompletely described in the research literature and are not universally accepted within the Haskell community. This paper describes a new type class system, implemented in a prototype tool called ilab, that simplifies and enhances Haskell-style type-class programming. In ilab, we replace overlapping instances with a new feature, instance chains, allowing explicit alternation and failure in instance declarations. We describe a technique for ascribing semantics to type class systems, relating classes, instances, and class constraints (such as kind signatures or functional dependencies) directly to a set-theoretic model of relations on types. Finally, we give a semantics for ilab and describe its implementation.