- 2024 Correctness is Demanding, Performance is Frustrating
- 2023 The Münchhausen Method in Type Theory
- 2023 Combinatory Logic and Lambda Calculus Are Equal, Algebraically
- 2022 Parallel Scan as a Multidimensional Array Problem
- 2021 Extracting the Power of Dependent Types
- 2021 Array Languages Make Neural Networks Fast
- 2021 Choosing is Losing: How to combine the benefits of shallow and deep embeddings through reflection
- 2020 Checkpointing Kernel Executions of MPI+CUDA Applications
- 2020 Multi-dimensional Arrays with Levels
- 2019 Tensor Comprehensions in SaC
- 2019 Convolutional neural networks in APL
- 2018 A Lightweight Approach to GPU Resilience
- 2018 Extended Memory Reuse: An Optimisation for Reducing Memory Allocations
- 2018 A Rosetta Stone for Array Languages
- 2017 A Lambda Calculus for Transfinite Arrays: Unifying Arrays and Streams
- 2017 Recursive Array Comprehensions in a Call-by-Value Language
- 2015 Making Fortran Legacy Code More Functional: Using the BGS Geomagnetic Field Modelling System As an Example
- 2015 Type-driven data layouts for improved vectorisation
- 2015 Data Layout Types: a type-based approach to automatic data layout transformations for improved SIMD vectorisation
- 2014 SAC/C Formulations of the All-Pairs N-Body Problem and their Performance on SMPs and GPGPUs
- 2013 Data Layout Inference for Code Vectorisation
- 2013 Semantics-Preserving Data Layout Transformations for Improved Vectorisation
- 2012 Portable Support for Explicit Vectorisation in C