Как использовать привязки mongoDB для haskell - PullRequest
3 голосов
/ 27 февраля 2010

Я довольно новичок в Хаскеле, но я чувствую, что у меня есть приличное понимание по всем вопросам.

Я сейчас пытаюсь поиграть с неофициальными привязками mongoDB для haskell.

Если вы посмотрите код здесь: http://github.com/srp/mongoDB/blob/master/Database/MongoDB.hs

connect :: HostName -> [ConnectOpt] -> IO Connection
connect = flip connectOnPort (Network.PortNumber 27017)

Как видите, этот метод возвращает / разрешает соединение IO .

Однако все методы, которые фактически взаимодействуют с базой данных, принимают просто Connection в качестве аргумента. Пример:

disconnect :: Connection -> IO ()
disconnect = conClose

Я думаю, что здесь есть что-то фундаментальное, чего я не понимаю, может быть, IO связано с тем, что оно является частью IO Monad? Я действительно довольно невежественен и хотел знать, есть ли у кого-нибудь хоть какой-то свет, чтобы пролить на меня это.

Как я могу подключить соединение ввода-вывода к соединению в привязках mongoDB?

Спасибо за любой вклад, который вы можете иметь.

1 Ответ

10 голосов
/ 28 февраля 2010

Я думаю, что здесь есть что-то фундаментальное, чего я не понимаю

Да, все верно. Вам просто не хватает того, как Haskell отличает код, который имеет побочные эффекты, от чистого кода. Чтобы использовать код, заканчивающийся типом ввода-вывода, вы используете нотацию do. Э.Г.

main = do
   c <- connect "myhost" []
   print "connected!"
   disconnect c

<- это «связывание», которое запускает код побочного действия и возвращает результат. В этом случае значение типа «Соединение». </p>

Читайте о Haskell IO, например, Real World Haskell, http://book.realworldhaskell.org/read/io.html

Обязательно прочитайте пикши, http://hackage.haskell.org/packages/archive/mongoDB/0.2/doc/html/Database-MongoDB.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...