用于沙箱的最小cabal文件

时间:2014-05-09 23:33:48

标签: haskell cabal hakyll

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

或多或少是初学者,我仍然在努力让害虫做法正确。一个简单的方法就是做

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

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

另一种方法是编写正确的project.cabal文件(例如:chromaticleaves.cabal),然后执行cabal installcabal run

但是,我觉得这可能有点太多信息了。由于我不打算发布这个项目,我不是真的相信我需要在那里放一个项目名称和版本号。 (例如,在Ruby Gemfile中,除了我想自己发布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。所以要么存在一种完全不同的方式,要么似乎我必须采用更全面的规范。

1 个答案:

答案 0 :(得分:5)

我将自己的第一种方法用于基于Hakyll的网页。您不需要创建.cabal文件来固定Hakyll版本,您只需要将以下行添加到cabal.config

constraints: hakyll == 4.5

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