Reference. Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages
Cite
Cited by (7)
Programmable Property-Based Testing keles-2026-programmable
Symbolic Execution of Hadamard-Toffoli Quantum Circuits carette-2023-symbolic
Leveraging the Information Contained in Theory Presentations carette-2020-leveraging
Partially-static data as free extension of algebras yallop-2018-partially
Type-and-scope safe programs and their proofs allais-2017-type
Functors are type refinement systems mellies_zeilberger_2015
The standard reading of type theory through the lens of category theory is based on the idea of viewing a type system as a category of well-typed terms. We propose a basic revision of this reading: rather than interpreting type systems as categories, we describe them as functors from a category of typing derivations to a category of underlying terms. Then, turning this around, we explain how in fact any functor gives rise to a generalized type system, with an abstract notion of typing judgment, typing derivations and typing rules. This leads to a purely categorical reformulation of various natural classes of type systems as natural classes of functors.
The main purpose of this paper is to describe the general framework (which can also be seen as providing a categorical analysis of refinement types), and to present a few applications. As a larger case study, we revisit Reynolds’ paper on “The Meaning of Types” (2000), showing how the paper’s main results may be reconstructed along these lines.
Folding domain-specific languages: deep and shallow embeddings (functional Pearl) gibbons-2014-folding
Cites 81 works (1 here)
With notes (1)
Higher-order abstract syntax pfenning-1988-higher
External (80)
- Generics of a higher kind (2008)
- Contextual modal type theory (2008)
- Polymorphic embedding of DSLs (2008)
- Boxes go bananas: Encoding higher-order abstract syntax with parametric polymorphism (2007)
- Finally Tagless, Partially Evaluated (APLAS 2007) (2007)
- Concoqtion: Indexed types now! (2007)
- Introduction to coalgebra: Towards mathematics of states and observations (draft book) (2007)
- Simple unification-based type inference for GADTs (2006)
- Statically verified type-preserving code transformations in Haskell (2006)
- Multi-stage Programming with Functors and Monads: Eliminating Abstraction Overhead from Generic Code (2005)
- A type system for certified binaries (2005)
- Embedded interpreters (2005)
- Staged computation with names and necessity (2005)
- TypeCase (2005)
- ML module mania: A type-safe, separately compiled, extensible interpreter (2005)
- Extensional normalisation and type-directed partial evaluation for typed lambda calculus with sums (2004)
- Type-indexed data types (2004)
- ML-Like Inference for Classifiers (2004)
- Encoding types in ML-like languages (2003)
- Environment classifiers (2003)
- Tagging, Encoding, and Jones Optimality (2003)
- Implementing typeful program transformations (2003)
- Guarded recursive datatype constructors (2003)
- Tagless staged interpreters for typed languages (2002)
- Binding-time analysis for both static and dynamic expressions (2002)
- Template meta-programming for Haskell (2002)
- Typing dynamic typing (2002)
- Meta-programming with names and necessity (2002)
- Semantic analysis of normalisation by evaluation for typed lambda calculus (2002)
- A Hybrid Approach to Online and Offline Partial Evaluation (2001)
- A modal analysis of staged computation (2001)
- Tag Elimination and Jones-Optimality (2001)
- Higher-Order program generation (PhD thesis) (2001)
- On Jones-Optimal Specialization for Strongly Typed Languages (2000)
- Coinductive characterizations of applicative structures (1999)
- Combinators for program generation (1999)
- A sound reduction semantics for untyped CBN multi-stage computation. Or, the theory of MetaML is non-trival (1999)
- Quasiquotation in Lisp (1999)
- Type specialization (1998)
- A simple solution to type specialization (1998)
- Lava (1998)
- Typed cross-module compilation (1998)
- Two for the price of one: Composing partial evaluation and compilation (1997)
- Program generation with class (1997)
- Type-directed partial evaluation (1996)
- Building domain-specific embedded languages (1996)
- Infinite lambda-calculus and non-sensible models (1996)
- Self-applicable online partial evaluation (1996)
- Compiling polymorphism using intensional type analysis (1995)
- Final semantics for untyped λ-calculus (1995)
- Self-applicable online partial evaluation of the pure lambda calculus (1995)
- A call-by-need lambda calculus (1995)
- Representing monads (1994)
- Abstract interpretation: A semantics-based tool for program analysis (1994)
- Partial Evaluation and Automatic Program Generation (1993)
- A tour of Schism (1993)
- Partial evaluation of Standard ML (Master's thesis) (1993)
- Self-interpretation and reflection in a statically typed language (1993)
- Representing Control: a Study of the CPS Transformation (1992)
- Efficient self-interpretation in lambda calculus (1992)
- Two-Level Functional Languages (1992)
- Notions of computation and monads (1991)
- A partial evaluator for the untyped lambda-calculus (1991)
- Metacircularity in the polymorphic λ-calculus (1991)
- Automatic autoprojection of recursive equations with global variables and abstract data types (1991)
- Mix: A self-applicable partial evaluator for experiments in compiler generation (1989)
- Strictness analysis and denotational abstract interpretation (1988)
- Automatic binding time analysis for a typed λ-calculus (1988)
- Language triplets: The AMIX approach (1988)
- A logic programming approach to manipulating formulas and programs (1987)
- Automatic synthesis of typed Λ-programs on term algebras (1985)
- A theory of type polymorphism in programming (1978)
- LCF considered as a programming language (1977)
- Call-by-name, call-by-value and the λ-calculus (1975)
- User-defined types and procedural data structures as complementary approaches to data abstraction (1975)
- On the relation between direct and continuation semantics (1974)
- Definitional interpreters for higher-order programming languages (1972)
- Partial evaluation of computation process–An approach to a compiler-compiler (1971)
- The principal type-scheme of an object in combinatory logic (1969)
- The next 700 programming languages (1966)