繁体   English   中英

从解释到编译抢劫

[英]Going from interpreted to compiled 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”和“render”的简单组合?

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

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

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

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

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

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

但编译拼接的最大困难是由加载时间和运行时间的分割以及拼接功能的意义所引起的。 我们在维基页面的最后一节中讨论了有关迁移到Heist 0.10的内容 我们还对这背后的“原因”进行了较长时间的讨论

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM