2010-02-27 16 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