# Rowan Davies

Software Engineer at CBA

www.csse.uwa.edu.au/~rowan

@rd1rd2

I am a software engineer and functional programming mentor in Omnia, the Commonwealth Bank advanced analytics and big data project. Previously I was a lecturer and researcher in computer science at the University of Western Australia 2001-2014, and a computer science PhD student at Carnegie Mellon University 1993-2001 supervised by Frank Pfenning. My research focuses on programming and languages, using concepts from logic and type theory. Some of my notable research contributions to functional programming and languages include a derivation of monadic types from a constructive interpretation of modal logic, and the first practical implementation of refinement types.

## YOW! Lambda Jam 2015 Brisbane

**Using Relative Monads for Cheap Syntax**

WORKSHOP/JAM

In this workshop we will present a technique based on relative monads that allows one to embed generic syntax involving a monad, m, which can then be simply reused for any relative monad, relative to m. We will:

- Produce a concrete example of a monad with error handling.
- Encode the relative monad concept as a type class.
- Generalise the previous error handling code to work for any relative monad relative to the error type.
- Convert the previous monad to an instance of a relative monad.
- Explore working with relative monads and monad transformers.

We will run the workshop in both Scala and Haskell.

You can access the workshop material here: https://github.com/CommBank/lambdajam-relative-monads

**Using Relative Monads for Cheap Syntax**<
TALK - [icon name="file-pdf-o" class="" unprefixed_class=""] VIEW SLIDES WATCH VIDEO

We will walk through a production use of this at CBA (converted to Haskell), which has allowed us to cheaply add error handling to new monads and the theory behind it. Finally, we will compare this approach with monad transformers and monad layers.

In this talk we will present a technique based on relative monads that allows one to embed generic syntax involving a monad, m, which can then be simply reused for any relative monad, relative to m.