With the increasing use of Haskell for real-world applications, the records system has been a frequent source of frustration to Haskell programmers working on large projects. In particular, an inability to reuse field names across different datatypes leads to awkward ad-hoc naming. There have been many complaints over the years, and designs for better systems proposed, but no concrete progress on implementation. It seemed that academics considered the records problem solved and moved on to greener pastures, while the practical difficulties remained.
Then in late 2011, Simon Peyton Jones proposed a simple extension to permit reusing the same field names in multiple records, thereby resolving the most painful problem, if not all the imperfections of the Haskell record system. This is the story of how Adam implemented that extension in GHC, with the help of Simon and others. Along the way, he'll talk about the challenges of maintaining compatibility with existing Haskell code and fitting something new into the already complex space of Haskell extensions supported by GHC. Adam will then explain the design he and his team ended up with, and how it integrates nicely with lenses, which provide a good solution to the problems of record update.
The talk will assume a vague familiarity with Haskell, but should be reasonably self-contained.
YOU MAY ALSO LIKE:
- Through a Glass, Abstractly: Lenses and the Power of Abstraction (SkillsCast recorded in October 2017)
- Haskell Fundamentals (2-Day Course) with Alejandro Serrano (Online Course on 5th - 6th July 2021)
- Haskell Fundamentals (4-Day Course) with Alejandro Serrano (Online Course on 8th - 11th November 2021)
- Haskell eXchange 2021 (Online Conference on 16th - 17th November 2021)
- Theorems for Free (SkillsCast recorded in November 2020)
- Comparing Strict and Lazy (SkillsCast recorded in November 2020)
Overloaded record fields for Haskell
Adam currently works as a Haskell Consultant for Well-Typed LLP. He is a keen Haskell programmer, and completed a PhD in 2013 on combining Haskell with dependent types.