r.s*_*cky 5 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)]
Run Code Online (Sandbox Code Playgroud)
如何使用编译的抢劫执行"runChildren","mapSplices","bindSplice"和"render"的简单组合?
我理解这个概念是不同的,没有"heistLocal"..但我现在需要回过头来重新学习如何做一些基本的事情,比如以"for each"循环方式显示一堆记录.有人可以澄清这一点,并显示一个简单的例子,如上面的那个,但编译抢劫?
目前我甚至不知道如何使用编译的抢劫进行简单的变量替换.例如,这个:
simpleString = "Insert me..."
insertString = heistLocal (bindSplices spl) $ render "tst"
where
spl = [("var", textSplice simpleString)]
Run Code Online (Sandbox Code Playgroud)
请有人帮助我完成基本操作,或者将我指向一个带有一些最小例子的位置.我确实阅读了快照网站文档.
编译的拼接肯定更难使用。其一,所有接头必须在前面静态绑定。这需要观念上的重大转变。之前,使用 heistLocal 您可以将拼接视为范围有限的事物,可以在需要时进行绑定。您可以使用请求中的信息在处理程序中做出决定,然后相应地绑定拼接。您仍然可以使用编译的拼接执行类似的操作,但它需要控制反转。现在,您必须在 splice 内部进行基于请求的动态决策(这是围绕处理程序 monad 的 monad 转换器,因此您仍然可以访问处理程序函数)。
我建议将编译的拼接视为全局资源,您可以将其提供给网页设计人员,他们可以在任何页面上使用他们认为合适的方式。以这种方式查看接头有几个优点。首先,与与 heistLocal 绑定的专门拼接相比,它使它们更加正交和可组合。其次,它使调试更容易,因为您永远不必担心拼接是否已绑定。
但编译拼接的最大困难是由加载时间和运行时之间的划分以及这对拼接函数意味着什么造成的。我们在 wiki 页面的最后一部分有关迁移到 Heist 0.10 的内容中对此进行了一些讨论。我们还对这背后的“原因”进行了更长时间的讨论。
我们还在努力改进编译 Heist 的 API。我们非常接近完成 Heist 0.13,它显着简化了 API,应该有助于让事情变得更容易理解。目前 github 上new-api分支中的代码已经非常接近准备发布了。
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |