我最近完成了“learnyouahaskell”这本书,现在我想通过构建一个yesod应用程序来应用我获得的知识。
但是我不确定如何开始。
关于如何设置yesod项目似乎有两种选择。一个是Stack,另一个是cabal沙箱。
但是有什么区别(如果有的话?)和它们之间的相似之处?一个算是最佳做法而另一个不算?
yesod quickstart建议使用堆栈,这样可以,还是应该使用cabal sanbox?
答案 0 :(得分:3)
实际上有三种不同的包在这里讨论过。
cabal-install
是构建应用程序的当前稳定二进制文件。stack
最近刚刚向公众发布。我相信它正在尝试将cabal-install
替换为更好,更方便的工具。至少,它向Haskell社区展示了不同的东西。Cabal
是cabal-install
和stack
所依据的图书馆。至于前两个工具之间的差异。
cabal-install
是一个成熟的应用程序,几乎在Haskell社区的所有地方都使用过(至少在开源中,我不知道人们在闭门造车时做了什么)。
stack
仍然是一些新项目中使用的新应用程序(至少对公众而言)。可以找到更多信息here。但其中一些亮点是:
stack build
将安装GHC(Haskell编译器)以及项目所需的依赖项。stack
运行stackage。这是hackage的精选版本。意思是你可以期望不同的包能够很好地相互配合。导致可重复的构建。这两个应用程序的优点在于它们可以被不同的人用于同一个项目。如果您决定要将cabal-install
与沙箱一起使用,并且有人出现并想要帮助您完成项目,他们只需添加stack
需要的文件,他们就可以使用stack
你继续使用cabal-install
。反之亦然。
here是第一次使用stack
后的一次体验。他们声称开始使用起来有点容易,因为开始时需要的步骤少一些。如果不出意外,人们会强调每种工具的优缺点。
注意:我仍然是Haskell的新手,并且从未真正使用过stack
。 我实际上被告知要远离它,除非在中构建一些东西。yesod
编辑:正如此回答中的评论中所述,我认为我错误地代表了人们告诉我有关堆栈的内容。当我问我是否应该切换到堆栈时,人们给我的评论更多的是,如果你使用cabal沙箱足够舒服,除非遇到问题,否则没有理由切换到堆栈< / em>的
答案 1 :(得分:3)
Yesod的首席开发人员(Michael Snoyman)积极参与Stack工具。所以,我建议你用Stack设置Yesod。此外,Yesod有一组非常复杂的依赖项,并使用Stackage作为默认的策划源,在安装过程中非常有用(默认情况下Stack负责)。
同样read this post用于理解Stack与cabal的区别。