Haskell Implementors' Workshop & ZuriHac 2025
Ten days ago I have attended to Haskell Implementors' Workshop followed by ZuriHac.
It was my second to both events.
Haskell Implementors' Workshop
I actually planned to attend to Haskell Ecosystem Workshop, and not HIW as my attendance to GHC Contributors Workshop, two years ago, was complicated (the technical knowledge required was too high for me).
But this year was actually stimulating.
I've got few takeaways:
- While I thought the numbers of features delivered in GHC 9.10, 9.12, and 9.14 were lower, I actually was wrong, features are more focused around industrialization of the language (a more robust debugger, GHCi support for multiple units, etc.)
- Matthew Pickering's talk "Explicit Level Imports" did a great job explaining the various compilation stages and levels
- I have also enjoyed Ian-Woo Kim's talk on Buck2, even though my previous experience with Bazel did not end well, I think, with enough modules, it worth it
- It was interesting to also seen Glean in action, during Simon Marlow lightning talk
Additionally, I had a chance to have lunch with some of my former Autogriff co-workers, with a nice view on the lake.
ZuriHac
I was my second attendance to ZuriHac.
The first day, I have attended to "MicroHs - A small Haskell compiler" by Lennart Augustsson. Beside the amazing live demo, and the "wahoo" effect of the nested compiler in the repl, it helped to change my perspective on two topics:
- The compiler should be see as a library, not as a black box we only have to deal with
- We should take a step back and reflect on the trade-offs we make, MicroHs is a minimalist Haskell 2010 compiler with few thousands or lines, I was expecting some degraded performances, less clear error messages, but he actually went further by dropping many security checks
The second talk I have attended was "Panel Discussion: Haskell in the Industry". I was a bit disappointed with this one, first I would expect a better ratio community/academia/industry background in the panel. Then, I disagree with the panel on two topics:
- I don't think the growth in Haskell continue at the current pace in new companies. Not because no one want to use it, not because the end of ZIRP have made companies more risk averse (we could argue that picking a programming language without the basic mechanisms to deliver a stable product without producing an important effort is a risk most companies take), but because AI-companies' marketing department tricked everyone into believing developers and software engineers are useless (while Jevons paradox states the opposite), reducing developers power.
- I don't think AI will lead to an increase adoption of Haskell, since the efficacy of a LLM depends mostly on the number of snippets, which will marginalize further Haskell. Which will be harmful in the long run for the whole industry, reducing the diversity, will reduce innovation and exploration.
I will quote Andres Loeh: "if a project fails, it is because Haskell, if it succeed, it is despite Haskell, which is unfair".
Aside of that I was planning to fix a bug preventing HLS to format with fourmolu read the configuration file I have since two years, which turns out to be a configuration issue.
I have also meet 7 people I know (it was 3 last year, and 1 two years ago, which means I will know everyone in 5 years).
My second day was a bit more productive.
I have attempted 2.1667 talks:
- “The History of Effect Systems” from Tom Elis, I disagree with the approach taken by both Bluefin and effectul which rely on
IO
, the speaker was also not entirely correct regardingpolysemy
, but the talk was quite clear and he made his point. - “Category Theory Track” from Richard Southwell, I actually left after roughly one hour as the talk started really slowly on the basis of Category Theory.
- “Making Risk Decisions @ Mercury” from Alex Vieth, I think the technical approach is interesting, however, the slide were not readable, which made the talk challenging to follow.
Aside of that, I have finally contributed to GHC! More than two years ago, I have opened a an issue on the bug tracker, I was describing the issue which was preventing the use of record dot syntax on record selectors when they have a constraint, as follows:
data Rec = Rec { thing0 :: Int, thing1 :: HasCallStack => Int -> Int }
res r = r.thing1 r.thing0
-- Cannot call thing1
The patch is suspiciously simple, I was helped by Adam Gundry from Well-Typed which already helped my two years ago. Thanks so much!
I also had a chance to chat with few people regarding security advisories tooling.
On the last day, my suspicions have been confirmed: it is a bit more complex.
I have only attended the first half of Brent Yorgey's talk "Haskell for competitive programming", then I have moved to the GHC room to synchronize with Adam Gundry.
Sadly, my nearly 12 years-old Lenovo T440, with its Intel Core i5-4300U CPU @ 1.90GHz and its 8 GB of RAM is not enough to build GHC.
Adam suggested to build a small program and inspect the intermediary outputs.
I had just finished when Hecate and two people for other Haskell companies came to report a cabal-install vulnerability. It was re-discovered by Fraser Tweedale in 2021, the leader of the Security Response Team. After talking with Duncan Coutts, one of Cabal architect, he started to draft a support for package collection algebra ten years ago which would alleviate the issue.
To fill-up the last hours before projects demos, I have started to work on purl support, which is a specification for packages location we will use in our security tooling. I'll probably push my PR in few hours or days (edit: done).
I feel that this last day was a bit too much, too many interactions.
Conclusion
While I still did not have my GHC merge request ready (yet), I'm pretty satisfied with my participation.
I think I have reached my limit regarding the quantity of interactions, leaving me exhausted.
Another issue I have, which led to a lot of cognitive load on my side is the interactions with locals. I do not the speak German, and most of the locals are not speaking English, so I basically struggled with my broken Italian, the worst situations were food orders, as many words were French. These permanent languages switches were really tedious.
Lastly, I think I have no choice but replacing my laptop, which is unfortunate, I have replaced the battery and the HDD, but after going to 20 countries, it is time for retirement.