【发布时间】:2014-06-04 23:48:47
【问题描述】:
我正在开发一个 Yesod 子网站。基本上,它是一个博客。我在将表单附加到处理程序时遇到问题。考虑:
getSubBlogR :: Yesod master
=> YesodPersist master
=> PersistQuery (YesodPersistBackend master (HandlerT master IO))
=> RenderMessage master FormMessage
=> HandlerT Blog (HandlerT master IO) Html
getSubBlogR = lift $ do
articles <- runDB $ selectList [] [Asc ArticleDate]
day <- liftIO $ (utctDay <$> getCurrentTime)
(formWidget, enctype) <- generateFormPost $ (articleForm day)
defaultLayout $ [whamlet|
<div .articles>
$forall Entity _ article <- articles
^{articleWidget article}
|]
就目前而言,这确实可以编译。但我实际上并没有使用 formWidget,我真的很想这样做。我想要“喜欢”的东西
getSubBlogR :: Yesod master
=> YesodPersist master
=> PersistQuery (YesodPersistBackend master (HandlerT master IO))
=> RenderMessage master FormMessage
=> HandlerT Blog (HandlerT master IO) Html
getSubBlogR = lift $ do
articles <- runDB $ selectList [] [Asc ArticleDate]
day <- liftIO $ (utctDay <$> getCurrentTime)
(formWidget, enctype) <- generateFormPost $ (articleForm day)
defaultLayout $ [whamlet|
<div .articles>
$forall Entity _ article <- articles
^{articleWidget article}
<div .panel .panel-default>
<div .panel-heading><h1>Add Article
<div .panel-body>
<form method="post" action=@{SubBlogR} enctype=#{enctype}>
^{formWidget}
|]
但这不会编译。我得到了错误:
src/Yesod/Blog/Handler.hs:64:28:
Could not deduce (master ~ Blog)
from the context (Yesod master,
YesodPersist master,
PersistQuery (YesodPersistBackend master (HandlerT master IO)),
RenderMessage master FormMessage)
bound by the type signature for
getSubBlogR
...
Expected type: WidgetT
master IO (Route Blog -> [(Text, Text)] -> Text)
Actual type: WidgetT
master
IO
(Route (HandlerSite (WidgetT master IO)) -> [(Text, Text)] -> Text)
好的,很公平。我知道“大师”和“博客”不是同一类型。但是如何让“图表”通勤?
【问题讨论】:
-
articleForm的类型是什么?