试图使用耶索德村庄发送电子邮件(Trying to send an email in yesod u

2019-09-16 10:18发布

我建立在耶索德(0.10)的调查网站,并在该类型我迷路。 这里是什么,我试图做一个简化版本。

invitation url = do
   render <- getUrlRender
   return $ renderHtml [hamlet|
<p>Dear foo, please take our 
   <a href=@{ShowSurveyR url}>survey.
|] render

另一个功能是将在得到的东西,可以从Network.Mail.Mime传递给simpleMail的希望调用此。 上述函数给出一个错误类型:

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

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

invitation url = do
   return $ renderHtml [hamlet|
<p>Dear foo, please take our
   <a href=@{ShowSurveyR url}>survey.
|]

我得到这个类型的错误。

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是错误的函数中使用,但我不能找到合适的功能是什么。 有谁知道我缺少的是什么? 我怎么给路由功能传递到我的小村庄的代码?

Answer 1:

该quasiquote( [hamlet|...|]返回其参数也是一个函数的函数。 你必须首先申请的是quasiquote值,并且将结果传递renderHtml:

[编辑:作为@MattoxBeckman发现,另一个问题是使用getUrlRenderParams代替gutUrlRender的需要。]

invitation url = do
  render <- getUrlRenderParams
  return $ renderHtml $ [hamlet|
<p>Dear foo, please take our 
<a href=@{ShowSurveyR url}>survey.
|] render

(注意额外的$ )。

PS renderHtml是类型Html -> Text ,而quasiquote,结果[hamlet|..|]是类型的Render url -> Html 。 你所看见的第一个错误信息,你想两个参数传递给renderHtml笔记,而第二条错误消息指出,你没有传递任何参数到quasiquote值。



Answer 2:

为了使对谁去为它寻找下一个人更容易些?

有两个问题。 一个是指出了第一个答案; 小村庄quasiquoter本身需要的功能。 另一个问题是,我需要使用的功能getUrlRenderParams,不getUrlRender。 最后的代码是

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


Answer 3:

只需更换shamlet而不是hamlet ; 它并不需要render的所有参数。

(截至#yesod指出我的joelteon。)



文章来源: Trying to send an email in yesod using hamlet
标签: yesod hamlet