【发布时间】:2011-10-19 04:17:55
【问题描述】:
我有以下函数迭代列表[(Map String SqlValue)]
extractPatternStrings ∷ IO [(Map String SqlValue)] → IO [String]
extractPatternStrings [] = do
return []
extractPatternStrings lst = do
(m:ms) ← lst
return $ (toString m) : (extractPatternStrings ms)
where
toString ∷ Map String SqlValue → String
toString m = (fromSql . fromJust . (Map.lookup "word"))∷ String
执行空列表案例告诉我它无法将预期的IO [Map String SqlValue] 与实际的[t0] 匹配。
我认为do = return 会解决这个问题。我应该如何纠正这个问题?
编辑:回答我为什么使用 IO:
从selectAll ↠ extractPatternStrings 调用该函数,其中 selectAll 从数据库中读取。
【问题讨论】:
-
为什么在这里使用IO?这看起来可能是一个纯函数。
-
我正在使用 IO,因为我从数据库中读取。如果我不使用 IO,数据库读取代码会给我一个错误,想要“返回”一个 IO。