gpt4 book ai didi

Haskell 不明确的类型变量——我迷路了?

转载 作者:可可西里 更新时间:2023-11-01 09:58:25 26 4
gpt4 key购买 nike

所以,我的想法是使用以下代码在 haskell 中运行 MongoDB 查询

我想把它变成这样,这样我就可以假装运行函数是一个“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 - 我怎样才能使它明确?做这种抽象是个坏主意吗?你会怎么做?

最佳答案

我总是想回答这些问题“这是因为你的类型不明确”。例如,如果给你一个值:

MonadIO m => (Action m a -> m (Either Failure a))

并告诉 monad m 是一个特定的 monad(不只是任何一个),你能告诉它是哪个吗?没有。

如果您不在使 Monad m 所属的上下文变得明显的上下文中使用返回值,那么您需要为编译器提供额外的信息:

db <- connectDB "127.0.0.1" "testdb" :: IO (Action IO a -> IO (Either Failure a))

关于Haskell 不明确的类型变量——我迷路了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com