Pregunta

Estaba mirando scalaz y ver que la mayoría de las mónadas tienen la capacidad de ser atravesado List, Option, Identity etc y preguntarse si eso significa que cada objeto traversable también puede tener una secuencia - considerar.

Si ese es el caso (de hecho podría estar equivocado), entonces ¿cuál es el resultado de un Identity por ejemplo:

Identity(Option(1)) ¿Se convertiría esto? Option(Identity(1))? O me estoy perdiendo algo, si ese es el caso, algún consejo sería extremadamente útil.

Editar

De hecho, tenía razón acerca de que la secuencia de identidad era la siguiente:

Identity(Option(1)) De hecho se convierte Option(Identity(1)). Entonces esa parte de la pregunta está resuelta.

Entonces, mi pregunta se refina al título original: ¿cada mónada traversable es secuenciable?

¿Fue útil?

Solución

sequence puede definirse muy directamente como transversal con la función de identidad, en Haskell:

sequence = traverse id

O en Scalaz 6 (desde su segundo enlace arriba), el considerablemente más detallado:

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

Entonces, sí, se puede secuenciar cualquier tipo con una instancia atravesable (y ni siquiera necesita ser una mónada).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top