2

Hakyllライブラリを使用してプロジェクトを作成しようとしています。システムの混乱を避けるために、Hakyll プロジェクトと同じフォルダーにある cabal サンドボックスにインストールします。

多かれ少なかれ初心者なので、私はまだ害虫の慣行を正しくするのに苦労しています. 簡単なアプローチは、単に行うことです

$ cabal sandbox init
$ cabal install hakyll
$ cabal exec ghc -- --make site.hs

最後の行では、サンドボックス内のライブラリを使用して Hakyll ジェネレーターをコンパイルしています。明らかな欠点は、これが再現できないことです。クリーンなチェックアウトから再度実行しようとすると、Hakyll のメイン バージョンが変更される可能性があります。

別のアプローチは、適切なproject.cabalファイル (たとえば、このように: chromaleaves.cabal ) を作成してから、 cabal installorを実行することcabal runです。

ただ、これはちょっと情報量が多すぎる気がします。このプロジェクトを必要以上に公開するつもりはないので、そこにプロジェクト名とバージョン番号を入れる必要があるとは確信していません。(たとえば、 RubyGemfileでは、gem を自分で公開する場合を除き、ライブラリのみを指定し、他には何も指定しません。)

だから、最終的に私は次のようなファイルでそれを考え出した

$ cat project.cabal
cabal-version: >= 1.2
library
  build-depends: base   >=4.6
               , containers
               , process
               , hakyll >=4.5
               , pandoc
               , pandoc-types

私は文字が打てます

$ cabal sandbox init
$ cabal install --only-dependencies
$ cabal exec ghc -- --make site.hs

すべての依存関係をダウンロードしているようで、ファイルをコンパイルできます。

これは合理的なアプローチですか、それとも cabal ファイルの名前、バージョン、および実行可能セクションで完全な仕様を提供するのが本当にベスト プラクティスですか?

編集:どうやら、私のアプローチではできませんcabal repl。したがって、完全に異なる方法が存在するか、より完全な仕様を使用する必要があるようです。

4

1 に答える 1

5

私は Hakyll ベースの Web ページにあなたの最初のアプローチを使用しています。.cabalHakyll バージョンを固定するためにファイルを作成する必要はありません。次の行を に追加するだけcabal.configです。

constraints: hakyll == 4.5

cabal replこのアプローチでうまくいくと思いますが、site.hs手動でロードする必要があります ( :l site.hs)。または、 を使用できますcabal exec ghci -- site.hs

于 2014-05-10T00:03:47.303 に答える