我正在使用Mail
构建import Network.Mail.Mime.SES
,我的电子邮件的HTML部分需要Html
值。
我可以像这样Html
:
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
emailHtml :: Html
emailHtml = renderHtml $(shamletFile "templates/email.hamlet")
但是,我使用的模板应该引用静态文件。我想用@{StaticR img_myimage_jpg}
引用它,但使用这样的网址不能用于 shamlet 。相反,我认为我需要使用 whamlet ,但如果我将whamletFile
与renderHtml
一起使用,则会出现编译错误。
使用whamletFile
会产生此编译器错误:
Handler/Proxy.hs:71:55:
Couldn't match expected type `blaze-markup-0.7.1.0:Text.Blaze.Internal.MarkupM
()'
with actual type `WidgetT site12 m12 ()'
In a stmt of a 'do' block:
(asWidgetT GHC.Base.. toWidget)
((blaze-markup-0.7.1.0:Text.Blaze.Internal.preEscapedText
GHC.Base.. Data.Text.pack)
"</pre>\n\
\</td>\n\
\</tr>\n\
\</table>\n\
\</td>\n\
\</tr>\n\
... (many more lines)
使用hamletFile
会产生此编译器错误:
Handler/Proxy.hs:71:53:
Couldn't match expected type `t0
-> blaze-markup-0.7.1.0:Text.Blaze.Internal.MarkupM ()'
with actual type `blaze-markup-0.7.1.0:Text.Blaze.Internal.MarkupM
()'
The lambda expression `\ _render_aoYP -> ...' has one argument,
but its type `Html' has none
In the first argument of `renderHtml', namely
`\ _render_aoYP
-> do { GHC.Base.id
((blaze-markup-0.7.1.0:Text.Blaze.Internal.preEscapedText
GHC.Base.. Data.Text.pack)
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\