1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Haskell+Windows] 起動しないHLSと戦った記録

Last updated at Posted at 2022-06-25

前回の記事

HLSがghc9系に対応するようになって、前回のような事態は一時期なりを潜めましたが、今度はVSCode起動時にHLSが起動してくれないという現象に見舞われました。勘弁してくんなまし

記憶で書いてる上にログも書き慣れてないクソ文書ですが生暖かく見てください

環境

Chocolateyで導入したもの:

  • cabal 3.6.2.0 (最新)
  • ghc 9.2.3 (最新)
  • ghc 9.0.2
  • haskell-dev 0.0.1
  • haskell-language-server ←おそらく今回の主犯
  • haskell-stack 2.7.5 (最新)

現象

VSCodeでHakellプロジェクトを起動すると、起動時に各種セットアップが自動で行われるわけですが、謎の力によってうまくHLSが起動せず、エラーが出て終了する現象が発生しました。

この時コンソール経由でstack initなどを試すと、それはそれで文字コードの違いに起因するエラーやらなんやかんやがでて沼ります。沼りました。沼ると数か月帰ってこれなくなるので先にほかの可能性を考えましょう(真顔)。

個人的な要件

なるべくバージョン管理を考える場所を減らしたい
スタンドアロンかつ自動でアップデートチェックしてくれるものはともかく、既にChocolateyとMicrosoft StoreとTexLiveがある現状で、そう何個も何個もバージョン管理するソフトばっかり増やしたくありませんでした。
TUIモードが使えないならghcup使うメリット半分くらいなくない?
ghcupは現状、WindowsでTUIモードが使えません(真顔)。 なので先の条件と合わせると、自分の中でChocolateyからHaskell周りだけghcupにするメリットがかなりありません。Chocolateyでできるならその方がコスト少ないんじゃ。

解決方法

1.野放図にインストールされたghcをいったん全てアンインストール (自動除去されずChocolateyToolsやAppDataに残ってしまったものもすべて探し、パスも除去する)

2.haskell-devおよびstackをchocolateyを使って再度導入

> choco install haskell-dev
> choco install haskell-stack

3.別途ghc 9.0.2を導入

> choco install ghc -m --version 9.0.2

4.HLSをChocolateyを使わずにビルド済みのバイナリを直接入手して導入する。

5.展開したファイルに含まれている実行ファイルを適当なディレクトリ (D:\HLSなど) に置いて、パスを通す。

まとめ

今回の原因はおそらく、Chocolateyにあるhaskell-language-serverパッケージの更新が最新版に追い付いていないことだと思われます。2022年6月現在でバージョンが1.5.1であり、対応しているghcのバージョンが9.0.1までしかないため、プロジェクト側で要求したghc v9.0.2に対応できずHLSが起動不可能になったものと考えられます。

本当は修正書いてプルリク送れたら最強なんだろうな…

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?