Partial polymorphic type inference and higher-order unification
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Type inference in a database programming language
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
A record calculus based on symmetric concatenation
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type inference for record concatenation and multiple inheritance
Information and Computation
A polymorphic record calculus and its compilation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Cayenne—a language with dependent types
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Implementing typed intermediate languages
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Domain specific embedded compilers
Proceedings of the 2nd conference on Domain-specific languages
Inductive Definitions in the system Coq - Rules and Properties
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
Generic Programming within Dependently Typed Programming
Proceedings of the IFIP TC2/WG2.1 Working Conference on Generic Programming
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Interactive Theorem Proving and Program Development
Interactive Theorem Proving and Program Development
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Combining programming with theorem proving
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Extensible programming with first-class cases
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Strong types for relational databases
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
Reflective program generation with patterns
Proceedings of the 5th international conference on Generative programming and component engineering
Dependent ML An approach to practical programming with dependent types
Journal of Functional Programming
Expressive and safe static reflection with MorphJ
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Type checking with open type functions
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
Dependent types for low-level programming
ESOP'07 Proceedings of the 16th European conference on Programming
Towards reasoning for web applications: an operational semantics for Hop
APLWACA '10 Proceedings of the 2010 Workshop on Analysis and Programming Languages for Web Applications and Cloud Applications
Symbolic security analysis of ruby-on-rails web applications
Proceedings of the 17th ACM conference on Computer and communications security
Trace-based verification of imperative programs with I/O
Journal of Symbolic Computation
Static checking of dynamically-varying security policies in database-backed applications
OSDI'10 Proceedings of the 9th USENIX conference on Operating systems design and implementation
Evaluation and Usability of Programming Languages and Tools
Maintaining database integrity with refinement types
Proceedings of the 25th European conference on Object-oriented programming
Making standard ML a practical database programming language
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Self-certification: bootstrapping certified typecheckers in F* with Coq
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
TLDI '12 Proceedings of the 8th ACM SIGPLAN workshop on Types in language design and implementation
Row-based effect types for database integration
TLDI '12 Proceedings of the 8th ACM SIGPLAN workshop on Types in language design and implementation
Automated code injection prevention for web applications
TOSCA'11 Proceedings of the 2011 international conference on Theory of Security and Applications
Reasoning about Web Applications: An Operational Semantics for HOP
ACM Transactions on Programming Languages and Systems (TOPLAS)
Marco: safe, expressive macros for any language
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Typed syntactic meta-programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
A practical theory of language-integrated query
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Proceedings of the 9th ACM SIGPLAN workshop on Generic programming
Coq: the world's best macro assembler?
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Scalaness/nesT: type specialized staged programming for sensor networks
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Early detection of type errors in C++ templates
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Effective quotation: relating approaches to language-integrated query
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.00 |
Dependent types provide a strong foundation for specifying and verifying rich properties of programs through type-checking. The earliest implementations combined dependency, which allows types to mention program variables; with type-level computation, which facilitates expressive specifications that compute with recursive functions over types. While many recent applications of dependent types omit the latter facility, we argue in this paper that it deserves more attention, even when implemented without dependency. In particular, the ability to use functional programs as specifications enables statically-typed metaprogramming: programs write programs, and static type-checking guarantees that the generating process never produces invalid code. Since our focus is on generic validity properties rather than full correctness verification, it is possible to engineer type inference systems that are very effective in narrow domains. As a demonstration, we present Ur, a programming language designed to facilitate metaprogramming with first-class records and names. On top of Ur, we implement Ur/Web, a special standard library that enables the development of modern Web applications. Ad-hoc code generation is already in wide use in the popular Web application frameworks, and we show how that generation may be tamed using types, without forcing metaprogram authors to write proofs or forcing metaprogram users to write any fancy types.