Pergunta

Eu estava olhando para scalaz e vendo que a maioria das mônadas tem a capacidade de ser atravessado List, Option, Identity etc e me perguntando se isso significa que todo objeto travessa também pode ter uma sequência - considerar.

Se esse é o caso (eu poderia estar realmente errado), então qual é a saída de um Identity por exemplo:

Identity(Option(1)) isso se tornaria Option(Identity(1))? Ou estou perdendo alguma coisa, se for esse o caso, algum indicador seria extremamente útil.

Editar

De fato, eu estava correto sobre a sequência de identidade ser a seguinte:

Identity(Option(1)) realmente se torna Option(Identity(1)). Para que essa parte da pergunta seja resolvida.

Portanto, minha pergunta é refinada para o título original - todo Monad Traversable é sequenciável?

Foi útil?

Solução

sequence pode ser definido de maneira muito direta como travessia com a função de identidade - em Haskell:

sequence = traverse id

Ou em Scalaz 6 (do seu segundo link acima), o consideravelmente mais detalhado:

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

Então, sim, qualquer tipo com uma instância percorrer pode ser sequenciada (e nem precisa ser uma mônada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top