# Haskell Language Server 2.6.0.0 is now available

**URL:** <https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563>\
**Category:** Announcements\
**Created:** [January 15, 2024, 5:30pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563 "2024-01-15T17:30:07Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![wz1000](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/wz1000/32/1245_2.png) [@wz1000](https://discourse.haskell.org/u/wz1000)\
**Post date:** [January 15, 2024, 5:30pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/1 "2024-01-15T17:30:07Z")

</div>

Binaries for this release are available at  
[Index of /~hls/haskell-language-server-2.6.0.0/](https://downloads.haskell.org/~hls/haskell-language-server-2.6.0.0/).

These binaries can be installed using [GHCup](https://www.haskell.org/ghcup/), using the vanilla metadata channel.

```bash
ghcup --url-source=https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-vanilla-0.0.8.yaml install hls 2.6.0.0

```

All of these tarballs have associated GPG signatures. The signature should be from `Zubin Duggal <zubin@well-typed.com>` (key ID [588764FBE22D19C4](https://keys.openpgp.org/search?q=588764FBE22D19C4)).

The prebuilt binaries in this release support the following GHC versions:

- 9.2.8
- 9.4.8
- 9.6.4
- 9.8.1

# Changelog

- Bindists for GHC 9.6.4
- A new semantic tokens plugin (#3892, @soulomoon).
- Improvements to multiple home unit support with GHC 9.4. Using cabal 3.11+ will  
load proper multiple home unit sessions by default, fixing a lot of issues with  
loading and reloading projects that have more than one component (#3462, @wz1000).
- Removed implicit-hie, resulting in better behaviour for projects without cradles.
- Don’t produce diagnostics for disabled plugins (#3941, @fendor).
- Many other bug fixes.

---

<div class="post-metadata">

**Author:** ![Lsmor](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/lsmor/32/3302_2.png) [@Lsmor](https://discourse.haskell.org/u/Lsmor)\
**Post date:** [January 15, 2024, 6:33pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/2 "2024-01-15T18:33:05Z")

</div>

> [@wz1000](#):
>
> Improvements to multiple home unit support with GHC 9.4. Using cabal 3.11+ will  
> load proper multiple home unit sessions by default, fixing a lot of issues with  
> loading and reloading projects that have more than one component

> [@wz1000](#):
>
> Removed implicit-hie, resulting in better behaviour for projects without cradles

These two are very good improvements!

---

<div class="post-metadata">

**Author:** ![danidiaz](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/danidiaz/32/92_2.png) [@danidiaz](https://discourse.haskell.org/u/danidiaz)\
**Post date:** [January 15, 2024, 8:41pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/3 "2024-01-15T20:41:35Z")

</div>

> [@wz1000](#):
>
> - A new semantic tokens plugin (#3892, @soulomoon).

Do [semantic tokens](https://github.com/haskell/haskell-language-server/issues/3931) correspond to the [Semantic Highlight](https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide) of VSCode?

---

<div class="post-metadata">

**Author:** ![soulomoon](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/soulomoon/32/2272_2.png) [@soulomoon](https://discourse.haskell.org/u/soulomoon)\
**Post date:** [January 15, 2024, 10:33pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/4 "2024-01-15T22:33:33Z")

</div>

Yes, it provides the semantic tokens for semantic highlighting.

---

<div class="post-metadata">

**Author:** ![ReleaseCandidate](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/releasecandidate/32/2849_2.png) [@ReleaseCandidate](https://discourse.haskell.org/u/ReleaseCandidate)\
**Post date:** [January 16, 2024, 7:31am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/5 "2024-01-16T07:31:23Z")

</div>

> [@danidiaz](#):
>
> Do [semantic tokens](https://github.com/haskell/haskell-language-server/issues/3931) correspond to the [Semantic Highlight](https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide) of VSCode?

Yes, it does indeed (20 character posting limit defeated).

---

<div class="post-metadata">

**Author:** ![ocharles](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/ocharles/32/102_2.png) [@ocharles](https://discourse.haskell.org/u/ocharles)\
**Post date:** [January 16, 2024, 9:24am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/6 "2024-01-16T09:24:55Z")

</div>

> [@wz1000](#):
>
> Improvements to multiple home unit support with GHC 9.4. Using cabal 3.11+ will  
> load proper multiple home unit sessions by default, fixing a lot of issues with  
> loading and reloading projects that have more than one component (#3462, @wz1000).

This is mega exciting! I see Cabal 3.11+ isn’t officially released yet. If we want to use this work is it enough to install `cabal-install` from source (the binary), or do I need to build `haskell-language-server` with a `source-repository-package` entry (so compiling HLS against a newer version of Cabal-the-library)?

---

<div class="post-metadata">

**Author:** ![wz1000](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/wz1000/32/1245_2.png) [@wz1000](https://discourse.haskell.org/u/wz1000)\
**Post date:** [January 16, 2024, 9:36am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/7 "2024-01-16T09:36:57Z")

</div>

You don’t need to recompile HLS, just install a recent enough version of the cabal-install binary.

I look forward to the bug reports 🙂

---

<div class="post-metadata">

**Author:** ![romes](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/romes/32/2912_2.png) [@romes](https://discourse.haskell.org/u/romes)\
**Post date:** [January 16, 2024, 10:38am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/8 "2024-01-16T10:38:07Z")

</div>

> [@wz1000](#):
>
> A new semantic tokens plugin

Does it being a “plugin” mean it is opt-in, or are semantic tokens used by default?

---

<div class="post-metadata">

**Author:** ![michaelpj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/michaelpj/32/417_2.png) [@michaelpj](https://discourse.haskell.org/u/michaelpj)\
**Post date:** [January 16, 2024, 11:23am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/9 "2024-01-16T11:23:26Z")

</div>

Normally plugins are enabled by default, this one is currently disabled by default (you should be able to turn it on via your editor config once the client plugins get updated). It’s disabled because a) it’s new and came in just before the release, so we’re not totally sure how stable it is, and b) full semantic tokens is… a lot, and it’s unclear if it should ever be the default.

---

<div class="post-metadata">

**Author:** ![Kleidukos](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/kleidukos/32/1213_2.png) [@Kleidukos](https://discourse.haskell.org/u/Kleidukos)\
**Post date:** [January 16, 2024, 11:36am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/10 "2024-01-16T11:36:49Z")

</div>

`ghcup install cabal --force -u https://github.com/haskell/cabal/releases/download/cabal-head/cabal-head-Linux-x86_64.tar.gz head` (with variants for x86\_64 macOS and x86\_64 Windows here: [Release cabal-head · haskell/cabal · GitHub](https://github.com/haskell/cabal/releases/tag/cabal-head))

---

<div class="post-metadata">

**Author:** ![ocharles](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/ocharles/32/102_2.png) [@ocharles](https://discourse.haskell.org/u/ocharles)\
**Post date:** [January 16, 2024, 11:48am UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/11 "2024-01-16T11:48:27Z")

</div>

Thanks, but I don’t use ghcup (I use Haskell.nix). Hopefully this helps others though!

---

<div class="post-metadata">

**Author:** ![soulomoon](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/soulomoon/32/2272_2.png) [@soulomoon](https://discourse.haskell.org/u/soulomoon)\
**Post date:** [January 16, 2024, 12:30pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/12 "2024-01-16T12:30:17Z")

</div>

It is the way now HLS organize its development and provide features. A lot of plugins.  
You can enable or disable plugins as you desire.  
And semantic tokens is still in very beta state(active development and bug fix). Welcome to helping us test it out.

---

<div class="post-metadata">

**Author:** ![juhp](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/juhp/32/323_2.png) [@juhp](https://discourse.haskell.org/u/juhp)\
**Post date:** [January 19, 2024, 1:03pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/13 "2024-01-19T13:03:35Z")

</div>

When do you think `cabal install -w ghc-9.8 haskell-language-server` will be properly supported from main Hackage?

(I had missed this release announce, didn’t surface in my discourse notifications…)

---

<div class="post-metadata">

**Author:** ![michaelpj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/michaelpj/32/417_2.png) [@michaelpj](https://discourse.haskell.org/u/michaelpj)\
**Post date:** [January 19, 2024, 2:06pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/14 "2024-01-19T14:06:50Z")

</div>

We’re basically blocked by our remaining `allow-newer`s, which you can see here: [https://github.com/haskell/haskell-language-server/blob/master/cabal.project#L91](https://github.com/haskell/haskell-language-server/blob/master/cabal.project#L91)

---

<div class="post-metadata">

**Author:** ![michaelpj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/michaelpj/32/417_2.png) [@michaelpj](https://discourse.haskell.org/u/michaelpj)\
**Post date:** [January 19, 2024, 2:08pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/15 "2024-01-19T14:08:12Z")

</div>

In fact, I see we got a release of `commutative-semigroups`, and the ekg stuff isn’t on by default, so it _might_ now actually work!

---

<div class="post-metadata">

**Author:** ![jaror](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaror/32/3271_2.png) [@jaror](https://discourse.haskell.org/u/jaror)\
**Post date:** [January 19, 2024, 2:12pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/16 "2024-01-19T14:12:11Z")

</div>

Am I reading the blame correctly that those bumps have been around for two months? That seems like an excessively long time for simple bounds extensions. Perhaps those packages should get more maintainers?

---

<div class="post-metadata">

**Author:** ![michaelpj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/michaelpj/32/417_2.png) [@michaelpj](https://discourse.haskell.org/u/michaelpj)\
**Post date:** [January 19, 2024, 2:12pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/17 "2024-01-19T14:12:59Z")

</div>

That would be nice 🙂 generally we are in a bit of an awkward situation with HLS where our dependency set is a bit higher than we would like, and we often have to do some prodding. Probably we should also try to cut down!

---

<div class="post-metadata">

**Author:** ![jaror](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaror/32/3271_2.png) [@jaror](https://discourse.haskell.org/u/jaror)\
**Post date:** [January 19, 2024, 2:15pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/18 "2024-01-19T14:15:35Z")

</div>

I see @andreasabel has [made a Hackage revision](https://github.com/tibbe/ekg-core/issues/47#issuecomment-1140487172), so ekg-core should be good to go now too.

---

<div class="post-metadata">

**Author:** ![michaelpj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/michaelpj/32/417_2.png) [@michaelpj](https://discourse.haskell.org/u/michaelpj)\
**Post date:** [January 19, 2024, 2:37pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/19 "2024-01-19T14:37:37Z")

</div>

Sadly the text bound wasn’t bumped and we still have the primitive-extras issue, it seems.

---

<div class="post-metadata">

**Author:** ![Bodigrim](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/bodigrim/32/1457_2.png) [@Bodigrim](https://discourse.haskell.org/u/Bodigrim)\
**Post date:** [January 19, 2024, 9:32pm UTC](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563/20 "2024-01-19T21:32:05Z")

</div>

> [@wz1000](#):
>
> You don’t need to recompile HLS, just install a recent enough version of the cabal-install binary.

That’s not enough if any package in your dependencies has `build-type: Custom`. As [figured out](https://github.com/haskell/cabal/issues/9632) by @TeofilC, adding the following to your `cabal.project` helps:

```cabal
allow-newer: 
  *:Cabal,
  *:Cabal-syntax

source-repository-package
    type: git
    location: https://github.com/haskell/cabal.git
    subdir: Cabal

source-repository-package
    type: git
    location: https://github.com/haskell/cabal.git
    subdir: Cabal-syntax

```

[Next page](https://discourse.haskell.org/t/haskell-language-server-2-6-0-0-is-now-available/8563.md?page=2)
