haskell - 无法在 Spock 和 Lucid 中创建的应用程序中显示 IO [[String]]
问题描述
我对 Haskell 中的 Spock、Lucid 和 IO 有疑问。我有一个功能
f :: MySQLConn -> IO [[String]]
的输出f
是语句“SELECT * FROM TABLE”的结果,其中将 [MySQLValue] 列表转换为 [String] 列表。
然后我想使用f
Spock 中的函数在我的应用程序中显示输出。我尝试使用类似的东西:
(...)
get "history" $ lucid $ do
let offers = c >>= f
mapM (mapM (p_ . toHtml) ) offers
(...)
Wherec
用于创建与 DB 的连接。但它不起作用。错误是:“没有因使用‘mapM’而产生的(可遍历 IO)实例”。
如果我尝试:
get "history" $ lucid $ do
mapM (mapM (p_ . toHtml) ) [["a", "b"], ["1","x"]]
它是正确的。所以我的问题是 - 我如何f
在这个应用程序中使用结果?
解决方案
get
我认为您可以在和之间执行 IO 操作lucid
:
get "history" $ do
offers <- liftIO $ c >>= f
lucid $ mapM (mapM (p_ . toHtml) ) offers
liftIO
从Control.Monad.IO.Class
. _
推荐阅读
- r - 如果与另一个数据集中的数据匹配,则从一个数据集中删除行
- html - CSS中具有未知开始和结束高度的容器上的高度转换
- graph - 约束 core.logic 查询的结果?
- libreoffice - 卡在 LibreOffice 文档末尾的一个部分
- java - .text 不打印任何内容,但 .append 可以
- java - 如何将集合中的所有整数加 1
(爪哇)? - reactjs - 结合 React 最终形式数组和最终形式计算
- java - 如何使用 selenium java 将表的内容写入 csv 文件?
- node.js - 一旦会话过期,Node.js 会抓取刷新令牌 FIREBASE
- jquery - $(document).ready() 更新视图组件后未触发