所以,這個想法是,我想借此用來在Haskell執行MongoDB查詢Haskell模糊類型變量 - 我迷路了?
- 完整的例子下面的代碼:https://gist.github.com/1337864
介紹哈斯克爾MongoDB的驅動程序:https://github.com/TonyGen/mongoDB-haskell/blob/master/doc/Example.hs
管< - runIOE $ connect $ host「127.0.0.1」 let run action = access pipe master「testdb」action run $ delete $ select []「mycollection」
我想把它變成這個,這樣我可以假裝運行函數是一個「db」,就像在正常的mongo驅動程序中一樣。
db <- connectDb "127.0.0.1" "testdb"
db $ delete $ select [] "mycollection"
這是我寫的做功能:
mdb :: (MonadIO m) => String -> String -> IO (Action m a -> m (Either Failure a))
mdb hostname dbname = do
pipe <- runIOE $ connect $ host hostname
return (access pipe master (pack dbname))
我離開更無類型,然後詢問ghci的類型是什麼讓該類型。我很難理解它。
所以這裏的問題
當我做我的程序只有db <- connectDb "127.0.0.1" "testdb"
和不使用它,它失敗,此曖昧類型錯誤:https://gist.github.com/1337864 - 我怎樣才能使它明確?做這種抽象是不是一個好主意?你會怎麼做?
謝謝!另外請注意,更改mdb的簽名也可以。我沒有意識到我在說那種類型的話。 –
如果'MonadIO m => m'會在其他不明確的情況下默認爲'IO',那將會很不錯。 –
@丹伯頓:這裏有'-fextended-default-rules'和一個對應的編譯指示。檢查是否有'MonadIO'的默認值。我認爲這種違約是邪惡的 - 這就是爲什麼它默認關閉。一個有趣的例子是'Control.Applicative'到'IO'的默認值。 – nponeccop