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)
- Who Got Some Agda in My Haskell? (Online Meetup on 28th January 2023)
- Haskell In Person: Bring Your Project, Get help with your code & socialise (in Berlin on 1st February 2023)
- Teaching Haskell...To High Schoolers! (SkillsCast recorded in December 2022)
- Teaching Haskell...To High Schoolers! (SkillsCast recorded in December 2022)
Overloaded record fields for Haskell
Adam Gundry
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.