首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用hamlet在yesod中发送电子邮件

尝试使用hamlet在yesod中发送电子邮件
EN

Stack Overflow用户
提问于 2012-04-10 06:03:10
回答 3查看 430关注 0票数 3

我正在Yesod (0.10)中构建一个调查站点,并且迷失在类型中。这是我正在尝试做的事情的一个简化版本。

代码语言:javascript
复制
invitation url = do
   render <- getUrlRender
   return $ renderHtml [hamlet|
<p>Dear foo, please take our 
   <a href=@{ShowSurveyR url}>survey.
|] render

另一个函数将调用此函数,希望获得可以从Network.Mail.Mime传递给simpleMail的内容。上面的函数给出了一个类型错误:

代码语言:javascript
复制
Handler/Root.hs:404:13:
    The function `renderHtml' is applied to two arguments,
    but its type `Html -> LT.Text' has only one

这很令人困惑,因为模板教程似乎是这样做的。但是如果我像这样修改代码..。

代码语言:javascript
复制
invitation url = do
   return $ renderHtml [hamlet|
<p>Dear foo, please take our
   <a href=@{ShowSurveyR url}>survey.
|]

我得到了这个类型错误。

代码语言:javascript
复制
Handler/Root.hs:403:24:
    The lambda expression `\ _render[a4TO] -> ...' has one argument,
    but its type `Html' has none
    In the first argument of `renderHtml', namely

我认为使用renderHtml是一个错误的函数,但是我找不到正确的函数。有人知道我错过了什么吗?我该如何将路由函数传递到我的hamlet代码中呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-10 08:15:22

准引号([hamlet|...|])返回一个函数,它的参数也是一个函数。您必须首先应用该准引号值,并将结果传递给renderHtml:

编辑:正如@MattoxBeckman发现的那样,另一个问题是需要使用getUrlRenderParams而不是gutUrlRender。

代码语言:javascript
复制
invitation url = do
  render <- getUrlRenderParams
  return $ renderHtml $ [hamlet|
<p>Dear foo, please take our 
<a href=@{ShowSurveyR url}>survey.
|] render

(请注意附加的$)。

P.S. renderHtml的类型是Html -> Text,而准引号[hamlet|..|]的结果是Render url -> Html类型。您看到的第一条错误消息指出您试图向renderHtml传递两个参数,而第二条错误消息指出您没有向准引号值传递任何参数。

票数 3
EN

Stack Overflow用户

发布于 2012-04-10 09:27:12

为了让下一个寻找它的人更容易…

有两个问题。第一个答案指出了一个问题;hamlet quasiquoter本身具有一个函数。另一个问题是我需要使用函数getUrlRenderParams,而不是getUrlRender。最后的代码是

代码语言:javascript
复制
invitation :: Text -> Handler LT.Text
invitation url = do
   render <- getUrlRenderParams
   return $ renderHtml $ [hamlet|
<p>Dear foo, please take our
   <a href=@{ShowSurveyR url}>survey.
|] render
票数 4
EN

Stack Overflow用户

发布于 2014-03-07 16:07:30

只需替换shamlet而不是hamlet;它根本不需要render参数。

(正如joelteon在#yesod向我指出的那样。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10080459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档