EmacsでのHaskell開発(旧)
Posted on March 29, 2020
by nobiruwa
[Obsolete]
本記事は2020年9月時点ではobsoleteとなりました。新しい記事を参照してください。
tl;dr
lsp-haskellとhaskell-ide-engineを用いることで、十分に快適な環境を得ることができました。
切っ掛け
元々はinteroを愛用していましたが、lts-14.20(GHC 8.6.5)を使い始めた頃から、関数によっては補完が表示されなくなりなした。GitHubを見ると”The intero project has reached the end of its life cycle.”とあり、代替のなかからLSPと簡単に統合が可能なhaskell-ide-engineを用いることにしました。
lsp-haskell + haskell-ide-engine の構築手順
開発のモードとしてlsp-modeを用い、バックエンドにはhaskell-ide-engineを用います。そのために、lsp-haskellをインストールします。
haskell-ide-engine
haskell-ide-engineのインストール
lsp-haskellには、interoのようなバックエンドの自動インストールは実装されていないので、ソースコードからインストールします。インストール手順の詳細はhaskell-ide-engineのREADMEにあります。
私はGHC 8.6.5を使用しており、ソースコードのリポジトリを~/repo/<project-name>.git
というディレクトリ体系で管理していることから、以下のコマンドでhie
(またはhie-8.6.5
)とhie-wrapper
を~/.local/bin
ディレクトリにインストールしました。
$ mkdir -p ~/repo
$ cd ~/repo
$ git clone https://github.com/haskell/haskell-ide-engine.git --recurse-submodules haskell-ide-engine.git
$ cd haskell-ide-engine.git
$ stack ./install.hs hie # GHC 8.6.5がデフォルトのバージョンである場合
$ stack ./install.hs hie-8.6.5 # GHC 8.6.5がデフォルトのバージョンでない場合
$ stack ./install.hs -j1 hie-8.8.3 # 非力なPCではビルド時のジョブ数を制限する
Emacs
Emacsパッケージのインストール
M-x package-install
lsp-haskell
Emacsパッケージの設定
;;;;;;;;
;; lsp-haskell
;;;;;;;;
require 'lsp-haskell)
('haskell-mode-hook #'lsp) (add-hook
プロジェクトの作成
$ stack new --resolver=<resolver name> <project-name>
// example
$ stack new --resolver=lts-14.27 http-conduit-example
HIEがプロジェクトのセットアップに失敗する場合はプロジェクトの設定ファイルを作成してみます。 設定に関する詳細はREADMEの通りですが、以下に最小の設定を示します。
cradle:
stack: