はじめに
今までは、GHCを直接インストールして使っていたが、stackを使う方が簡単らしいので、導入方法についてまとめました。
Macの場合
brewで入れるのが簡単。
$ brew install haskell-stack
グローバルの設定を行う場合は、~/.stack/global-project/stack.yaml
を開いて設定する。今回は、Haskellのバージョンを設定するresolverのところを最新版にしてみる。
resolverはLong-Term-Supportのバージョンで指定するのが一般的。例えば、次のようにする。
resolver: lts-5.17
あるいは、直接GHCのバージョンで指定してもOK
resolver: ghc-8.0.1
もしくは、最新版をビルドの日付で指定しても良い。
resolver: nightly-2016-06-01
ちなみに、stack.yamlの全体で次のようになる。
flags: {}
extra-package-dbs: []
packages: []
#extra-deps: []
extra-deps:
- pipes-http-1.0.2
#resolver: lts-5.17
#resolver: ghc-8.0.1
resolver: nightly-2016-06-01
(#から始まるのはコメント)
extra-depsは、特別に依存しているライブラリを入れる場合。通常はプロジェクトごとのstack.yamlで設定するので、グローバルのstack.yamlには入れなくて良い。
stack.yamlの設定ができたら、
$ stack setup
を一回実行する。
Windowsの場合
chocolateyで入れるのが簡単なようだが、試していない。
自分は、
https://github.com/commercialhaskell/stack/releases/
からWindows 64ビット版インストーラをダウンロードして実行した。
グローバルの設定は、
%USERPROFILE%\AppData\Roaming\stack\global-project\stack.yaml
を編集して行う。編集内容は、Macのときと同じ。
そして、コマンドプロンプトから
> stack setup
を実行すればOK
最初のアプリケーション
適当な作業ディレクトリに移動して
$ stack new app1
これで、app1ディレクトリが作成され、そこにアプリの雛形が作成される。
stack.yaml は、このアプリケーションで使う設定ファイル。Haskellのバージョンや読み込む外部ラリブリを設定出来る。
app1.cabal も、このアプリケーションで使う設定ファイル。ライブラリの依存性などを設定する。
今回は、設定は何も変更しない。最初に、一度buildを行う
$ stack build
(stack.yamlやapp1.cabalを変更したときも、stack buildを一度実行する)
app/Main.hsを編集する。今回は、何もモジュールを使わないので、次のようにする。
module Main where
main :: IO ()
main = print "Hello World!"
そして、実行
$ stack runghc app/Main.hs
"Hello World!"と表示されれば成功
追記
開発環境を充実させていくには、
http://qiita.com/td2sk/items/9e4b49a4a31b7138d3ad
に丁寧な説明がある。
2018/04/24追記
GHSとバージョンの対応はこちらを参照
https://wiki.haskell.org/Base_package