Test and Type-Driven Design

Friday morning 10:00 - 12:00 CET (UTC+1)


Arnaud Bailly


Test-Driven Design (or Development) is a well-known technique that uses “examples” to let the design of a piece of software emerge from the gradual refinement of features, providing evidence of the correct behaviour of the code through the execution of tests.

TDD is great, but, from a modelling perspective, it makes it hard to see the “big picture”, to express properties of our domain elements in both a human-readable and machine-checkable form.

Modern type systems as exemplified in functional programming languages like Haskell, Elm, or Idris, are powerful tools to help design and model complex domains: A type can be more than a name or structure definition, it can embed properties of parts of a domain, in order to make impossible states unrepresentable.

The goal of this lab is to introduce the audience to some principles of Type-Driven Development, using features provided by functional programming languages like Haskell and Idris. After a short introduction to algebraic structures and dependent types, we will work on a small but interesting enough domain to model it using a few techniques and tools made possible by “advanced” type systems, hopefully improving both the robustness and the expressiveness of the code.

Practical information

We shall be working together in randori/fishbowl style on a dedicated virtual machine using tmux + ssh, and using Miro to draw and model stuff.

If you wish to participate in the coding part, come with a text-based terminal and a public SSH key ready to be shared.

About Arnaud Bailly

Helping teams delivering better software at Pankzsoft Twitter LinkedIn Blog Company Website

Arnaud has been developing software and helping team develop softwares for nearly three decades, in various technologies, contexts and roles. He is interested in everything software-related with a peculiar passion for strongly-typed functional programming.