Hi everyone, here are the minutes of the meeting:
---
# Cabal meeting (17/08/2023)

Previously: https://hackmd.io/2EPSwwg8QqqZ96cFdW2wTQ

## Next Release

- Help needed with [#9088](https://github.com/haskell/cabal/pull/9088).
  - Hécate: If we can't get it through, we'll skip it for this backport.

## Cabal exact-printing in HLS

* HLS has a cabal plugin: https://discourse.haskell.org/t/hsoc-hls-cabal-file-support/7331/2
    * Establishing a context for completions (Value Context, Keyword Context, ...) is not easily possible
    * Custom parsing that works 95% of the time is used.
    * Fitting .cabal intermediate structures would improve the code and reduce maintenance burden for HLS team.
* Often requested feature in HLS: https://github.com/haskell/haskell-language-server/issues/3595
    * Requires parsing and modifying .cabal files without modifying the rest of the cabal file
    * GenericPackageDescription insufficient due to loss of Source Positions
    * Intermediate representations of .cabal files are unknown / hard to discover
    * Custom megaparsec parser used for POC of Code Action "Add module to exposed-modules" field.
        * FYI, this code action is working for a lot of use-cases already
    * Explicit goal of being an exactprinter
* See [megaissue](https://github.com/haskell/cabal/issues/7544#issuecomment-934009792) (and there is a whole github project, linked to in the issue).
* While the HLS's custom parser serves a different purpose, it'd be much nicer  if we could re-use Cabal directly
* In a dicussion, @fendor and @andreabedini talked about a way forward:
    * Let's make `[Field ann]` roundtripping by modifying the lexer
        * Trailing whitespace needs to be handled
        * Comments need to be handled
        * Are braces currently handled in the lexer or are they a part of `ann`?
        * POC branch by @andreabedini available
    * `Field ann` gives us enough information to implement the Code Action for HLS
    * Ideally, we also make `Fields ann` (note: different intermediate representation) roundtrip with `[Field ann]`

Pros:
* We are relatively close to achieving roundtrips of `[Field ann] <-> .cabal`
* Immense help for tooling already

Cons:
* No field analysis, further parsing required.

Proposed roadmap:
1. HLS releases with the Code Action using a custom parser
2. The custom parser is replaced by `[Field ann]` internally, but still permitting an interface HLS can use
3. Improve the lexer and enable roundtripping of `[Field ann] <-> .cabal file`
4. Evaluate what Code Actions and IDE features can be implemented on top of that

## Cabal nix integration

- [Users’ survey](https://discourse.haskell.org/t/community-survey-removing-cabals-nix-integration/7201/12).
- tl;dr: most people do not use it, with some exceptions (see message by neil.mayhew).
- Some use *stack* nix integration, but I am not sure it is actually the same thing as `cabal`.
  (I am told it is by various `stack` users. *++bsa*)
  *Action Item: We kill it.*

## Other topics

- GHC 9.8

Hécate: 3.10.2.0 release will also be shipped with GHC 9.8. It needs to be patched in order to recognise it as a legal version.

On Sat, 12 Aug 2023 at 15:53, Theophile Hécate Choutri <hecate@haskell.foundation> wrote:
Hi everyone,
You'll find below the link to the agenda and minutes: 

https://hackmd.io/78RP9BOAQFiq_GM1qNRpYQ?both

Please do take the time to add the topics you want to raise. We already have a discussion about the exact-print parser that is being developed for HLS, and this would be an appropriate moment to determine our current legacy in terms of parsers within the code base.

See you next week,
Hécate