TL;DR
Что вы можете попробовать сделать:
Попробуйте собрать более старые версии библиотеки, которая создает проблемы при помощи
cabal install
, например,cabal install sorted-list-0.2.2.0
Если проблема не воспроизводится на более старых версиях библиотеки, попробуйте собрать проект с более старой версией библиотеки через ручное ограничение версии зависимости сборки. Для GHCup это выглядит так:
ghcup compile hls --version 2.9.0.0 --ghc 9.4.7 --cabal-update -j 8 -- --constraint="sorted-list == 0.2.2.0"
. Дляcabal
требуется только передать флаг--constraint
При сборке Haskell Language Server (2.9.0.0) из исходников под нужную мне версию GHC я столкнулся со следующей ошибкой:
[ Info ] Building HLS 2.9.0.0 for GHC version 9.4.7
[ cabal ] |
[ cabal ] 375 | traverse f = foldrM (\x xs -> liftA2 insert (f x) $ pure xs) mempty
[ cabal ] | ^^^^^^
[ cabal ] Error: [Cabal-7125]
[ cabal ] Failed to build sorted-list-0.2.3.0 (which is required by exe:haskell-language-server-wrapper from haskell-language-server-2.9...
[ cabal ]
[ Error ] [GHCup-08841] BuildFailed failed in dir /home/ilya/.ghcup/tmp/ghcup-82b3afde9bf5bd5b/haskell-language-server-2.9.0.0: Process "cabal" with arguments...
HLS настойчиво отказывался собираться при любых версиях HLS и GHC, причем все связано с одной библиотекой. При попытке ручной сборки оказалось, что библиотеке не хватает функций:
> cabal install sorted-list-0.2.3.0
Data/SortedList.hs:375:31: error:
Variable not in scope:
liftA2
:: (a0 -> SortedList a0 -> SortedList a0)
-> m b -> f0 (SortedList b) -> m (SortedList b)
|
375 | traverse f = foldrM (\x xs -> liftA2 insert (f x) $ pure xs) mempty
| ^^^^^^
Error: [Cabal-7125]
Failed to build sorted-list-0.2.3.0. See the build log above for details.
Возможно, это связано с какими-то особенностями целевой системы (сборка велась под Gentoo), или просто версия библиотеки была нерабочей, но при этом попадала в ограничения версий HLS. В любом случае, при откате библиотеки на версию назад, оказалось что проблема сборки библиотеки не воспроизводится. Итоговое решение - собрать HLS с более старым sorted-list
.
ghcup compile hls --version 2.9.0.0 --ghc 9.4.7 --cabal-update -j 8 -- --constraint="sorted-list == 0.2.2.0"
На данный момент ничего не сломалось, надеюсь вам поможет мой опыт.