Eliminating array bound checking through dependent types
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Cayenne—a language with dependent types
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Dependent types in practical programming
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
From fast exponentiation to square matrices: an adventure in types
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Implicit parameters: dynamic scoping with static types
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Domain specific embedded compilers
Proceedings of the 2nd conference on Domain-specific languages
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Type classes with more higher-order polymorphism
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
A lightweight implementation of generics and dynamics
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Guarded recursive datatype constructors
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Singleton, Union and Intersection Types for Program Extraction
TACS '91 Proceedings of the International Conference on Theoretical Aspects of Computer Software
Faking it Simulating dependent types in Haskell
Journal of Functional Programming
de Bruijn notation as a nested datatype
Journal of Functional Programming
Student paper: HaskellDB improved
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Combining programming with theorem proving
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Simple unification-based type inference for GADTs
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lightweight Static Capabilities
Electronic Notes in Theoretical Computer Science (ENTCS)
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
A type-preserving compiler in Haskell
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Complete and decidable type inference for GADTs
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages
Journal of Functional Programming
Singleton types here, singleton types there, singleton types everywhere
Proceedings of the 4th ACM SIGPLAN workshop on Programming languages meets program verification
Dependent types for low-level programming
ESOP'07 Proceedings of the 16th European conference on Programming
Parametricity and dependent types
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Automated termination proofs for haskell by term rewriting
ACM Transactions on Programming Languages and Systems (TOPLAS)
Secure distributed programming with value-dependent types
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
TLDI '12 Proceedings of the 8th ACM SIGPLAN workshop on Types in language design and implementation
The right kind of generic programming
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
Equality proofs and deferred type errors: a compiler pearl
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
The right kind of generic programming
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
System FC with explicit kind equality
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hasochism: the pleasure and pain of dependently typed haskell programming
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Hi-index | 0.00 |
Haskell programmers have been experimenting with dependent types for at least a decade, using clever encodings that push the limits of the Haskell type system. However, the cleverness of these encodings is also their main drawback. Although the ideas are inspired by dependently typed programs, the code looks significantly different. As a result, GHC implementors have responded with extensions to Haskell's type system, such as GADTs, type families, and datatype promotion. However, there remains a significant difference between programming in Haskell and in full-spectrum dependently typed languages. Haskell enforces a phase separation between runtime values and compile-time types. Therefore, singleton types are necessary to express the dependency between values and types. These singleton types introduce overhead and redundancy for the programmer. This paper presents the singletons library, which generates the boilerplate code necessary for dependently typed programming using GHC. To compare with full-spectrum languages, we present an extended example based on an Agda interface for safe database access. The paper concludes with a detailed discussion on the current capabilities of GHC for dependently typed programming and suggestions for future extensions to better support this style of programming.