我对Haskell很新,但我觉得我对所有人都有一个很好的理解。
我目前正在尝试使用haskell的非官方mongoDB绑定。
如果你看一下这里的代码:http://github.com/srp/mongoDB/blob/master/Database/MongoDB.hs
connect :: HostName -> [ConnectOpt] -> IO Connection
connect = flip connectOnPort (Network.PortNumber 27017)
如您所见,此方法返回/解析为 IO连接。
但是,实际上与数据库交互的所有方法都只使用简单的连接作为参数。例如:
disconnect :: Connection -> IO ()
disconnect = conClose
我认为这里有一些基本的东西我不理解,也许IO与IO Monad的一部分有关?我真的很无能为力,并且想知道是否有人有任何关于此事的光明。
如何在mongoDB绑定中同步到连接的IO连接?
感谢您提供的任何意见。
答案 0 :(得分:10)
我认为有一些根本我不理解
是的,没错。您只是想知道Haskell如何区分具有纯代码副作用的代码。要使用以IO类型结尾的代码,请使用do-notation。 E.g。
main = do
c <- connect "myhost" []
print "connected!"
disconnect c
&lt; - 是一个“绑定”,它运行副作用代码,并返回结果。在这种情况下,类型为“连接”。
在例如Haskell IO上阅读真实世界哈斯克尔,http://book.realworldhaskell.org/read/io.html
请务必阅读黑线鳕,http://hackage.haskell.org/packages/archive/mongoDB/0.2/doc/html/Database-MongoDB.html