所有循环中的Yesod Hamlet类型错误令人困惑

时间:2015-10-30 21:11:20

标签: yesod hamlet

我有一个Yesod处理程序返回一个类型[(Category,[Product])]的列表我试图在我的hamlet模板中循环这个。

"bookshelf" : "*"

编译时虽然收到错误消息:

$if null rows
    <p>No products
$else
  <div class="list-group menu">
    $forall (category, products) <- rows
      <h4>#{categoryName category}

      $forall product <- products
        <p>#{productName product} - #{productPrice product}</p>

我不明白为什么它会期待这个以及我能做些什么来使它发挥作用。非常感谢。

更新 我的经纪人。

Handler/Menu.hs:11:7:
    Couldn't match type ‘[(Category, [Product])]’
                   with ‘(Category, t0 Product)’
    Expected type: ReaderT SqlBackend m1 (Category, t0 Product)
      Actual type: ReaderT SqlBackend m1 [(Category, [Product])]
    In the second argument of ‘Data.Foldable.mapM_’, namely ‘rows’
    In a stmt of a 'do' block:
      Data.Foldable.mapM_
        (\ (category_aiv7, products_aiv8)
           -> do { (asWidgetT GHC.Base.. toWidget)
                     ((blaze-markup-0.7.0.3:Text.Blaze.Internal.preEscapedText
                       GHC.Base.. Data.Text.pack)
                        "<div class=\"list-group-item\"><h4 class=\"list-group-item-heading\">");
                   (asWidgetT GHC.Base.. toWidget)
                     (toHtml (categoryName category_aiv7));
                   .... })
        rows

1 个答案:

答案 0 :(得分:0)

在迈克尔的帮助下,用let rows = query

替换rows <- runDB query一样简单