Итак, идея в том, что я бы взял следующий код, используемый для запуска запросов MongoDB в haskell
И я хотел бы превратить это в это, чтобы я мог притвориться, что функция запуска является "db", как в обычном драйвере Монго.
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 - Как я могу сделать ее однозначной? Это плохая идея сделать такую абстракцию? Как бы вы это сделали?