如何使用带有setMessage的类型安全网址?
我想改变
...
setMessage [shamlet|<span .warning>Warning! See Help.|]
...
包含链接的消息。
从我迄今为止收集到的内容来看,它应该以某种方式工作
...
renderer <- getUrlRender
let html = [hamlet|<span .warning>Warning! See #
<a href=@{HelpR}> Help!|]
setMessage $ toHtml $ html renderer
...
但该代码只会让我在整个文件中出现令人困惑的错误消息。
我确实阅读了关于莎士比亚模板的印刷Yesod Book章节,但我发现它对所涉及的类型并不十分明确。例如[hamlet|...|]|
生成什么类型?如果没有URL-Interpolation,ghci会报告t -> Markup
,但内部有URL-Interpolation,我只会收到错误。
我对所涉及的所有类型同义词感到困惑,例如: [shamlet|...|]
提供Html
类型的内容,而setMessage
则需要Html ()
。我不知道如何轻松查看这些内容:Hoogle经常发现这个主题没有任何内容,而Google总是发现可能过时的版本(示例不再有效) - 确定我最终会获得最新版本,但是有一个地方我对这些进行了简单的概述? (ghci可以列出一个类型的所有同义词吗?)
请注意,我实际上希望在纯函数代码片段中生成消息,稍后由处理程序使用。这就是为什么我想将URL呈现与指定hamlet的位置分开。感谢任何指针朝着正确的方向!
答案 0 :(得分:5)
我认为你想使用getUrlRenderParams。奇怪的是,今天在IRC上提出了一个相关的讨论。哈姆雷特模板将URL呈现函数作为其第一个参数,该函数必须采用两个参数:类型安全URL和查询字符串参数列表。 getUrlRender返回一个不接受查询字符串参数的函数,这就是你需要getUrlRenderParams的原因。