В Database.MongoDB.Query, есть такая функция:Для этой функции, что означает «возврат влево» означает значение IO?
access :: MonadIO m => Pipe -> AccessMode -> Database -> Action m a -> m a
В документации сказано это о функции:
Выполнить действие в отношении базы данных на сервере в другом конце трубы. Используйте режим доступа для любых чтений и записей. Возврат Влево при сбое подключения или сбое чтения/записи.
- Что означает «возвращение влево»? Я спрашиваю, потому что
m
может быть любой монадой (с экземпляромMonadIO
). Например, что означает «возвращение влево», еслиm
является только монадойIO
? - Must
m
be anEither
Мода для меня, чтобы иметь возможность обнаружить соединение или сбой чтения/записи при использовании методаaccess
?
Фактический код просто выдает исключения в случае ошибки - я предполагаю, что «return Left» - это просто опечатка или остаток от времени, когда тип возврата был другим. «return Left» действительно является абсолютно бессмысленным при работе с «IO» или «MonadIO m» (я полагаю, это имеет смысл, если у вас есть, например, «IO (a b)»). Кроме того, «Либо» не может быть экземпляром «MonadIO», поэтому вы даже не можете создавать экземпляр 'm' с помощью« Либо ». Хотя, 'MonadIO m => EitherT e m' имеет экземпляр, но даже если вы используете этот экземпляр, вы никогда не получите' Left something' от 'access' - этот тип даже гарантирует это. – user2407038
[здесь] (https://hackage.haskell.org/package/mongoDB-1.1.0/docs/Database-MongoDB-Query.html) - это старая версия, в которой тип возврата равен 'm (либо сбою a) '- это действительно похоже на устаревшую документацию. (Если это важно для вас, вы должны связаться с сопровождающим) – user2407038
[Здесь] (https://github.com/mongodb-haskell/mongodb/issues), вероятно, это хорошее место, чтобы сообщить об этом - или вы даже можете сделать нажмите на значок карандаша [здесь] (https://github.com/mongodb-haskell/mongodb/blob/master/Database/MongoDB/Query.hs), чтобы сделать для него работу. – Gurkenglas