【发布时间】:2015-04-22 20:44:07
【问题描述】:
我正在尝试从在脚手架站点工作的Yesod book 制作聊天示例。
我想我已经改正了几乎所有必须改正的内容,但所有这些对我来说都是全新的(这是我的第一个“真正的”Haskell 项目),而且我对自己的所有修改都不是很有信心;此外,我真的停留在第 7 点。如果有必要,您能否评论以下所有要点,并帮助我解决第 7 点。(粗体一些问题/评论)?
- 将 Chat.hs 和 Chat/Data.hs 复制/粘贴到我网站的根目录中,
- 将
import Chat as Import和import Chat.Data as Import添加到Import.NoFoundation, - 在 Data.hs 中添加 IO、Bool、return、Maybe(Nothing)、($) 的导入,因为扩展 NoImplicitPrelude 是 on 看起来很笨拙...我们是否必须将所有标准运算符导入到每个新文件?
- 在 Fundation.hs 中,在
App记录中添加getChat(在appHttpManager和appLogger之后) -
在 Fundation.hs 中,为 App 添加 YesodChat 实例:我必须修改
Just uid案例上的getUserName(在 Chat 的原始示例中,它只是Just uid -> return uid):Just uid -> do muser <- runDB $ get uid case muser of Nothing -> error "uid not in the DB" Just user -> return $ userIdent user这似乎很长而且嵌套...我们可以做得更好吗?
- 在
Fundation.hs中,在defaultLayout定义中的pc <- widgetToPageContent $ do行之后添加chatWidget ChatR。 -
现在,我收到以下警告:
Application.hs:60:36: Warning: Fields of ‘App’ not initialised: getChat In the expression: App {..}我想我必须在
makeFundation定义中的appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger和appStatic <- ...之后写getChat <- newChan >>=Chat之类的东西,但是类型不匹配。 我完全迷路了,我真的不明白这个函数makeFundation是如何工作的。
【问题讨论】: