我对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连接.
但是,实际上与数据库交互的所有方法都将一个简单的Connection作为参数.例如:
disconnect :: Connection -> IO () disconnect = conClose
我认为这里有一些基本的东西我不理解,也许IO与IO Monad的一部分有关?我真的很无能为力,并且想知道是否有人有任何关于此事的光明.
如何在mongoDB绑定中同步到连接的IO连接?
感谢您提供的任何输入.
我认为这里有一些基本的东西我不理解
恩,那就对了.您只是想知道Haskell如何区分具有纯代码副作用的代码.要使用以IO类型结尾的代码,请使用do-notation.例如
main = do c <- connect "myhost" [] print "connected!" disconnect c
< - 是一个"绑定",它运行副作用代码,并返回结果.在这种情况下,类型为"连接".
阅读Haskell IO,例如Real World Haskell,http://book.realworldhaskell.org/read/io.html
请务必仔细阅读黑线鳕过,http://hackage.haskell.org/packages/archive/mongoDB/0.2/doc/html/Database-MongoDB.html