Professor of Computer Science at the
University of Nottingham

Co-leader of the Functional Programming Lab

My research interests are in the *mathematics of program construction*.
The aim of this area is to develop simple but powerful techniques for
writing and reasoning about computer programs, by recognising and exploiting
their underlying mathematical structure. Most of my work takes place
in the context of functional languages such as Haskell, Agda and Coq.

I'm an editor of the Journal of Functional Programming, member of IFIP working group 2.1 on Algorithmic Languages and Calculi, and an ACM Distinguished Scientist. I've also served as vice-chair of the ACM Special Interest Group on Programming Languages, and steering committee chair of the International Conference on Functional Programming.

Current work:

Recent work:

- Calculating dependently-typed compilers (ICFP 2021)
- Calculating correct compilers II: return of the register machines (JFP 2020)
- Liquidate your assets: reasoning about resource usage in Liquid Haskell (POPL 2020)
- Call-by-need is clairvoyant call-by-value (ICFP 2019)
- Theorem proving for all: equational reasoning in Liquid Haskell (HASKELL 2018)
- AutoBench: comparing the time performance of Haskell programs (HASKELL 2018)
- Parametric polymorphism and operational improvement (ICFP 2018)

Current activities:

- Editor, Journal of Functional Programming, 2014-date
- Editorial board, ACM International Conference Proceedings Series, 2011-date
- Member, IFIP Working Group 2.1 on Algorithmic Languages and Calculi, 2004-date.
- Member, EPSRC Peer Review College, 2006-date

- Vice-chair, ACM Special Interest Group on Programming Languages, 2009-2012
- Editorial board, Journal of Functional Programming, 2010-2013
- Co-organiser, Midlands Graduate School, Nottingham, 2018
- Keynote speaker, Haskell eXchange, London, 2016
- Program chair, Mathematics of Program Construction, Porto, 2019
- Program committee, Haskell Symposium, New Jersey, 2020
- Program committee, Haskell Symposium, St Louis, 2018
- Program committee, Onward! Essays, Boston, 2018
- Program committee, International Conference on Functional Programming, Oxford, 2017
- Steering committee chair, International Conference on Functional Programming, 2010-2012
- Steering committee, Principles of Programming Languages, 2009-2015
- Steering committee, Programming Language Design and Implementation, 2009-2015
- External examiner, University of Sheffield, 2015-2019
- External examiner, University of Glasgow, 2013-2017
- External examiner, University of Birmingham, 2010-2013
- External examiner, University of York, 2008-2012

A list of publications, bibtex entries, and citations, is available, or you can select below:

- Subtyping without reduction
- HoTT operads
- Monadic compiler calculation
- It's easy as 1,2,3
- Calculating dependently-typed compilers (ICFP 2021)
- Calculating correct compilers II: return of the register machines (JFP 2020)
- Pre-ordered metric spaces for program improvement (2020)
- Liquidate your assets: reasoning about resource usage in Liquid Haskell (POPL 2020)
- Proceedings of the MPC conference (MPC 2019);
- Call-by-need is clairvoyant call-by-value (ICFP 2019)
- Theorem proving for all: equational reasoning in Liquid Haskell (HASKELL 2018)
- AutoBench: comparing the time performance of Haskell programs (HASKELL 2018)
- Parametric polymorphism and operational improvement (ICFP 2018)
- Improving Haskell (TFP 2018)
- Compiling a 50-year journey (JFP 2017)
- Failing faster: overlapping patterns for property-based testing (PADL 2017)
- Programming in Haskell (CUP 2016)
- Contractive functions on infinite data structures (IFL 2016)
- Cutting out continuations (WF 2016)
- Calculating correct compilers (JFP 2015)
- Programs for cheap! (LICS 2015)
- Towards a theory of reach (TFP 2015)
- Worker/wrapper/makes it/faster (ICFP 2014)
- Work it, wrap it, fix it, fold it (JFP 2014)
- The under-performing unfold (IFL 2013)
- Compilation à la carte (IFL 2013)
- Representing contractive functions on streams (2011)
- Towards modular compilers for effects (TFP 2011)
- Factorising folds for faster functions (JFP 2010)
- Compiling concurrency correctly: cutting out the middle man (TFP 2009)
- The worker/wrapper transformation (JFP 2009)
- Modularity and implementation of mathematical operational semantics (MSFP 2008)
- Towards a verified implementation of software transactional memory (TFP 2008)
- Reasoning about effects: seeing the wood through the trees (TFP 2008)
- What is the meaning of these constant interruptions? (JFP 2007)
- Programming in Haskell (CUP 2007)
- Compact fusion (MSFP 2006)
- Accurate step counting (IFL 2005)
- Report on the BCTCS colloquium (BCTCS 2005)
- Proof methods for corecursive programs (FI 2005)
- Calculating an exceptional machine (TFP 2004)
- Compiling exceptions correctly (MPC 2004)
- Proceedings of the APPSEM workshop (APPSEM 2003)
- The countdown problem (JFP 2002)
- Special double issue on Haskell (JFP 2002)
- The generic approximation lemma (IPL 2001)
- When is a function a fold or an unfold? (CMCS 2001)
- Proceedings of the Haskell workshop (HASKELL 2000)
- Proof methods for structured corecursive programs (SFPW 1999)
- A tutorial on the universality and expressiveness of fold (JFP 1999)
- Fold and unfold for program semantics (ICFP 1998)
- Monadic parsing in Haskell (JFP 1998)
- Monadic parser combinators (1996)
- Back to basics: deriving representation changers functionally (JFP 1996)
- Bananas in space: extending fold and unfold to exponential types (FPCA 1995)
- Categories, allegories, and circuit design (LICS 1994)
- The Ruby interpreter (1993)
- A relational derivation of a functional program (STOP 1992)
- Between functions and relations in calculating programs (1992)
- Higher-order functions for parsing (JFP 1992)
- A calculational theory of pers as types (1992)
- Making functionality more general (GWFP 1992)
- Functional programming with relations (GWFP 1991)
- Parsing using combinators (GWFP 1990)

