2013-06-11 34 views
5

我似乎无法掌握已编译的heist概念。无论如何,网上都没有例子。我将如何去改变从解释到编译的简单代码片段。从解释到编译heist

例如:

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” 和 “渲染” 编译抢劫?

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

此刻我甚至不知道如何做简单的变量替换编译heist。 举例来说,这样的:

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

请别人帮我的基础知识或指向我的一些例子最小的位置。我确实阅读了快照网站文档。

回答

1

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

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

但编译拼接的最大困难是由加载时间和运行时间之间的分割以及拼接函数的意义所引起的。我们在关于migrating to Heist 0.10的维基页面的最后一节讨论了这一点。在这之后我们也有a longer discussion of the "why"

我们还在努力改进编译后的Heist的API。我们非常接近完成海斯特0.13,这大大简化了API,应该有助于让事情变得更容易理解。 github上new-api分支中的代码已经准备好发布了。 OK。

+0

OK。那么,你会建议现在坚持解释的变体吗?那么,至少在你理清API并稳定它们之前。我仍然无法理解这个概念,说实话...它还没有点击。所以我会在makeSnaplet函数的最开始绑定和处理所有的拼接,对吧? –

+0

您不必一次完成所有操作,但您必须使用addConfig函数来添加所有已编译的拼接。你是否切换取决于你想成为如何出血的边缘。我没有预见到新的api分支会发生更多变化。我的待办事项列表中剩下的唯一东西是添加一个或两个以上的功能。那里的一切都应该相当稳定。在我发布0.13之前,我不会给出具体的代码答案,但如果您打开IRC,我可以指出您正确的方向。 – mightybyte

+0

谢谢mightybyte,我会在0.13发布后等待你的一些例子。至少最常见的模式。这将是非常有用的,因为网上没有任何东西。到现在为止,我会坚持使用解释的变体。 –