我想深入研究Yesod Web框架,但我不确定如何做到这一点。如果我可以在GHCi中单独和交互地测试每种方法,那将是完美的。所以我真的想知道它是如何在内部工作的。它不仅仅是关于如何使用Yesod或任何其他库。这是一种合理的方法吗?如何处理其他人在Haskell中学习新的库?
答案 0 :(得分:3)
Yesod严重依赖模板Haskell,quasiquotes和编译,甚至模板。您可以在命令行上对它进行一定程度的测试,但这将非常不方便。但是,Yesod Book非常全面,并且提供了初学者友好的介绍。
答案 1 :(得分:3)
Web框架并不是最简单的方法,因为它们需要大量的上下文。由于他们主要处理网络通信,因此他们总是必须在某些monad(至少IO)中运行。今天三个最流行的Haskell Web框架都定义了自己的monad以使事情更方便。通常,这将包括一个很好的状态,以跟踪标题,解析的查询字符串和发布参数等事情。这意味着,如果您想要测试至少一些Web服务器API,您将不得不具有完整的HTTP请求和/或Web服务器monad从请求派生的基础数据。
现在可以创建一个API,使上述所有内容变得更容易。 Yesod的版本是在wai-test包中。 Snap的版本位于snap-core的Snap.Test模块中。
Yesod还非常依赖于模板Haskell(TH),这是Haskell的元编程库(如Lisp宏)。所有三个Web框架都使用了TH,但是Yesod使用它的定制的quasiquoted DSL更加重要。 TH需要两次传球。首先,您必须编译TH代码,然后执行该代码,生成新代码。然后新代码将与其他所有内容一起编译到您的程序中。这种双通系统意味着一般来说,需要TH的代码在GHCi中比在没有它的代码中更难用。
通常在我的Web应用程序中,我不只是从头开始运行GHCi。我经常加载我写的另一个代码文件。这允许我们解决Template Haskell问题,因为模板Haskell部分在文件中指定,并且代码在我启动GHCi时生成。从那时起,你可以玩任何生成的函数。
答案 2 :(得分:1)
使用ghci是一种学习库的好方法,但对于像yesod这样的框架,你需要先熟悉一下这个结构。
我建议您先关注tutorial。熟悉基本代码结构后,您可以专注于相关的库,例如,路线,模板,持久性。在学习这些库时,ghci将成为你的朋友。