由于我绝对是Haskell的初学者,但我决心克服它,所以我再次寻求帮助。
使用:
fetchData2 = do
conn <- connectSqlite3 "dBase.db"
statement <- prepare conn "SELECT * FROM test WHERE id > 0"
execute statement []
results <- fetchAllRows statement
print results返回:
[[SqlInt64 3,SqlByteString "Newco"],[SqlInt64 4,SqlByteString "Oldco"],[SqlInt64 5,SqlByteString "Mycom"],[SqlInt64 4,SqlByteString "Oldco"],[SqlInt64 5,SqlByteString "Mycom"]]有没有一种聪明的方法可以将这些数据清理到Int和[Char]中,换句话说,就是省略SqlInt64和SqlByteString类型。
发布于 2018-08-30 02:30:20
你可以定义一个帮助器:
fetchRowFromSql :: Convertible SqlValue a => Statement -> IO (Maybe [a])
fetchRowFromSql = fmap (fmap (fmap fromSql)) . fetchRow这个实现看起来有点吓人,但这只是因为我们需要深入到您已经注意到的分层函数器(首先是IO,然后是Maybe,最后是[])。这将返回可从SqlValue转换的内容。已经定义了一大堆这样的东西。例如,参见the docs。一个示例(使用-XTypeApplications):
fetchRowFromSql @String :: Statement -> IO (Maybe [String])我也许应该补充一下,文档中提到fromSql是不安全的。这意味着,如果您尝试将SQL值转换为不兼容的Haskell值,程序将暂停。
https://stackoverflow.com/questions/52073014
复制相似问题