[英]Cannot display IO [[String]] in app created in Spock and Lucid
我在 Haskell 中遇到 Spock、Lucid 和 IO 的問題。 我有一個功能
f :: MySQLConn -> IO [[String]]
f
輸出是語句“SELECT * FROM TABLE”的結果,將 [MySQLValue] 列表轉換為 [String] 列表。
然后我想在 Spock 中使用函數f
在我的應用程序中顯示輸出。 我嘗試使用類似的東西:
(...)
get "history" $ lucid $ do
let offers = c >>= f
mapM (mapM (p_ . toHtml) ) offers
(...)
其中c
用於創建與 DB 的連接。 但它不起作用。 一個錯誤是:“沒有因使用‘mapM’而產生的(Traversable IO)實例”。
如果我嘗試:
get "history" $ lucid $ do
mapM (mapM (p_ . toHtml) ) [["a", "b"], ["1","x"]]
它是正確的。 所以我的問題是 - 我如何在這個應用程序中使用f
的結果?
我認為您可以在get
和lucid
執行 IO 操作:
get "history" $ do
offers <- liftIO $ c >>= f
lucid $ mapM (mapM (p_ . toHtml) ) offers
使用來自Control.Monad.IO.Class
liftIO
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.