3

如何在 setMessage 中使用类型安全的 url?

我想改变

 ...
 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 Chapter,但我发现它对所涉及的类型不是很明确。比如生产什么类型的[hamlet|...|]|?如果没有 URL-Interpolation,ghci 会报告t -> Markup但内部有 URL-Interpolation,我只会得到错误。

我对所涉及的所有类型同义词进一步感到困惑,例如[shamlet|...|]提供一些类型的东西Html,而setMessage期望一个Html ()。我不知道如何轻松查找这些内容:Hoogle 经常找不到关于该主题的任何内容,而 Google 总是会找到可能过时的版本(以及不再有效的示例) - 确定我最终会获得最新版本,但有没有地方可以我对这些有一个简单的概述?(ghci 可以列出一个类型的所有同义词吗?)

请注意,我实际上想在纯功能代码片段中生成消息,稍后由处理程序使用。这就是为什么我想将 URL 渲染与指定小村庄的地方分开。感谢您提供正确方向的任何指示!

4

1 回答 1

5

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

于 2013-03-06T17:58:55.710 回答