【发布时间】:2021-08-22 22:31:00
【问题描述】:
我是 Haskell 的初学者,我还在学习,我在与 monad 相关的问题上停了下来。
问题是我想在模板中显示评论作者。
我不能这样做,因为当我从数据库添加评论时,它总是在 Handler monad 中。
也许我的整个想法是错误的,我不知道。
这是评论实体:
ManComment
text Text sqltype=varchar(500)
created UTCTime sqltype=DateTime
writer UserId Maybe sqltype=varchar(255) default=NULL -- comment writer
manId ManifestationId sqltype=varchar(255) default=NULL
deriving Show Typeable
这是处理函数:
getManDetailsR :: ManifestationId -> Handler Html
getManDetailsR mid = do
(ui, user) <- requireAuthPair
comments <- runDB $ getComFromMan mid
defaultLayout $ do
setTitle "Manifestation details"
$(widgetFile "man-details")
哈姆雷特文件的一部分(在最后一行试图显示作者):
$if null comments
<h4>There is not comments!
$else
$forall Entity cid com <- comments
<form method=post action=@{DeleteManCommentR mid cid}>
<li .list-group-item>
<div class="row">
<div class="col-xs-10 col-md-11">
<div>
<div .mic-info> By: <a href=@{ProfileR}>#{getCommentWriter $ com}</a>
我正在尝试在这里获得评论作者:
getCommentWriter :: ManComment -> Handler Text
getCommentWriter c = do
user <- runDB $ get404 $ fromJust $ manCommentWriter c --get writer from database
let username = userIdent user
return username -- but return puts in Handler monad
最终发生错误:
No instance for (blaze-markup-0.8.2.7:Text.Blaze.ToMarkup
(Handler Text))
arising from a use of ‘toHtml’
【问题讨论】: