如何在Yesod表格中预先形成IO? AKA,Yesod 1.2中aformM的等价物是什么?

时间:2013-07-18 23:07:15

标签: yesod

我正在尝试学习Yesod 1.2,我无法弄清楚如何访问存储在YesodAuth实例中的IO和信息。

例如,我无法弄清楚如何在Yesod 1.2中调用getCurrentTime。在Yesod 1.1中,您可以通过调用“aformM(liftIO getCurrentTime)”获取表单中的当前时间

同样,使用Yesod 1.2我无法弄清楚如何调用“requireAuthId”。

使用Yesod 1.1,您可以获得这两位数据,其中两行代码以< *>开头。此代码段中的aformM:

commentForm :: EntryId -> Form Comment
commentForm entryId = renderDivs $ Comment
    <$> pure entryId
    <*> aformM (liftIO getCurrentTime)
    <*> aformM requireAuthId
    <*> areq textField (fieldSettingsLabel MsgCommentName) Nothing
    <*> areq textareaField (fieldSettingsLabel MsgCommentText) Nothing

我目前在调用“commentForm”的代码中使用查询这些,但这看起来很愚蠢,因为现在我必须多次获取时间和用户ID。

commentForm :: UTCTime -> UserId -> EntryId -> Form Comment
commentForm theTime userId entryId = renderDivs $ Comment
    <$> pure entryId
    <*> pure theTime
    <*> pure userId
    <*> areq textField (fieldSettingsLabel MsgCommentName) Nothing
    <*> areq textareaField (fieldSettingsLabel MsgCommentText) Nothing

帮助!我已经多次浏览过这些文档而且我无法绕过它。

1 个答案:

答案 0 :(得分:4)

有趣的是,我在几个小时之前更新了博客示例,以包含这种正确的方式,并解释为什么有必要。简短版本:

lift (liftIO getCurrentTime)