2010-02-27 53 views
3

我对Haskell来说很新,但我觉得我对所有人都有相当的理解。如何为haskell使用mongoDB绑定

我目前正在尝试使用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单子的一部分呢?我真的很笨,想知道是否有人有任何亮光可以帮我解决这个问题。

如何在mongoDB绑定中哄一个IO连接到连接?

感谢您的任何输入。

+0

也见例子https://github.com/TonyGen/mongoDB-haskell/blob/master/doc/Example.hs – mb21 2012-07-07 18:00:46

回答

10

我认为有一些基本的东西我不理解这里

是的,这是正确的。你只是想念Haskell如何区分具有纯代码副作用的代码。要使用以IO类型结尾的代码,可以使用符号。例如。

main = do 
    c <- connect "myhost" [] 
    print "connected!" 
    disconnect c 

的< - 是一个“绑定”它运行侧的代码,并且返回结果。在这种情况下,类型为“Connection”的值。

请阅读例如Haskell IO。真实世界哈斯克尔,http://book.realworldhaskell.org/read/io.html

请务必阅读的黑线鳕也http://hackage.haskell.org/packages/archive/mongoDB/0.2/doc/html/Database-MongoDB.html