Haskell eXchange 2021: Pro Track

Tuesday, 16th - Wednesday, 17th November, Online Conference

18 experts will be speaking. Starts at 12:00 PM BST (12:00 PM UTC)

Join us for the 10th annual Haskell eXchange, a 3‑day online conference with content selected by developers for developers.

Over these 2 "Pro Track" days, you'll hear the latest from Haskell thought leaders, connect with fellow Haskellers in breakout sessions, and learn new skills in practical, coding-based talks.

Don’t miss this opportunity to learn and share your skills with the world’s most vibrant Haskell gathering.

Book today for only £99


If you've heard of Haskell or Functional Programming but aren't sure where to start, our new free "Novice Track" day is the perfect no-pressure way to learn about Haskell.

Register Here
Haskell eXchange 2021

The 2021 Haskell eXchange will be an online conference hosted on the Hopin platform.

At Skills Matter, we’ve chosen to see the events of the past year as a challenge to make our content and community more inclusive and accessible to all. Beyond the COVID‑19 pandemic, we have a vision of a community where knowledge sharing and skills transfer are not limited by physical barriers.

By hosting Haskell eXchange online in 2020, we were able to truly welcome a global community of Haskell enthusiasts and developers to the conference.

We are excited to be able to offer this opportunity again for 2021 and hope you can join us!

Explore Haskell eXchange 2021

Get involved, plan your conference, or start your learning today

Haskell eXchange 2021 programme

View the program

Our 3-day online conference will feature experts and enthusiasts pushing the bounds of Haskell in both industry and academia.

explore program
Haskell eXchange 2021 Call for Papers

Want to get involved?

Sponsoring a conference is a terrific way to support and connect with our global community of software professionals.

Learn More

Haskell eXchange SkillsCast videos

Revisit 2020

View (or review) the 15 talks and sessions from Haskell eXchange 2020 in our library of SkillsCast videos.

Last year's conference featured memorable talks from the likes of Simon Peyton Jones, Mateusz Curylo, and Richard Eisenberg, plus the launch of the Haskell Foundation.

visit the library

Diversity Matters Scholarship

Skills Matter offers scholarships to people from underrepresented groups in tech who wouldn't otherwise be able to attend.

If you believe you are a member of a group that is underrepresented within the tech community or at technical conferences we encourage you to apply.

Learn More

Program Committee

All of the talks at the Haskell eXchange are selected by our volunteer Program Committee which evaluates and selects which speakers and topics will be included in the conference program. This committee includes developers, practitioners and enthusiasts of all levels.

This year's Program Committee includes:

Excited? Share it!


Scaling Application State Beyond Memory: A Functional Approach

Provided that data fits entirely within memory we can process data in an elegant way using classic Haskell techniques. Once we have more data than can fit in memory however we are often forced to abandon elegance to deal with mutable disk state in IO. While streaming style applications can often maintain an elegant pure core, it is particularly difficult to do so for transaction processing (OLTP) style applications which typically need random access to their data sets. The usual approach to building these applications involve using SQL or key-value databases and intermingling program logic with actions to fetch and change stored data.

This talk explores an approach for OLTP style applications to scale to data sets bigger than fit in memory, while preserving a functional approach and the usual associated advantages. The approach uses ordinary pure functions that work over in-memory data structures, but nevertheless keeps the bulk of data on disk. The talk will explain the concepts and report on initial experience of applying the ideas in an existing commercial application.

Duncan Coutts

Duncan has more than twenty years programming experience with Haskell in academia and industry. He is a well known member of the Haskell community and is a founding partner of the Haskell consultancy Well-Typed.

A tour of linear-base

The first GHC version with the LinearTypes language extension is released early this year. This extension allows using linear arrows, where a function can specify how many times it uses its parameter. This seemingly minor ability opens up the door to many new abstractions; including, but not limited to, safe resource handling, pure mutable collections, and even the ability to manipulate values that are not managed by the garbage collector. linear-base, the standard library for linearly-typed Haskell programs, provides a fair number of utilities making -XLinearTypes convenient and also implements some of these new abstractions.

