Haskell
ATOM
ghc
ghc-mod
stack

Haskell開発環境の構築 (Windows編)

More than 3 years have passed since last update.


はじめに

この記事では、以下二点を目標に話を進める。


  • Windows 上に最低限の Haskell 開発環境を構築する

  • Atom で ghc-mod による入力補完が使えるようにする

以下の点は扱わない。


  • cabal ファイルの書き方

  • stack の使い方


stack 導入

Haskell 環境構築のため、まずは stack を導入する。

stack は最近登場した Haskell のパッケージ管理/ビルドツール1で、色々便利なので入れておく。


GHC とライブラリの導入

導入は stack が自動でやってくれる。


  • 以下コマンドを実行

stack setup


  • 完了すると以下のようなメッセージが表示される。環境変数への追加は行わなくてもよい

Would add the following to PATH:

C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\ghc-7.8.4\bin;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\ghc-7.8.4\mingw\bin;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\git-2.4.5.1\cmd;C:\Users\<username>\AppData\Local\Programs\stack\x86_64-windows\git-2.4.5.1\usr\bin


プロジェクト作成

stack を使ってプロジェクトを作成する。

REM 作業ディレクトリに移動

cd workspace\sample

REM プロジェクトの作成
stack new

REM ビルド
stack build

REM 実行
stack exec new-template-exe


ghc-mod 導入

Haskell の高度な補完のため、 ghc-mod を導入する。

stack install cabal-install ghc-mod


ghc-mod のラッパー作成

ghc-mod などのツールは stack exec コマンド経由でのみ実行可能であり、このままでは Atom から認識できない。Atom から認識させるため、Haskell プラグイン自体を修正してもよいが、今回はラッパースクリプトを用意して対応する。


  • 以下のスクリプトをパスの通ったところに配置する。


ghc-mod.bat

@stack exec -- ghc-mod %*



ghc-mod-configure.bat

@FOR /F "usebackq" %%t IN (`stack path --snapshot-pkg-db`) DO @SET SNAPSHOT_DB=%%t

@FOR /F "usebackq" %%t IN (`stack path --local-pkg-db`) DO @SET LOCAL_DB=%%t
@FOR /F "usebackq" %%t IN (`stack path --bin-path`) DO @SET BIN_PATH=%%t
@SET PATH=%PATH%;%BIN_PATH::C:\=;C:\%
@cabal configure --package-db=clear --package-db=global --package-db=%SNAPSHOT_DB% --package-db=%LOCAL_DB%


  • プロジェクトの状態を更新する


    • cabal ファイル更新のたびに再実行が必要



REM 作業ディレクトリに移動

cd workspace\sample

REM 更新
ghc-mod-configure


Atom

以下のパッケージをインストールする


  • language-haskell

  • autocomplete-haskell

  • haskell-ghc-mod


スクリーンショット

atom-ghc-mod.png


課題


  • cabal ファイル変更時に stack build, ghc-mod-configure の再実行が必要


    • 忘れると Atom 上に大量のエラーが……

    • 自動化できそうだけど Windows のバッチファイル書きたくない




参考/関連





  1. Rubyist 向けにいうと、 stack ≒ rbenv + ruby-install + bundler + rake