5

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

例如:

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 网站文档。

4

1 回答 1

1

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

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

但是编译拼接的最大困难是加载时间和运行时之间的分裂以及这对拼接函数意味着什么。我们在关于迁移到 Heist 0.10的 wiki 页面的最后一节中稍微讨论了这一点。我们还对这背后的“为什么”进行了更长的讨论。

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

于 2013-07-01T20:06:40.957 回答