There are many in-depth articles and talks about specific uses of linear-base, but this talk will provide a broader overview of what is possible with linear-base now; walking through the different areas of the library pointing out their practical use cases; but also what they are lacking and what is being discussed. I hope it will encourage more people to experiment with linear-base, take part in discussions and become contributors.

Utku Demir

Software Developer
Tweag I/O

An Overview of GHC's Constraint Solver

GHC's constraint solver is a notoriously difficult beast to understand, and there aren't many tools available to help us understand the process that GHC goes through while type-checking.

In this talk, we will give an overview of how GHC generates constraints in the process of type-checking, and how it goes about categorising them and solving them. In particular, we will cover:

  1. Wanted and Given constraints,
  2. GHC's classification of predicates,
  3. typeclass instance resolution,
  4. implication constraints and the recursive nature of constraint solving,
  5. how type-checking plugins fit in with this story.

Sam Derbyshire

In 2017, having completed my mathematics PhD in London (in the field of p-adic Hodge theory), I decided to go back to my roots in the French Pyrénées, to begin working on various Haskell projects, with a focus on graphics. I got to know Haskell's type system in the process, and decided to take things a step further this year: I begun working on GHC under the supervision of Richard Eisenberg, with a focus on type-checking plugins and representation polymorphism. Since then, I've started work at Well-Typed, and continue contributing to GHC.

Haskell in the Enterprise: A Report from in the Belly of the Whale

What is it like to bring Haskell to a large enterprise with an established culture? There are success stories for specialized teams, but what about the mainstream? We've been working in the trenches alongside enterprise developers doing Haskell for more than 3 years and have lots to report. This talk explores what it is like to use Haskell in an environment where the understanding and software engineering experience of developers is very mixed. Ranging from the Haskell language and the ecosystem around it, to how it has impacted the systems and people working with it, we will examine the journey from an introduction that took us into stormy seas and the vision of clear skies ahead.

Trevis Elser

Software Engineer
Flipstone Technology Partners, Inc.

A Conceptual Introduction to Nix for Haskellers

Nix is a package manager popular in the Haskell world, sharing many ideas with Haskell. In this talk, Krzysztof Gogolewski will explain Nix using Haskell as a basis. I assume basic knowledge of Haskell, but no knowledge of Nix.

What is the novelty of Nix?

Learning Nix and NixOS involves multiple jumps - the store, expressions, derivations, dependencies, packages, system configuration... Furthermore, as with any engineering project there's machinery that accounts for the messy reality.

The talk is inspired by "Build Systems a la Carte" and "Nix pills", but they are not prerequisites. This will not be a tutorial on accomplishing specific tasks with Nix, but it should give enough background to prepare attendees for a deeper dive.

Krzysztof Gogolewski

Krzysztof is a software engineer at Tweag, working on linear types in GHC.

How We Migrated 65K Lines of Javascript Code to Haskell: Good, Bad and Ugly

In this talk Aravind will share his team's experience at Juspay, migrating a 65K line nodejs codebase to Haskell. He will take you through the entire journey of migration, parts where Haskell shines and also the not so good parts of Haskell. He will talk about :

1) Haskell as a preferred language choice 2) How we migrated 65K Lines of Code in just three months 3) Haskell Type System — A Super Power 4) Wins we got post migration — Extremely performant code, 100% more throughput per core 5) And just a few things we wish were better about Haskell

This talk will give you insights and an unbiased view into what it takes to adopt Haskell at large scale, parts where Haskell is a super power and things to watch out for.

Keynote — Haskell: What To Do When Success Can't Be Avoided

Many programming languages have a start with an academic foundation, but few languages carry such a deep sense of academic identity as they cross over into adoption in the industry. Haskell seems so different from the rest.

SimSpace has been using Haskell at scale across nine teams, collectively maintaining over 400k lines of Haskell, developed over five years. We have a number of shared experiences and can speak to lessons learned over the years. This talk is an opportunity to share those experiences and give some helpful advice to others on a similar trajectory of using Haskell commercially.

There's such a rich and historic narrative coming from the academic side of Haskell. This talk seeks to complement that narrative with an industrial perspective.

Why and how the external STG interpreter is useful

The external STG interpreter is a from scratch implementation of the STG machine in Haskell. Currently it supports almost all GHC primops and RTS features. It can run real world Haskell programs that were compiled with GHC Whole Program Compiler (GHC-WPC). GHC-WPC is a GHC fork that exports the whole program STG IR.

