Daml Engineering

Handing over ghcide to the Haskell community

Written by Moritz Kiefer | Sep 1, 2020

We started building ghcide over 2 years ago as part of our efforts at Digital Asset to provide a great IDE experience to all Daml users. As a lot of people in the Haskell community know, the Daml compiler is based on a modified version of GHC, so naturally the people working on it were Haskell programmers. As ghcide got better and better, and we got to experience it whenever we were working on Daml codebases, we started missing the same features from our Haskell development. Over time, we started abstracting over Daml-specifics and eventually managed to get it working on some hand-crafted Haskell projects, but couldn’t integrate with Cabal, Stack or other build tools. Around that time, we also open sourced the whole Daml codebase which included ghcide - but we didn’t announce ghcide anywhere. Luckily, at this time Matthew Pickering released hie-bios which made it trivial to integrate ghcide with all of the various build tools in the Haskell system while still using the same codebase as the basis for the Daml IDE.

External interest in ghcide was very limited until Neil gave a keynote at MuniHac 2019.

Interest and external contributions skyrocketed over a few days and we split ghcide into a separate repository to make it easier for contributors and users that no longer had to deal with the Daml monorepo. Since then, there have been a huge number of contributions to ghcide that not only benefited Haskell users, but also Daml users. It is impossible to name all the amazing features that have been contributed to ghcide, but some of our favourites include:

  • Support for code completions
  • Many significant performance improvements
  • Multi-component support
  • A wide variety of code actions

In January 2020, a lot of ghcide contributors and contributors from haskell-ide-engine got together and agreed to unify their efforts as part of haskell-language-server - which builds on top of ghcide while carrying over all the features and plugins that came from haskell-ide-engine. Half a year later, it’s not a stretch to say that this endeavour has been an enormous success and enthusiastic statements from users can attest to this. Finally, most efforts on Haskell tooling are focused on a single approach and everyone can benefit from improvements.

As the importance of ghcide to Haskell tooling has grown, keeping such an important repository in the Digital Asset organisation with only Digital Asset employees as maintainers has started to hold back the flood of contributions. Therefore, in consultation with many of the contributors, Digital Asset has made the decision to turn ghcide into a proper community project under the haskell github organization. In making this transition, ghcide gains a much wider team of maintainers, sourced from the current active ghcide contributors. The Daml IDE will switch to an open source fork of ghcide and cherry-pick changes from upstream as needed and we will continue to upstream bugfixes and improvements into ghcide.

We are very excited to see in which directions ghcide will grow in the future. Thanks to all ghcide contributors and in particular to Pepe Iborra, Matthew Pickering, Alan Zimmermann, wz1000, Luke Lau, Alejandro Serrano, fendor and Jacek Generowicz. We’ve enjoyed being part of the Haskell IDE tooling community, and look forward to working with both current and new contributors in the future.

Moritz and Neil


Bristol Haskell Hackathon 2020