Haskell 环境

Haskell Environment

我最近完成了这本书 "learnyouahaskell",现在我想通过构建一个 yesod 应用程序来应用我学到的知识。

但是我不确定如何开始。

关于如何设置 yesod 项目,似乎有两种选择。一个是 Stack,另一个是 cabal 沙箱。

但是它们之间的区别(如果有的话?)和相似之处是什么?一个算作最佳实践而另一个算作最佳实践吗?

yesod quickstart 建议使用 stack,这样好还是我应该使用 cabal sanbox?

这里实际上讨论了三种不同的软件包。

  1. cabal-install 是用于构建您的应用程序的当前稳定二进制文件。
  2. stack 最近刚刚发布到 public。我相信它正在尝试取代 cabal-install 作为更好、更方便的工具。至少,它向 Haskell 社区展示了一种不同的方式。
  3. Cabalcabal-installstack 所基于的库。

至于前两个工具的区别。

cabal-install 是一个成熟的应用程序,在 Haskell 社区中几乎无处不在(至少在开源领域,我不知道人们在闭门造车做什么)。

stack 仍然是一些新项目中使用的新应用程序(至少对于 public)。可以找到更多信息 here。但一些亮点是:

  • 运行 stack build 在项目目录中将安装 GHC(Haskell 编译器)以及项目所需的依赖项。
  • stack,默认情况下,用完 stackage. Which is a curated version of hackage。这意味着您可以期望不同的包可以很好地相互配合。导致可重现的构建。
  • 如果您愿意,您仍然可以使用黑客技术。

这两个应用程序的伟大之处在于它们可以被不同的人用于同一个项目。如果您决定要将 cabal-install 与沙箱一起使用,并且有人出现并希望为您的项目提供帮助,他们只需添加 stack 需要的文件,然后他们就可以使用 stack 而您继续使用 cabal-install。反之亦然。

here 是一个人第一次使用 stack 后的体验。他们声称开始更容易一些,因为开始需要的步骤更少。如果不出意外,人们会强调每种工具的优缺点。

注意:我对Haskell还是很陌生,从未真正使用过stack我实际上被告知要远离它,除非在 yesod.

中构建一些东西

编辑:如该回答下的评论所述,我相信我误解了人们告诉我的有关堆栈的内容。当我问我是否应该切换到堆栈时,人们给我的评论更多的是,如果你使用 cabal 沙箱足够舒服,没有理由切换到堆栈,除非你有问题.

Yesod 的首席开发人员 (Michael Snoyman) 积极参与 Stack 工具。因此,我建议您使用 Stack 设置 Yesod。此外,Yesod 有一组相当复杂的依赖项,并且使用 Stackage 作为默认的精选源,对安装过程有很大帮​​助(默认情况下由 Stack 负责)。

另外read this post了解 Stack 与 cabal 的区别。