使用带有setMessage的类型安全的URL? (Shamlet与hamlet)

时间:2013-03-06 14:10:16

标签: yesod hamlet

如何使用带有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的位置分开。感谢任何指针朝着正确的方向!

1 个答案:

答案 0 :(得分:5)

我认为你想使用getUrlRenderParams。奇怪的是,今天在IRC上提出了一个相关的讨论。哈姆雷特模板将URL呈现函数作为其第一个参数,该函数必须采用两个参数:类型安全URL和查询字符串参数列表。 getUrlRender返回一个不接受查询字符串参数的函数,这就是你需要getUrlRenderParams的原因。