Haskell Language
スタック
サーチ…
スタックのインストール
Mac OSX
自作を使う:
brew install haskell-stack
シンプルなプロジェクトを作成する
helloworldというプロジェクトを作成するには:
stack new helloworld simple
これにより、 helloworld
というディレクトリが作成され、スタックプロジェクトに必要なファイルが作成されます。
構造
ファイル構造
シンプルなプロジェクトには以下のファイルが含まれています:
➜ helloworld ls
LICENSE Setup.hs helloworld.cabal src stack.yaml
フォルダsrc
には、 Main.hs
という名前のファイルがあります。これはhelloworld
プロジェクトの「出発点」です。デフォルトでは、 Main.hs
には単純な "Hello、World!"プログラム。
Main.hs
module Main where
main :: IO ()
main = do
putStrLn "hello world"
プログラムの実行
あなたがディレクトリhelloworld
、以下を実行していることを確認してください:
stack build # Compile the program
stack exec helloworld # Run the program
# prints "hello world"
パッケージの積み重ねとLTS(リゾルバ)バージョンの変更
Stackageは、Haskellパッケージのリポジトリです。これらのパッケージをスタックプロジェクトに追加することができます。
プロジェクトにレンズを追加する。
スタックプロジェクトには、 stack.yaml
というファイルがあります。 stack.yaml
には次のようなセグメントがあります:
resolver: lts-6.8
Stackageは、のすべてのリビジョンのためのパッケージのリストを保持しますlts
。私たちの場合は、 lts-6.8
用のパッケージのリストが必要です。これらのパッケージを見つけるには:
https://www.stackage.org/lts-6.8 # if a different version is used, change 6.8 to the correct resolver number.
パッケージを見ると、 レンズ4.13があります。
helloworld.cabal
のセクションを変更して言語パッケージを追加できるようになりました:
build-depends: base >= 4.7 && < 5
に:
build-depends: base >= 4.7 && 5,
lens == 4.13
明らかに、新しいLTSを(それがリリースされた後に)変更したい場合は、リゾルバ番号を変更するだけです:
resolver: lts-6.9
次のstack build
スタックはLTS 6.9バージョンを使用し、したがっていくつかの新しい依存関係をダウンロードします。
スタックプロジェクトのビルドと実行
この例では、プロジェクト名は「helloworld」です。これは、 stack new helloworld simple
をstack new helloworld simple
で作成したものです
まず、 stack build
を使用してプロジェクトを構築してから、
stack exec helloworld-exe
スタックインストール
コマンドを実行すると
stack install
スタックは実行可能ファイルをそのフォルダにコピーします
/Users/<yourusername>/.local/bin/
スタックによるプロファイリング
stack
を使用してプロジェクトのプロファイリングを設定しstack
。まず、-- --profile
フラグを使ってプロジェクトをビルドします。
stack build --profile
GHCフラグは、 -prof
ように動作するためにカバールファイルでは必要ありません。 stack
は、プロジェクト内のライブラリと実行可能ファイルの両方のプロファイリングを自動的に有効にします。次回実行可能ファイルがプロジェクトで実行されるときは、通常の+RTS
フラグを使用できます。
stack exec -- my-bin +RTS -p
依存関係の表示
あなたのプロジェクトが直接依存しているパッケージを知るには、次のコマンドを使います:
stack list-dependencies
このようにして、依存関係のどのバージョンがスタックによって実際にプルダウンされているかを知ることができます。
Haskellのプロジェクトは頻繁に間接的に多くのライブラリを引き出していることが多く、時にはこれらの外部依存関係が追跡する必要がある問題を引き起こします。あなたが識別したい不正な外部依存関係を見つけた場合は、依存グラフ全体を網羅し、どの依存関係が最終的に望ましくないパッケージを引っ張っているのかを特定することができます:
stack dot --external | grep template-haskell
stack dot
は、検索可能なテキスト形式の依存グラフを出力します。それはまた見ることができる:
stack dot --external | dot -Tpng -o my-project.png
必要に応じて、依存関係グラフの深さを設定することもできます。
stack dot --external --depth 3 | dot -Tpng -o my-project.png