The external STG interpreter is an excellent tool to study the runtime behaviour of Haskell programs, i.e. it can run/interpret GHC or Pandoc. The implementation of the interpreter is in plain simple Haskell, so it makes compiler backend and tooling development approachable for everyone. It already has a programmable debugger which supports step-by-step evaluation, breakpoints and execution region based inspection. It also can export the whole program memory state and call-graphs to files for further investigation. These features makes it easy to find a memory leak or to identify a performance bottleneck in a large real world Haskell application.


Csaba Hruska

Compiler Engineer

Scaling up the IDE to 20M imports

HLS is a popular Haskell IDE: fast, feature-rich, extensible, easy to install and ubiquitous. But what happens when you try to use it in a very large enterprise codebase?

To understand the performance characteristics, we will deep dive into the ghcide build graph and execution model to characterise the amount of work done per keystroke. We will learn that currently the work is proportional to the number of import declarations and that this doesn't scale well. To address this issue we extend HLS to track the build nodes changed since last build and obtain a reactive build graph where the amount of work is proportional only to the number of nodes changed and their reverse dependency closure.

HLS is an IDE engine built on top of a build system. The programming model is fantastic, and this talk shows that it also has an efficient execution model. Moreover, the talk will hopefully shed some light on the internals and serve as a resource for current and future HLS contributors.

Multi-dimensional Arrays that Do Not Exist

The goal of this talk is to explain delayed arrays, that are available in massiv library, as well as their roles in fusion and parallelization of operations applied to multi-dimensional arrays.

Immutable arrays in Haskell come with great safety properties and provide opportunities for a variety of optimizations. However, without fusion most operations on arrays do not compose efficiently due to intermediate allocations. Delayed arrays provide us with a reliable fusion framework, which is fully controlled by the user and guided by the type checker.

Many operations on arrays are massively parallel, however the common Haskell technique of evaluating with pseq and relying on GHC's spark pool is not applicable to unboxed arrays because it relies on laziness. Combination of a custom scheduler and delayed arrays can help us with a solution, so we can benefit from multi-core parallelization.

Streamly: Haskell Programmer’s Swiss Army Knife

Streamly provides declarative combinators to express loops as a pipeline composed of modular building blocks. Each pipeline stage encapsulates a transformation over the data.

Streamly makes it possible to compose concurrent programs declaratively. Data processing pipelines can be composed of concurrent actions and can run concurrently. Streamly unifies many functional abstractions; a small set of high-level combinators can express a wide variety of programming problems.

Traditionally, you can write idiomatic programs that do not perform so well or high-performance programs that are not so idiomatic. Streamly provides both.

This talk aims to introduce the library to a wider audience. We will go over the motivation for the library, how it is different from existing solutions, the abstractions it provides, key innovations, performance characteristics, and how to express some practical problems using the library.

See more details at the streamly homepage.

Harendra Kumar

Harendra has decades of experience building large-scale software systems. Before founding Composewell Technologies, he was a file systems architect at NetApp, where he worked on the WAFL file system performance and resiliency.

He is passionate about creating software development tools to make it easy to build high-quality, maintainable, and high-performance systems. He has been working exclusively on pure functional programming using Haskell for the last several years.

Designing and Verifying Programs with Formal Specification

Specifications languages have demonstrated themselves as an effective tool for designing and reasoning about complex software systems by capturing a high-level description of the system behavior in temporal logic. Declarative specifications of the intent of a system also serve models that can be checked in a fully automatic way, giving engineers formal guarantees on the correctness of their designs according to their specifications.

In this talk, I will give an overview of Spectacle, a Haskell EDSL for writing formal specifications in the temporal logic of actions, and how specifications written in Spectacle can mechanically verify real-world Haskell programs.

Keynote — Provably correct, asymptotically efficient, higher-order reverse-mode automatic differentiation

Automatic differentiation is all the rage these days, largely because it is a key enabler for machine learning. But reverse-mode AD (the important kind) is a bit mind bending, and becomes much more so if you want reverse-mode AD for higher order programs (i.e. the kind we love).