- Program correctness
- Tail recursion
- Curried functions
- Functional parsing
- To infinity and beyond
- What is a monad?
- The Y combinator
- Lambda calculus
- A secret of sorting

- Calculating correct compilers (for Haskell eXchange, based on this article)
- Programming in Haskell (for FutureLearn, based on this book)
- How to be more productive (for Channel 9, based on this article)
- Calculating an exceptional machine (based on this article)
- The countdown problem (for Channel 9, based on this article)

Current teaching:

- Functional programming (1st year course)

- Advanced functional
programming (2nd year course)

Previous teaching:

- Introduction
to category theory (postgraduate course)

- Introduction to domain theory (postgraduate course)
- Principles of
programming languages (3rd year course)

- Concepts of
concurrency (2nd year course)

Research fellows:

- Jennifer Hackett, Unified Reasoning About Program Correctness and Efficiency, 2016-2021
- Nils Anders Danielsson, Reasoning About Exceptions and Interrupts, 2007-2010
- Joel Wright, Compiler Correctness, 2005

Current PhD students:

- Brandon Hewer, from October 2019
- Mitchell Pickard, from October 2019

Former PhD students:

- Martin Handley, Efficiency Three Ways: Tested, Verified, and Formalised, 2020
- Jonathan Fowler, Narrowing in on Property-Based Testing, 2019
- Jennifer Hackett, The Worker/Wrapper Transformation, 2017
- Ambrus Kaposi, Type Theory in a Type Theory with Quotient Inductive Types, 2016
- Laurence Day, The Modular Compilation of Effects, 2015
- Liyang Hu, Compiling Concurrency Correctly, 2012
- Mauro Jaskelioff, Lifting of Operations in Modular Monadic Semantics, 2009
- Catherine Hope, A Functional Semantics for Space and Time, 2008
- Joel Wright, Compiling and Reasoning about Exceptions and Interrupts, 2005
- Paul Blampied, Structured Recursion for Non-Uniform Data-Types, 2000
- Anthony Daniels, A Semantics of Functions and Behaviours, 1999
- Colin Taylor, Formalising and Reasoning about Fudgets, 1998

The 'mind the gap' project was featured in impact magazine.

- Mind the Gap:
Unified Reasoning About Program Correctness and Efficiency

Principal investigator, EPSRC, £411,000, 2016-2021 - Reasoning About
Exceptions and Interrupts

Principal investigator, EPSRC, £306,000, 2007-2010 - Midlands Graduate School in the Foundations of
Computing Science (2,
3)

Lead investigator, EPSRC, £39,000, 2007-2009 - British Colloquium for Theoretical
Computer Science

Co-investigator, EPSRC, £65,000, 2008-2010 - British Colloquium for Theoretical
Computer Science

Co-investigator, EPSRC, £24,000, 2005-2007 -
__IST Working Group on Applied Semantics II__

Site leader, £250,000, 2003-2006 -
__Concurrent Haskell__

Principal investigator, Microsoft Research, £25,000, 2001-2004 -
__ESPRIT Working Group on Applied Semantics__

Site leader, £190,000, 1998-2002 - Structured Recursive Programming

Principal investigator, EPSRC, £11,000, 1997-2000

I'm from Glasgow in Scotland, and received a PhD in Computing Science
from the University of Glasgow. I then spent a few years
in Gothenburg and Utrecht, before moving to Nottingham where I
am Professor of Computer Science. I'm married to the lovely
Annette, and we have two boys. In my spare time I enjoy
cooking, and restoring our house.

If you are a student or PhD applicant, please read these notes before sending me an email.

Twitter: | @haskellhutt |

Email: | graham.hutton@nottingham.ac.uk |

Phone: | I don't have an office phone and my university number is inactive |

Address: | Professor Graham Hutton School of Computer Science University of Nottingham Jubilee Campus, Wollaton Road Nottingham NG8 1BB United Kingdom |