The system F of variable types, fifteen years later
Theoretical Computer Science
Dynamic typing in a statically typed language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
A system of constructor classes: overloading and implicit higher-order polymorphism
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Dynamic typing: syntax and proof theory
ESOP'92 Selected papers of the symposium on Fourth European symposium on programming
Compiling polymorphism using intensional type analysis
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Putting type annotations to work
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type-directed partial evaluation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A modal analysis of staged computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Multi-stage programming with explicit annotations
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Relational parametricity and units of measure
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
First-class polymorphism with type inference
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Dynamic typing as staged type inference
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
The Definition of Standard ML
A Simple Solution to Type Specialization
ICALP '98 Proceedings of the 25th International Colloquium on Automata, Languages and Programming
Towards a theory of type structure
Programming Symposium, Proceedings Colloque sur la Programmation
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A new approach to generic functional programming
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Online-and-offline partial evaluation (extended abstract): a mixed approach
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
The second Futamura projection for type-directed partial evaluation
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Fully reflexive intensional type analysis
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
A Hybrid Approach to Online and Offline Partial Evaluation
Higher-Order and Symbolic Computation
The Second Futamura Projection for Type-Directed Partial Evaluation
Higher-Order and Symbolic Computation
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Intensional analysis of quantified types
ACM Transactions on Programming Languages and Systems (TOPLAS)
A foundation for embedded languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Encoding Intensional Type Analysis
ESOP '01 Proceedings of the 10th European Symposium on Programming Languages and Systems
Type-Directed Partial Evaluation
Partial Evaluation - Practice and Theory, DIKU 1998 International Summer School
Tag Elimination and Jones-Optimality
PADO '01 Proceedings of the Second Symposium on Programs as Data Objects
A Simple Take on Typed Abstract Syntax in Haskell-like Languages
FLOPS '01 Proceedings of the 5th International Symposium on Functional and Logic Programming
Normalization and Partial Evaluation
Applied Semantics, International Summer School, APPSEM 2000, Caminha, Portugal, September 9-15, 2000, Advanced Lectures
MPC '02 Proceedings of the 6th International Conference on Mathematics of Program Construction
Science of Computer Programming - Special issue on mathematics of program construction (MPC 2002)
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Journal of Functional Programming
Higher-Order and Symbolic Computation
TypeCase: a design pattern for type-indexed functions
Proceedings of the 2005 ACM SIGPLAN workshop on Haskell
ACM Transactions on Programming Languages and Systems (TOPLAS)
Ocsigen: typing web interaction with objective Caml
Proceedings of the 2006 workshop on ML
Generics for the working ML'er
ML '07 Proceedings of the 2007 workshop on Workshop on ML
Proceedings of the 2008 ACM SIGPLAN workshop on ML
Rule-based analysis of dimensional safety
RTA'03 Proceedings of the 14th international conference on Rewriting techniques and applications
Finally tagless, partially evaluated: tagless staged interpreters for simpler typed languages
APLAS'07 Proceedings of the 5th Asian conference on Programming languages and systems
A generic programming toolkit for PADS/ML: first-class upgrades for third-party developers
PADL'08 Proceedings of the 10th international conference on Practical aspects of declarative languages
Undoing dynamic typing (declarative pearl)
FLOPS'08 Proceedings of the 9th international conference on Functional and logic programming
Parametricity, type equality, and higher-order polymorphism
Journal of Functional Programming
Contracts as pairs of projections
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Embedding an interpreted language using higher-order functions and types
Journal of Functional Programming
Typed tagless final interpreters
SSGIP'10 Proceedings of the 2010 international spring school conference on Generic and Indexed Programming
System FC with explicit kind equality
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
A Hindley-Milner type system such as ML's seems to prohibit type-indexed values, i.e., functions that map a family of types to a family of values. Such functions generally perform case analysis on the input types and return values of possibly different types. The goal of our work is to demonstrate how to program with type-indexed values within a Hindley-Milner type system.Our first approach is to interpret an input type as its corresponding value, recursively. This solution is type-safe, in the sense that the ML type system statically prevents any mismatch between the input type and function arguments that depend on this type.Such specific type interpretations, however, prevent us from combining different type-indexed values that share the same type. To meet this objection, we focus on finding a value-independent type encoding that can be shared by different functions. We propose and compare two solutions. One requires first-class and higher-order polymorphism, and, thus, is not implementable in the core language of ML, but it can be programmed using higher-order functors in Standard ML of New Jersey. Its usage, however, is clumsy. The other approach uses embedding/projection functions. It appears to be more practical.We demonstrate the usefulness of type-indexed values through examples including type-directed partial evaluation, C printf-like formatting, and subtype coercions. Finally, we discuss the tradeoffs between our approach and some other solutions based on more expressive typing disciplines.