In this talk I’ll explain what AD is, and how we can do it for higher order programs, using a series of simple steps that take us a simple-and-obviously-correct version to a weird-but-very-efficient one. At the end of the road we’ll find the Kmett/Pearlmuttter/Siskind ‘ad’ library in Hackage… but I hope we’ll see it with new eyes.

We are honoured to welcome back Simon Peyton Jones to the Haskell eXchange.

Since the very first Haskell eXchange in 2012, we've been lucky to have Simon join us each year to share his unique perspective on everything from front end features to join points , Linear Types, and pattern matching — not to mention last year's very special announcement of the Haskell Foundation.

Check out all of Simon's previous Haskell eXchange talks here.

Simon Peyton Jones

Senior Principal Researcher
Microsoft Research, Cambridge

Simon Peyton Jones, MA, MBCS, CEng, graduated from Trinity College Cambridge in 1980. Simon was a key contributor to the design of the now-standard functional language Haskell, and is the lead designer of the widely-used Glasgow Haskell Compiler (GHC). He has written two textbooks about the implementation of functional languages.

After two years in industry, he spent seven years as a lecturer at University College London, and nine years as a professor at Glasgow University before moving to Microsoft Research (Cambridge) in 1998.

His main research interest is in functional programming languages, their implementation, and their application. He has led a succession of research projects focused around the design and implementation of production-quality functional-language systems for both uniprocessors and parallel machines.

More generally, he is interested in language design, rich type systems, software component architectures, compiler technology, code generation, runtime systems, virtual machines, and garbage collection. He is particularly motivated by direct use of principled theory to practical language design and implementation -- that's one reason he loves functional programming so much.

Keynote — Generating Programs from Types

Program synthesis is a promising approach to automating low-level aspects of programming by generating code from high-level declarative specifications. But what form should these specifications take? In this talk I will advocate for using types as input to program synthesis. Types are widely adopted by programmers, they can vary in expressiveness and capture both functional and non-functional properties, and finally, type checking is often fully automatic and compositional, which helps the synthesizer find the right program.

I will describe two type-driven program synthesizers we developed. The first one is Synquid, a synthesizer for recursive functional programs that uses expressive refinement types as a specification mechanism. The second one is Hoogle+, which relies on more mainstream Haskell types and generates code snippets by composing functions from Haskell libraries.

Nadia Polikarpova

Nadia Polikarpova is an assistant professor at UC San Diego, and a member of the Programming Systems group. She received her Ph.D. in Computer Science from ETH Zurich in 2014, and then spent a couple years as a postdoctoral researcher at MIT. Nadia's research interests are in program synthesis, program verification, and type systems. She is a 2020 Sloan Fellow, and a recipient of the 2020 NSF Career Award and the 2020 Intel Rising Stars Award.

Lightning Talk: A Spectre is Haunting Haskell — The Spectre of Effects

Existing effect systems in Haskell all use one of two approaches: Free monad or effect typeclasses. As Alexis King pointed out in her talk in ZuriHac 2020, these two approaches are both unfriendly to compiler optimization because they all generalize too much, making neither effectful operations nor bind operations inlinable.

A design pattern comes to rescue, the “phantom constraint pattern.” It works with effect typeclasses, in particular the ReaderT pattern. It allows users to write effectful code on a concrete monad, which is much more friendly to the optimizer than a free/polymorphic monad, while at the same time having the ability to control the use of effects via specific redundant constraints that contain no information.

I will also talk about a work-in-progress effects library of mine, availability, that uses the said design pattern. I will give a comparison of its usage against other libraries and its design concerns.

Xiaoyan Ren

Xiaoyan Ren is a student who is enthusiastic about functional programming and PLT. She has written Haskell for 2 years and works with the awesome people at the PLCT Lab in ISRC, CAS building the Aya proof assistant. She loves to chat about dependent type theory and the implementation of type system elaboration.

A Curious Case of a Memory that Just Didn't Go Away Quickly

The idea for the talk came from a series of performance investigations in which we tried to nail a bug that was causing unusually long pauses on our production machines. What was even more interesting was that the slowdown seemed to have quadratic characteristics, but all the GCs algorithms are certainly linear? It turns out that there are corner cases where this is not true. In fact, we have proposed a (accepted) bug report to GHC outlining this particular problem: https://gitlab.haskell.org/ghc/ghc/-/issues/19897

