从解释到编译抢劫

时间:2013-06-11 16:59:29

标签: haskell haskell-snap-framework

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

例如:

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)]

请有人帮助我完成基本操作,或者将我指向一个带有一些最小例子的位置。我确实阅读了快照网站文档。

1 个答案:

答案 0 :(得分:1)

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

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

但是编译拼接的最大困难是由于加载时间和运行时之间的分离以及对拼接功能的意义。我们在维基页面的最后一节中讨论了migrating to Heist 0.10。我们背后还有a longer discussion of the "why"

我们还在努力改进编译Heist的API。我们非常接近完成Heist 0.13,这大大简化了API,并且应该有助于使事情更容易理解。目前位于github上new-api分支的代码非常接近准备发布。