【问题标题】:Yesod book example chat and scaffoldingYesod书示例聊天和脚手架
【发布时间】:2015-04-22 20:44:07
【问题描述】:

我正在尝试从在脚手架站点工作的Yesod book 制作聊天示例。

我想我已经改正了几乎所有必须改正的内容,但所有这些对我来说都是全新的(这是我的第一个“真正的”Haskell 项目),而且我对自己的所有修改都不是很有信心;此外,我真的停留在第 7 点。如果有必要,您能否评论以下所有要点,并帮助我解决第 7 点。(粗体一些问题/评论)?

  1. 将 Chat.hs 和 Chat/Data.hs 复制/粘贴到我网站的根目录中,
  2. import Chat as Importimport Chat.Data as Import 添加到Import.NoFoundation,
  3. 在 Data.hs 中添加 IO、Bool、return、Maybe(Nothing)、($) 的导入,因为扩展 NoImplicitPrelude 是 on 看起来很笨拙...我们是否必须将所有标准运算符导入到每个新文件?
  4. 在 Fundation.hs 中,在App 记录中添加getChat(在appHttpManagerappLogger 之后)
  5. 在 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
    

    这似乎很长而且嵌套...我们可以做得更好吗?

  6. Fundation.hs 中,在defaultLayout 定义中的pc &lt;- widgetToPageContent $ do 行之后添加chatWidget ChatR
  7. 现在,我收到以下警告:

    Application.hs:60:36: Warning:
    
    Fields of ‘App’ not initialised: getChat
    In the expression: App {..}
    

    我想我必须在makeFundation 定义中的appLogger &lt;- newStdoutLoggerSet defaultBufSize &gt;&gt;= makeYesodLoggerappStatic &lt;- ... 之后写getChat &lt;- newChan &gt;&gt;=Chat 之类的东西,但是类型不匹配。 我完全迷路了,我真的不明白这个函数makeFundation 是如何工作的。

【问题讨论】:

    标签: haskell yesod


    【解决方案1】:

    实际上,您几乎已经走到了那里。我认为您只需将行更改为:

    getChat <- fmap Chat newChan
    

    或者,如果你还不熟悉他的fmap函数,你可以使用do notation和get:

    chan <- newChan
    let getChat = Chat chan
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 2018-01-11
      • 2015-03-14
      • 2016-10-23
      • 1970-01-01
      相关资源
      最近更新 更多