*Last updated on 13th July 2018*

Activities; Publications; Videos; Teaching; People; Projects; Personal; Contact; Google Scholar Maps; Weather.

I'm Professor of Computer Science at the University of Nottingham, where I co-lead the Functional Programming Lab.

My research interests are in developing simple but powerful techniques for writing and reasoning about programs, by recognising and exploiting their underlying mathematical structure. 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 and recent work:

- It's easy as 1,2,3 (2018);
- Calculating correct compilers II: return of the register machines (2018);
- A denotational approach to program efficiency (2018);
- Theorem proving for all: equational reasoning in Liquid Haskell (HS 2018);
- AutoBench: comparing the time performance of Haskell programs (HS 2018);
- Parametric polymorphism and operational improvement (ICFP 2018);
- Improving Haskell (TFP 2018);
- Compiling a 50-year journey (JFP 2017).

Current activities:

- Editor, Journal of Functional Programming, 2014-date;
- Editorial board member, ACM International Conference Proceedings Series, 2011-date;
- Program chair, International Conference on Mathematics of Program Construction, Porto, 2019;
- Steering committee member, Lambda Days - Research Track, 2019-date.
- Program committee member, Haskell Symposium, St Louis, 2018;
- Program committee member, Onward! Essays, Boston, 2018;
- Co-organiser, Midlands Graduate School, Nottingham, 2018;
- External examiner, University of Sheffield, 2015-date;
- Member, EPSRC Peer Review College, 2006-date;
- Member, IFIP Working Group 2.1 on Algorithmic Languages and Calculi, 2004-date.

- Keynote speaker, Haskell eXchange, London, 2016;
- Vice-chair, ACM Special Interest Group on Programming Languages, 2009-2012;
- Editorial board member, Journal of Functional Programming, 2010-2013;
- Steering committee chair, International Conference on Functional Programming, 2010-2012;
- Steering committee member, Principles of Programming Languages, 2009-2015;
- Steering committee member, Programming Language Design and Implementation, 2009-2015;
- Program committee member, International Conference on Functional Programming, Oxford, 2017;
- 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 jump directly to a particular item:

- It's easy as 1,2,3 (2018);
- Calculating correct compilers II: return of the register machines (2018);
- A denotational approach to program efficiency (2018);
- Theorem proving for all: equational reasoning in Liquid Haskell (HS 2018);
- AutoBench: comparing the time performance of Haskell programs (HS 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 BCTCS 2005 (EATCS 2005);
- Proof methods for corecursive programs (FI 2005);
- Calculating an exceptional machine (TFP 2004);
- Compiling exceptions correctly (MPC 2004);
- Introduction to functional programming (MGS-APPSEM 2004);
- Proceedings of the First APPSEM-II Workshop (2003);
- The countdown problem (JFP 2002);
- Special double issue on Haskell (JFP 2002);
- Proceedings of the Haskell Workshop 2000 (ENTCS 2001);
- The generic approximation lemma (IPL 2001);
- When is a function a fold or an unfold? (CMCS 2001);
- 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);
- Review of "An introduction to HOL" (JFP 1994);
- Categories, allegories, and circuit design (LICS 1994);
- A tool for relational programmers (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).

- What is a monad? (for Computerphile);
- The Y combinator (for Computerphile);
- Lambda calculus (for Computerphile);
- A secret of sorting (for Computerphile);
- 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, Mind the Gap: 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:

- Martin Handley, Improvement Theory, from October 2016;
- Jonathan Fowler, Property-Based Testing, from October 2014.

Former PhD students:

- Jennifer Hackett, The Worker/Wrapper Transformation: Getting it Right and Making it Better, December 2017;
- Ambrus Kaposi, Type Theory in a Type Theory with Quotient Inductive Types, November 2016;
- Laurence Day, The Modular Compilation of Effects, October 2015;
- Liyang Hu, Compiling Concurrency Correctly: Verifying Software Transactional Memory, June 2012;
- Mauro Jaskelioff, Lifting of Operations in Modular Monadic Semantics, September 2009;
- Catherine Hope, A Functional Semantics for Space and Time, August 2008;
- Joel Wright, Compiling and Reasoning about Exceptions and Interrupts, November 2005;
- Paul Blampied, Structured Recursion for Non-Uniform Data-Types, March 2000;
- Anthony Daniels, A Semantics of Functions and Behaviours, December 1999;
- Colin Taylor, Formalising and Reasoning about Fudgets, December 1998.

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

- Principal investigator, EPSRC grant on Mind the Gap: Unified Reasoning About Program Correctness and Efficiency (project overview), £411,000, 2016-2021;
- Principal investigator, EPSRC grant on Reasoning About Exceptions and Interrupts, £306,000, 2007-2010;
- Lead investigator, EPSRC grants on the Midlands Graduate School in the Foundations of Computing Science (2,3), £39,000, 2007-2009;
- Co-investigator, EPSRC grant on the British Colloquium for Theoretical Computer Science, £65,000, 2008-2010;
- Co-investigator, EPSRC grant on the British Colloquium for Theoretical Computer Science, £24,000, 2005-2007;
- Site leader, IST Working Group on Applied Semantics II, £250,000, 2003-2006;
- Principal investigator, Microsoft Research Ltd grant on Concurrent Haskell, £25,000, 2001-2004;
- Site leader, ESPRIT Working Group on Applied Semantics, £190,000, 1998-2002;
- Principal investigator, EPSRC grant on Structured Recursive Programming, £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 now Professor of Computer Science. I'm married to Annette, and we have two boys, Callum and Tom. In my spare time I enjoy cars, cooking, football, and renovating our house.

Email: | graham.hutton@nottingham.ac.uk (if you are a student, please read this before emailing me) |

Twitter: | @haskellhutt |

Phone: | +44 (0)115 951 4220 |

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

Office: | A09 |