2

我正在尝试用Hakyll库编写一个项目。为了避免弄乱我的系统,我将它安装在我的 Hakyll 项目所在的同一文件夹中的 cabal 沙箱中。

作为或多或少的初学者,我仍在为正确处理害虫而苦苦挣扎。一个简单的方法是做

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

最后一行使用沙箱中的库编译我的 Hakyll 生成器。明显的缺点是这是不可重现的。当我尝试从干净的结帐中再次运行它时,Hakyll 的主要版本可能会发生变化。

另一种方法是编写一个适当的project.cabal文件(例如:chromaticleaves.cabal),然后执行cabal installcabal 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 的网页。您无需创建.cabal文件来固定 Hakyll 版本,只需将以下行添加到cabal.config

constraints: hakyll == 4.5

我认为这cabal repl适用于这种方法,但您需要site.hs手动加载(:l site.hs)。或者你可以使用cabal exec ghci -- site.hs.

于 2014-05-10T00:03:47.303 回答