我想我前段时间确实问过类似的问题,但由于 API 不稳定而没有回答。所以我在等待 0.13 过去。我不确定提出类似问题是否正确......?
runChildrenWith(Text)
解释和mapSplices
编译拼接世界的替代方案是什么?(这种组合似乎是最常见的)如果可能的话,我真的很感激一些代码示例。
如果我理解正确,我们将所有应用程序拼接在一起,然后将它们添加到heistInit
. 任何人都可以展示如何做吗?
拼接绑定标签在整个应用程序中是否必须是唯一的?
是否有完整的 snap 项目utilising
新的 API 和编译的拼接,以便我可以阅读和学习?
谢谢你。
- 更新 -
下面的答案很好。但不幸的是,有些部分(带镜片的部分)让我更加困惑。如果我理解正确,这是拼接字符串的简单方法:
mySplice = "testSplice" ## testSplice
where testSplice = return $ C.yieldRuntimeText $ do
return "text to be spliced"
如果我需要多次运行拼接字符串,比如在 5 个表中,我会这样做:
mySplices = C.manyWithSplices C.runChildren mySplice
这个对吗?
我在尝试在抢劫配置中添加接头时遇到一堆错误。
addConfig h $ mempty
{
hcCompiledSplices = "mySplice" ## mySplice -- or mySplices
}
我哪里错了?对不起,很慢。
我真正需要的(只是现在我可以理解)是拼接并显示一个我从数据库接收到的简单字符串。
-- 更新 2 --
感谢 Daniel 的极有帮助的回答,我终于可以开始工作了。
到目前为止,我得到了两种代码变体。
第一个,感谢丹尼尔
stringSplice :: Monad n => C.Splice n
stringSplice = C.manyWithSplices C.runChildren splicefuncs (return ["aa","bb","cc"])
where
splicefuncs = "string" ## (C.pureSplice . C.textSplice $ id)
和秒
testSplice :: C.Splice (Handler App App)
testSplice = return $ C.yieldRuntimeText $ return "text to be spliced"
在哪里
(C.pureSplice . C.textSplice $ id)
产生类似的结果
return $ C.yieldRuntimeText $ return "text to be spliced"
以上有区别吗?任何情况下,人们会更喜欢另一种情况吗?它们似乎产生了相同的结果。
编译的拼接库中有一个“deferMany”函数,根据文档,它产生与解释库中的 mapSplices 相似的结果。我们可以用它来代替“C.manyWithSplices C.runChildren”的组合吗?