2016-08-27 3 views
2

В Database.MongoDB.Query, есть такая функция:Для этой функции, что означает «возврат влево» означает значение IO?

access :: MonadIO m => Pipe -> AccessMode -> Database -> Action m a -> m a 

В документации сказано это о функции:

Выполнить действие в отношении базы данных на сервере в другом конце трубы. Используйте режим доступа для любых чтений и записей. Возврат Влево при сбое подключения или сбое чтения/записи.

  • Что означает «возвращение влево»? Я спрашиваю, потому что m может быть любой монадой (с экземпляром MonadIO). Например, что означает «возвращение влево», если m является только монадой IO?
  • Must m be an Either Мода для меня, чтобы иметь возможность обнаружить соединение или сбой чтения/записи при использовании метода access?
+5

Фактический код просто выдает исключения в случае ошибки - я предполагаю, что «return Left» - это просто опечатка или остаток от времени, когда тип возврата был другим. «return Left» действительно является абсолютно бессмысленным при работе с «IO» или «MonadIO m» (я полагаю, это имеет смысл, если у вас есть, например, «IO (a b)»). Кроме того, «Либо» не может быть экземпляром «MonadIO», поэтому вы даже не можете создавать экземпляр 'm' с помощью« Либо ». Хотя, 'MonadIO m => EitherT e m' имеет экземпляр, но даже если вы используете этот экземпляр, вы никогда не получите' Left something' от 'access' - этот тип даже гарантирует это. – user2407038

+4

[здесь] (https://hackage.haskell.org/package/mongoDB-1.1.0/docs/Database-MongoDB-Query.html) - это старая версия, в которой тип возврата равен 'm (либо сбою a) '- это действительно похоже на устаревшую документацию. (Если это важно для вас, вы должны связаться с сопровождающим) – user2407038

+1

[Здесь] (https://github.com/mongodb-haskell/mongodb/issues), вероятно, это хорошее место, чтобы сообщить об этом - или вы даже можете сделать нажмите на значок карандаша [здесь] (https://github.com/mongodb-haskell/mongodb/blob/master/Database/MongoDB/Query.hs), чтобы сделать для него работу. – Gurkenglas

ответ

1

Да. Это тип. Возврат влево - из старой версии. Если происходят какие-либо ошибки, он просто выдает исключения IO. Мы должны это исправить. Я подал ошибку. https://github.com/mongodb-haskell/mongodb/issues/67

Смежные вопросы