所以,这个想法是,我想借此用来在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