Есть ли у кошек аналог traverseM от скаляза?

Есть ли у кошек функция, эквивалентная traverseM от скаляза? Я не нашел ничего, что соответствовало бы сигнатуре типа. Вот подпись и описание из документов scalaz scala:

final def traverseM[A, G[_], B](fa: F[A])(f: (A) ⇒ G[F[B]])(implicit G: Applicative[G], F: Bind[F]): G[F[B]]

Версия обхода, в которой к внутреннему результату применяется последующее монадическое соединение.

Было довольно просто определить себя traverseM на основе других функций в cats, но я бы предпочел использовать функцию из библиотеки, если она доступна.


person mushroom    schedule 08.11.2015    source источник
comment
traverseM добавлен в последнюю версию кошек (v0.6.0)   -  person Peter Neyens    schedule 26.05.2016


Ответы (2)


Я думаю, что вы ищете flatTraverse

Подпись типа

flatTraverse[G[_], A, B](fa: F[A])(f: A => G[F[B]])(implicit G: Applicative[G], F: FlatMap[F]): G[F[B]]

Это более или менее похоже на подпись traverseM, о которой вы упомянули.

person dade    schedule 18.08.2018

Как заметил @Peter, из версии 0.6.0 traverseM входит в состав Traverse:

 /**
   * A traverse followed by flattening the inner result.
   */
  def traverseM[G[_], A, B](fa: F[A])(f: A => G[F[B]])(implicit G: Applicative[G], F: FlatMap[F]): G[F[B]]
person Valy Dia    schedule 09.05.2019