Я пытаюсь использовать Yesod для создания простого веб-сайта, и я начинаю с код от превосходного вступления Max Tagher на Youtube, YesodScreencast. Я разветвил его код от GitHub, и я хотел бы добавить дату публикации, чтобы указать, когда она была опубликована, но я столкнулся с проблемой, которую я не могу понять, учитывая мой низкий опыт работы с Haskell и опыт новичка с Йесодом. Я не смог найти ответ через Googleplex.Не удалось вывести (blaze-markup-0.6.3.0: Text.Blaze.ToMarkup Day), возникающий из-за использования 'toHtml'
Йесод обеспечивает в Yesod.Form.Fields
родной dayField
, так что я подумал, что все, что мне нужно было сделать, чтобы добавить postdate Field
в BlogPost следующее конфигурационными/моделей с использованием Day
:
BlogPost
title Text
postdate Day
article Markdown
и добавить его к blogPostForm
в PostNew.hs
:
blogPostForm :: AForm Handler BlogPost
blogPostForm = BlogPost
<$> areq textField (bfs ("Title" :: Text)) Nothing
<*> areq dayField (bfs ("Postdate" :: Day)) Nothing
<*> areq markdownField (bfs ("Article" :: Text)) Nothing
Когда компилирует я получаю следующее сообщение об ошибке:
Handler/Home.hs:16:11:
Could not deduce (blaze-markup-0.6.3.0:Text.Blaze.ToMarkup Day)
arising from a use of ‘toHtml’
from the context (PersistEntity BlogPost)
bound by a pattern with constructor
Entity :: forall record.
PersistEntity record =>
Key record -> record -> Entity record,
in a lambda abstraction
at Handler/Home.hs:16:11-34
In the first argument of ‘asWidgetT GHC.Base.. toWidget’, namely
‘toHtml (blogPostPostdate post_apZp)’
In a stmt of a 'do' block:
(asWidgetT GHC.Base.. toWidget)
(toHtml (blogPostPostdate post_apZp))
In the expression:
do { (asWidgetT GHC.Base.. toWidget)
((blaze-markup-0.6.3.0:Text.Blaze.Internal.preEscapedText
GHC.Base.. Data.Text.pack)
"<h4><li><a href=\"");
(getUrlRenderParams
>>=
(\ urender_apZq
-> (asWidgetT GHC.Base.. toWidget)
(toHtml
(\ u_apZr -> urender_apZq u_apZr [] (PostDetailsR id_apZo)))));
(asWidgetT GHC.Base.. toWidget)
((blaze-markup-0.6.3.0:Text.Blaze.Internal.preEscapedText
GHC.Base.. Data.Text.pack)
"\">");
(asWidgetT GHC.Base.. toWidget)
(toHtml (blogPostPostdate post_apZp));
.... }
Если я изменю Day
на Text
, все будет работать так, как я ожидаю. Я не уверен, почему Есод не может иметь дело с Day
, так как он имеет dayField
в Yesod.Form.Fields
, который я ожидал бы с этим справиться. Я считаю, что это что-то простое, но я не могу определить, что мне нужно сделать, чтобы исправить эту ошибку.