The Programming Languages Group at The University of Hong Kong (HKU) conducts research on programming language design and implementation, especially about type systems.
Research Highlights
This line of work introduces new designs for iso-recursive subtyping and explores their integration with various language features.
- Recursive Subtyping for All - JFP
- QuickSub: Efficient Iso-Recursive Subtyping - POPL'25
- Full Iso-Recursive Types - OOPSLA'24
- A Calculus with Recursive Types, Record Concatenation and Subtyping - APLAS'22
- Revisiting Iso-Recursive Subtyping - TOPLAS
This line of work focuses on improving bidirectional typing, type inference, and formalization of subtyping.
- Bidirectional Higher-Rank Polymorphism with Intersection and Union Types - POPL'25
- Contextual Typing - ICFP'24
- Greedy Implicit Bounded Quantification - OOPSLA'23
- Elementary Type Inference - ECOOP'22
- A Mechanical Formalization of Higher-Ranked Polymorphic Type Inference - ICFP'19
- Let Arguments Go First - ESOP'18
- Formalization of a Polymorphic Subtyping Algorithm - ITP'18
This line of work explores the duality between intersection and union types and aims to simplify their metatheories.
- Named Arguments as Intersections, Optional Arguments as Unions - ESOP'25
- Disjoint Polymorphism with Intersection and Union Types - FTfJP'24
- Union Types with Disjoint Switches - ECOOP'22
- Distributing Intersection and Union Types with Splits and Duality (Functional Pearl) - ICFP'21
- The Duality of Subtyping - ECOOP'20
This line of work explores the theoretical aspects of the merge operator and develops novel notions such as disjoint intersection types, disjoint polymorphism, nested composition, disjoint switches, type difference, dependent merges, and type-directed operational semantics.
- Disjoint Polymorphism with Intersection and Union Types - FTfJP'24
- A Case for First-Class Environments - OOPSLA'24
- Dependent Merges and First-Class Environments - ECOOP'23
- A Bowtie for a Beast: Overloading, Eta Expansion, and Extensible Data Types in F⋈ - POPL'23
- Making a Type Difference: Subtraction on Intersection Types as Generalized Record Operations - POPL'23
- Applicative Intersection Types - APLAS'22
- Direct Foundations for Compositional Programming - ECOOP'22
- Taming the Merge Operator - JFP
- Row and Bounded Polymorphism via Disjoint Polymorphism - ECOOP'20
- Distributive Disjoint Polymorphism for Compositional Programming - ESOP'19
- The Essence of Nested Composition - ECOOP'18
- Disjoint Polymorphism - ESOP'17
- Disjoint Intersection Types - ICFP'16
Compositional Programming, based on calculi with the merge operator and first-class traits, is a new statically-typed programming paradigm that addresses challenges like the Expression Problem and improves the modularity and extensibility of domain-specific languages.
- Imperative Compositional Programming - OOPSLA'24
- Compositional Embeddings of Domain-Specific Languages - OOPSLA'22
- Compositional Programming - TOPLAS
- Shallow EDSLs and Object-Oriented Programming - <Programming>'19
- Typed First-Class Traits - ECOOP'18
This line of work presents a generalized definition of consistent subtyping for gradually typed calculi with implicit polymorphism, and applies type-directed operational semantics to gradual typing.
- Merging Gradual Typing - OOPSLA'24
- Type-Directed Operational Semantics for Gradual Typing - JFP
- Pragmatic Gradual Polymorphism with References - ESOP'23
- Consistent Subtyping for All - TOPLAS
This line of work unifies typing and subtyping in dependently-typed calculi, while preserving decidable type checking.
- A Dependently Typed Calculus with Polymorphic Subtyping - SCP
- Pure Iso-Type Systems - JFP
- Unifying Typing and Subtyping - OOPSLA'17
This line of work investigates techniques for enhancing modularity in software development, with a particular emphasis on object algebras.
- Pattern Matching in an Open World - GPCE'18
- Castor: Programming with Extensible Generative Visitors - Science of Computer Programming
- FHJ: A Formal Model for Hierarchical Dispatching and Overriding - ECOOP'18
- EVF: An Extensible and Expressive Visitor Framework for Programming Language Reuse - ECOOP'17
- Type-Safe Modular Parsing - SLE'17
- Modular Architecture for Code and Metadata Sharing - MODULARITY'16
- The expression problem, trivially! - MODULARITY'16
- Classless Java - SIGPLAN Not.
- Scrap your Boilerplate with Object Algebras - OOPSLA'15
- Memory-efficient Tail Calls in the JVM with Imperative Functional Objects - APLAS'15
- Functional programming, object-oriented programming and algebras! - WGP'14
The following works were carried out in close partnership with external collaborators. We are very thankful for their insights, generosity, and the opportunity to work together.
- VST-A: A Foundationally Sound Annotation Verifier - POPL'24
- A Gradual Probabilistic Lambda Calculus - OOPSLA'23
- Resolution as Intersection Subtyping via Modus Ponens - OOPSLA'20
- Kind Inference for Datatypes - POPL'19
- Separating Use and Reuse to Improve Both - The Art, Science, and Engineering of Programming
- Cochis: Stable and Coherent Implicits - JFP