St Andrews Functional Programming Group

Who are we?

We are the functional programming group at the University of St Andrews. Functional programming involves writing programs using pure functions. Unlike conventional programming (including much object-oriented programming), side-effects are completely eradicated. This allows a very clean, very high-level, very concise programming model.

Functional programs are

Quick to write.

Easy to reason about.

Easy to modify and debug.

Easy to make parallel.

Previous work at St Andrews has focused on Parallel Implementation and Functional Persistence. Our parallel implementation work uses the Glasgow Parallel Haskell dialect of the non-strict functional language Haskell that has been developed in collaboration with researchers at Glasgow, Heriot-Watt and the Open University. Work on functional persistence has been done in collaboration with researchers from UCL and Universidade da Coruña, Spain.

News and Events

The latest St Andrews Functional Programming Group posts from the School of Computer Science blog.

Why Homotopy type Theory (HoTT) matters – Professor Thorsten Altenkirch

Event details

  • When: 25th May 2018 11:00 - 12:30
  • Where: Cole 1.33a
  • Format: Seminar

Dependent types are a wonderful way to construct correct functional programming and specify interfaces as Edwin has shown in his nice book on type driven development using a welsh dragon. But shall we go further in the esoteric world of homotopy type theory? I will try to motivate this and I am looking forward to some discussions with people who have a more pragmatic attitude to dependent types.

The OpenMP and MPI refactoring with ParaFormance – Turkey Alsalkini

Event details

  • When: 17th May 2018 12:00 - 13:00
  • Where: Cole 1.33a
  • Format: Talk


The increasing complexity of codes with the growing number of cores that should be utilised make such codes hard to optimise and maintain. In this talk, we present the OpenMP and MPI refactoring implemented in the ParaFormance tool. This tool transforms the sequential code into parallel code able to run on shared memory machines. Further refactoring is implemented to adapt the source code to exploit a larger number of processors on large HPC clusters with message passing support. In addition, the resulting MPI code can be used by developers as a starting point for further optimisation. Both refactorings are preceded by an advanced safety checking which reports concurrency problems and gives hints and suggestions on how to fix them.