我正在Yesod (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是一个错误的函数,但是我找不到正确的函数。有人知道我错过了什么吗?我该如何将路由函数传递到我的hamlet代码中呢?
发布于 2012-04-10 08:15:22
准引号([hamlet|...|])返回一个函数,它的参数也是一个函数。您必须首先应用该准引号值,并将结果传递给renderHtml:
编辑:正如@MattoxBeckman发现的那样,另一个问题是需要使用getUrlRenderParams而不是gutUrlRender。
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传递两个参数,而第二条错误消息指出您没有向准引号值传递任何参数。
发布于 2012-04-10 09:27:12
为了让下一个寻找它的人更容易…
有两个问题。第一个答案指出了一个问题;hamlet 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发布于 2014-03-07 16:07:30
只需替换shamlet而不是hamlet;它根本不需要render参数。
(正如joelteon在#yesod向我指出的那样。)
https://stackoverflow.com/questions/10080459
复制相似问题