niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

ghcupでstackをinstallしたら stack upgradeしてはいけない

Pandocを見ているときに気づかぬうちにやっていたぽいね。

VSCodeでHLSがうまく動かないな…と思って調べていて気づいたのでメモ。 ただし、「HLSが動かないな…」と思っていたのは勘違いであったが、よく考えると一周回って勘違いじゃなくなったのでそれもメモ。

前提

実行環境はWin10+WSL2(Ubuntu18.04LTS)です。

HLSについてはこの記事が参考になります。VSCodeで動くHaskellIDEです。

https://zenn.dev/konn/articles/1a60baba9848a1

ghcupはHaskellインストーラです。ghc, cabal, hls, stack, ghcup(自身)をインストール、管理できます。

https://www.haskell.org/ghcup/

ghcupについてはこちらの記事が参考になります。

https://qiita.com/takayuki-uchida/items/07f0df29780ae2d6029b

ghcup set ...を使わないとインストールしてもバージョン切り替わらないな…という事があるので注意(ghcだけかも。あと記事には書いてある( 他のは自動で切り替わったので)

ghcup listでインストール済みのバージョンがリストで出るので確認しましょう。私はghcのバージョンが古いままだったのでhlsが動く最新に上げました。

f:id:niszet:20210719070620p:plain

VSCodeでHLSがうまく動いていないと思った理由は、適当なHaskellのライブラリを(Pandoc関係だけど)もってきて見ていた時に、マウスをかざしても何もpopupされなかったからでした。

今の理解では、VSCodeで編集(作成)するとHLSが正しく動き始めてライブラリ全体のファイルを見にいくような挙動をするので、読み込みだけしているとその処理がされないので一旦editして処理がはじまるのを待とう、ということになりました。

本題。

記事のタイトルはghcupでstackをインストールした際に出てくるメッセージをちゃんと見ようねっていうことですね。

!!! Additionally, you should upgrade stack only through ghcup and not use 'stack upgrade' !!!

stack upgradeすると、どうやら~/.local/bin/以下にstackが別途インストールされてしまう模様(私の環境では。which stackでどこにあるか確認してください)。で、ghcupの管理から外れてしまうのでやめましょうねという。

ghcupでインストールする場合は/home/niszet/.ghcup/bin/stackに入るはずです(私と同じ環境の場合)

最後にもう一つ。ghcupでインストールしたhlsを使い場合はVSCodeHaskell拡張の設定のServer Executable Pathにそのpathを書かないとダメです。

f:id:niszet:20210719072621p:plain

私の場合は/home/niszet/.ghcup/bin/haskell-language-server-8.10.5になります。

hlsはまだ9.0.xに対応していない?ようなので、recommendedのついている8.10.5とそれに対応したhlsのバージョンを指定して設定しましょう(bin/までの指定ではダメだった)

1時間くらい溶かしたので、覚書。やったことは書かないと忘れるので。