我使用 MongoDB 库来处理来自 Mongodb 的数据。有一个称为Action
表示 DB 读取或写入操作的 Monad https://github.com/TonyGen/mongoDB-haskell/blob/master/doc/tutorial.md
。但是,我发现当我在 monad Action 中时,我也想做一些必须在 IO Monad 中的 IO。一些代码如
-- `Action' is a Monad
--
intoFile :: String -> Cursor -> Action IO ()
intoFile ric c = do
outH <- liftIO $ openFile ric AppendMode
liftIO $ hPutStrLn outH "Some log"
loopIntoFile outH c
liftIO $ hClose outH
liftIO
在任何单子之前都有一个IO
,我认为它可能很冗长。有什么简洁的方法来处理这个吗?