【问题标题】:Going from interpreted to compiled heist从解释型抢劫到编译型抢劫
【发布时间】:2013-06-07 15:13:20
【问题描述】:

我似乎无法掌握编译的抢劫概念。网络上没有任何例子。我将如何将简单的代码 sn-ps 从解释型更改为编译型。

例如:

listUsersH :: AppHandler ()
listUsersH = do
  users <- liftIO $ getColList "users"
  let userListS = mapSplices userLinkS users
  heistLocal (bindSplice "users" userListS) $ render "list-users"
  where
    userLinkS d = runChildrenWithText [("user",T.pack $ at "uname" d)]

如何将“runChildren”、“mapSplices”、“bindSplice”和“render”与已编译的抢劫进行简单组合?

我知道这个概念是不同的,没有“heistLocal”。但我现在需要回去重新学习如何做一些基本的事情,比如以“for each”循环的方式显示一堆记录.有人可以澄清这一点并展示一个像上面那样但带有编译抢劫的简单示例吗?

目前我什至不知道如何用编译的抢劫进行简单的变量替换。 例如,这个:

simpleString = "Insert me..."
insertString = heistLocal (bindSplices spl) $ render "tst"
where
  spl = [("var", textSplice simpleString)]

请有人帮助我了解基础知识,或者通过一些简单的示例为我指出一个位置。我确实阅读了 snap 网站文档。

【问题讨论】:

    标签: haskell haskell-snap-framework


    【解决方案1】:

    编译后的拼接肯定更难使用。一方面,所有接头必须在前面静态绑定。这需要在思维方式上进行相当大的转变。以前,使用 heistLocal 您可以将拼接视为具有有限范围的事物,可以在需要时进行绑定。您可以使用请求中的信息在处理程序中做出决定,然后相应地绑定拼接。您仍然可以使用已编译的拼接做类似的事情,但它需要控制反转。现在你必须在拼接中进行这种基于请求的动态决策(这是一个围绕你的处理程序 monad 的 monad 转换器,所以你仍然可以访问处理程序函数)。

    我建议将已编译的拼接视为您向网页设计师提供的全局资源,他们可以在任何页面上使用,但他们认为合适。以这种方式查看接头有几个优点。首先,它使它们比与 heistLocal 绑定的专用拼接更正交和可组合。其次,它使调试更容易,因为您永远不必担心拼接是否已绑定。

    但是编译拼接的最大困难是加载时间和运行时之间的分裂以及这对拼接函数意味着什么。我们在 wiki 页面的最后一部分讨论了这个关于migrating to Heist 0.10 的内容。我们也有a longer discussion of the "why" 支持。

    我们还在努力改进已编译 Heist 的 API。我们非常接近完成 Heist 0.13,它显着简化了 API,应该有助于使事情更容易理解。目前在 github 上的 new-api 分支中的代码已经接近发布。

    【讨论】:

    • 好的。那么,你会建议现在坚持使用解释变体吗?好吧,至少在您整理出 API 并稳定它们之前。老实说,我仍然无法理解这个概念......它还没有点击。所以我会在makeSnaplet函数一开始就绑定和处理所有的拼接,对吧?
    • 您不必一次完成所有操作,但您必须使用 addConfig 函数添加所有已编译的拼接。是否切换取决于您想要成为的前沿。我预计 new-api 分支不会发生更多变化。我的待办事项清单上唯一剩下的就是添加一两个更多功能。那里的一切都应该非常稳定。在发布 0.13 之前,我不会给出这个问题的具体代码答案,但是如果你在 IRC 上找到我,我可以为你指明正确的方向。
    • 谢谢你,mightybyte,我会在 0.13 发布后等待你的一些例子。至少是最常见的模式。这将非常有用,因为网络上什么都没有。直到那时,我都会坚持使用解释变体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多