簡體   English   中英

無法在 Spock 和 Lucid 創建的應用程序中顯示 IO [[String]]

[英]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的結果?

我認為您可以在getlucid執行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM