Есть ли у каждой обновляемой монады сопроводительная последовательность

StackOverflow https://stackoverflow.com/questions/19854497

  •  29-07-2022
  •  | 
  •  

Вопрос

Я смотрел на scalaz и видя, что большинство монадов имеют возможность быть прошел List, Option, Identity и т.д. и задается вопросом, означает ли это, что каждый обходной объект также может иметь последовательность - рассмотреть возможность.

Если это действительно так (я действительно мог бы ошибаться), то какова выход Identity Например:

Identity(Option(1)) это станет Option(Identity(1))? Или я что -то упускаю, если это так, какие бы указатели были бы чрезвычайно полезными.

Редактировать

Действительно, я был прав в отношении следующей последовательности идентичности:

Identity(Option(1)) действительно становится Option(Identity(1)). Анкет Так что эта часть вопроса урегулирована.

Итак, мой вопрос уточняется с исходным названием - каждый лишен проходов монада последовала?

Это было полезно?

Решение

sequence может быть очень понятно определен как обход с функцией идентичности - в Хаскелле:

sequence = traverse id

Или в Scalaz 6 (по вашей второй ссылке выше), значительно более многословный:

def sequence[N[_], B](implicit
  a: A <:< N[B],
  t: Traverse[M],
  n: Applicative[N]
): N[M[B]] = traverse((z: A) => (z: N[B]))

Так что да, любой тип с обходным экземпляром может быть секвенирован (и он даже не должен быть монадой).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top