Domanda

stavo guardando scalaz e visto che la maggior parte delle monadi hanno la capacità di essere attraversato List, Option, Identity etc e chiedendosi se ciò significa che ogni oggetto attraversabile può anche avere una sequenza - prendere in considerazione.

Se questo è effettivamente il caso (potrei davvero sbagliarmi), allora qual è l'output di a Identity Per esempio:

Identity(Option(1)) diventerebbe questo Option(Identity(1))?Oppure mi sto perdendo qualcosa, in tal caso qualsiasi indicazione sarebbe estremamente utile.

Modificare

In effetti avevo ragione riguardo al fatto che la sequenza di identità fosse la seguente:

Identity(Option(1)) diventa infatti Option(Identity(1)).Quindi quella parte della questione è risolta.

Quindi la mia domanda è adattata al titolo originale: ogni monade attraversabile è sequenziabile?

È stato utile?

Soluzione

sequence può essere definito in modo molto semplice come attraversamento con la funzione identità, ovveroin Haskell:

sequence = traverse id

O in Scalaz 6 (dal secondo collegamento sopra), il considerevolmente più dettagliato:

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

Quindi sì, qualsiasi tipo con un'istanza attraversabile può essere sequenziato (e non è nemmeno necessario che sia una monade).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top