Windows10でHaskell開発環境を構築する(Stack, HIE, VsCode)

概要

Windows10でHaskell開発環境を構築する手順を示す。

環境

以下手順を実施した際の環境

  • Windows 10 Pro (バージョン 2004)
  • Stack
    • Version 2.3.1, Git revision de2a7b694f07de7e6cf17f8c92338c16286b2878 (8103 commits) x86_64 hpack-0.33.0
    • stack --version
  • GHC
    • 8.6.5
  • HIE
    • commit hash : a9005b2ba2050bdfdd4438f1d471a3f7985492cd

注意点

  • 以下の手順はとくに問題が発生しなくても1~2時間程度かかる
  • 夜間などのネットワークが混み合う時間帯だとGHCのダウンロードにとても時間がかかる(2~3時間)なので朝方のネットワークが比較的空いている時間帯、もしくは http_proxy 経由を推奨

手順

Stackのインストール

stack-2.3.1-windows-x86_64-installer.exe をダウンロードして実行する。

github.com

Stack Setup

とくに何も付けず stack setup するとGHC latest の 8.8.3 をダウンロードしようとするが 8.8.3 は以下のビルドエラーが発生するので他バージョンを選択する。

gitlab.haskell.org

ここでは後手順のHIEビルドに対応している 8.6.5 を指定してsetupする。
管理者権限コマンドプロンプトを開いて以下を実行する。(ネットワークが空いている時間帯推奨)

stack --resolver ghc-8.6.5 setup

ウイルス対策ソフトによって Permission Denied エラーになる場合があるらしいが自環境では特に何も無かった。
GHCのダウンロードは空いている時間帯だと30分程度、混んでいる時間帯だと2~3時間程度かかる。

インストールされた Stackのversionを確認

stack --version

GHCのversionを指定

stack config set resolver ghc-8.6.5

インストールしたGHCのversionを確認

stack ghc -- --version

HIEのビルド

前準備

以下を確認する。地味にPATHが通ってないことがあるので注意

  • stack にPATHが通っていること
  • git にPATHが通っていること
  • stackのlocal binにPATHが通っていること

clone

HIEのリポジトリをクローンする。
ビルド時の生成ディレクトリが長くなりWindowsのパス最大長を超える場合があるのでCドライブ直下にcloneするのが無難

C:\> git clone https://github.com/haskell/haskell-ide-engine --recursive hie

hieディレクトリでコマンドプロンプトを開いて以下を実行する

chcp 65001
stack ./install.hs hie-8.6.5
stack ./install.hs data

注意:chcpしてcmdの文字コードを変更しないとビルドエラーになる

ビルドは20~30分程度かかります。

ビルドが完了すると stack path --local-bin ディレクトリ配下に hie.exe 等が生成される。

f:id:hkou:20200718115450p:plain

Haskell Language Server (VSCodeの拡張)をインストール

marketplace.visualstudio.com

VSCodeを開いて拡張機能から Haskell Language Server を検索してインストールする。

設定から Hie Executable Path に先程の hie.exe へのパスを記入する。 f:id:hkou:20200718115900p:plain

試す

エディタの補完やGotoDef等が動くか試してみる

プロジェクトを作成する

任意のディレクトリにプロジェクトを作成する。
今回は hello-world プロジェクトとした。

stack new hello-world

GHCのversionを 8.6.5 に変更しておく。

cd hello-world
stack config set resolver ghc-8.6.5

hello-world ディレクトリでVSCodeを開き、型ヒントや定義元ジャンプ、補完機能が利用できるか確認する。

f:id:hkou:20200718120758p:plain

ビルド

stack build

実行

stack run

参考

qiita.com