While these findings are interesting on its own, they would make a rather hermetic presentation. So instead of presenting the dry facts, the talk would turn towards topics that I believe to be valuable independent of a particular case: how to profile a misbehaving program and collect conclusive results pointing to the real cause; overview of existing GHC memory management tactics and data structures; general structures that can be used in memory management (trees, skip-lists) and their characteristics; how to hack on GHC to implement a new idea; how to use a hacked GHC.

Marcin Rzeźnicki

Haskell Software Engineer @ Channable

Generating fast and expressive code using LLVM and Haskell

In this talk, Luc will show how to create a language by making use of LLVM and Haskell. At the start, an introduction will be given on LLVM and the corresponding Haskell bindings.

Afterwards, Luc will explain how techniques such as combinators and partial evaluation can be used to create performant functions optimized by LLVM. At the end, everything will be brought together and the result will be a small language that compiles all the way down to assembly.

Luc Tielen

Luc is a freelance software engineer on a never-ending quest for writing correct, robust, and maintainable programs. Along this journey, he came into contact with functional programming via Elixir and Haskell and has never looked back since. Recently, he's been focusing on writing an optimized runtime for his Eclair Datalog language using the Haskell LLVM bindings.

Avoiding Quadratic Blow-up During Compilation

There are three main sources of of quadratic blow-up in the ghc core code generated during compilation. First, we cannot refer to or update a field of records without mentioning all the fields of that record, where it should be noted that type class dictionaries are also records. Second, lack of type level sharing results in a lot of duplication when using data types with constructors that reflect some kind of inductive structure. Third, type family reduction results in large type equality coercions.

In this talk we will take a closer look at each of these problems. We will see how the large-records library manages to circumvent all of these problems, but we will also discuss the principles involved in the hope that you can apply those in your own code. Although it would be good to tackle these problems at a more fundamental level, this talk focuses on how to deal with these problems with current-day ghc, not a hypothetical future one.

Edsko de Vries

Edsko has been using Haskell for nearly 20 years, and has been a professional Haskell consultant with Well-Typed for roughly half that time. He holds a PhD in advanced (substructural) type systems for pure functional languages from Trinity College, Dublin.

As a Well-Typed consultant, he has provided training across the world, from Johannesburg to Boston to Singapore. He has worked on a large variety of projects, both open source as well as closed source for specific clients. Some of the open source projects he has contributed to are Cloud Haskell, Hackage, the Hackage security library, ghc, Ziria (a DSL developed by Microsoft) and cabal. Some general purpose libraries he has (co)developed include generics-sop, nothunks, recover-rtti and large-records.

The last few years he has worked as a consultant with IOHK on the Cardano blockchain, where he was responsible for the overall architecture of the consensus layer, designed the hard fork combinator, and did research on formal specification of a crypto wallet and invented a novel coin selection algorithm.

Get Involved

The Haskell eXchange Call for Papers is now closed.

Thank you for your interest We would like to thank everyone who submitted a proposal.

Proposals are now being evaluated by our Program Committee. If you've submitted a talk you should be hearing from our Programming Team very shortly. Thank you for your submissions.

If you've missed the deadline, why not consider submitting to one of our other Call for Papers below.

Check Out Our Other CFPs

Become a sponsor of Haskell eXchange

Whether you're looking to attract talent to your team or accelerate adoption of your tools and products, sponsoring Haskell eXchange is a terrific way to support and connect with our global community of developers working with functional languages like Haskell.

We offer a variety of opportunities for continuous visibility and continuous engagement. Community is at the heart of all we do at Skills Matter, and we believe it is mutually beneficial to foster genuine connections between our members and truly innovative businesses.

Rather than a typical ad hoc event sponsorship, we’ll work with you to create bespoke engagement opportunities that benefit both your business and the Skills Matter community. Whether you’re looking to develop one-to-one relationships with our members, or to showcase your product and spread brand awareness, we’d love to find a way to create meaningful interactions between you and our community.

To discuss sponsorship opportunities please contact the team:


Hold tight, skillscasts coming soon!


Other Years

Thank you to our sponsors and partners