web-dev-qa-db-ja.com

HaskellのスタックプログラムとリゾルバーおよびLTSバージョンを理解する

stack and stackage.org の使い方を理解しようとしています。私が最初にインストールして使用したとき、stackage.orgはLTS-3.8(「リゾルバー」)にありました。それ以来、stackage.orgにはLTS-3.11があります。

まず、これが何を意味するのかを確認したいと思います。 Stackageはパッケージのリポジトリであり、特定のLTSバージョン(たとえば3.8)について、パッケージが連携して動作することが確認されています。したがって、LTS-3.8のパッケージは連携して動作し、LTS-3.11のパッケージも連携して動作します。先に進む...

実行するとstack new projectname、スタックは私に教えてくれます:

Checking against build plan lts-3.8
Selected resolver: lts-3.8

これは、LTS-3.8で検証されたパッケージとバージョンのみを使用するようにプロジェクトが設定されていることを意味しますか?

新しいプロジェクトを開始し、新しいプロジェクトで最新のLTSバージョンを使用したい場合、デフォルトでそれを行うようにスタックに指示するにはどうすればよいですか?

古いプロジェクトを「アップグレード」して新しいLTSバージョンを使用したい場合はどうなりますか?

24
Ana

これは、LTS-3.8で検証されたパッケージとバージョンのみを使用するようにプロジェクトが設定されていることを意味しますか?

丁度。 (LTS 3.8セットに含まれていないパッケージが必要な場合は、extra-depsstack.yamlセクションからパッケージを指定できます。スタックはHackageからパッケージを取得し、プロジェクトに影響を与えることなく個別にインストールします。 LTSスナップショットまたは他のプロジェクト。)

新しいプロジェクトを開始し、新しいプロジェクトで最新のLTSバージョンを使用したい場合、デフォルトでそれを行うようにスタックに指示するにはどうすればよいですか?

たとえば、 stack new projectname --resolver=lts-3.11は、新しいプロジェクトのリゾルバーを設定します。スタックのデフォルトは、すでに使用している最新のLTSスナップショットであるため、最新のLTSを使用するプロジェクトが作成されると、将来、新しいプロジェクトがそれに続きます。

古いプロジェクトを「アップグレード」して新しいLTSバージョンを使用したい場合はどうなりますか?

stack.yamlファイルのresolverフィールドを変更します。変更は、次にプロジェクトをビルドするときに有効になります。

24
duplode