Question

Je regardais scalaz Et voir que la plupart des monades ont la capacité d'être traversé List, Option, Identity etc. et se demander si cela signifie que chaque objet traversable peut également avoir une séquence - envisager.

Si c'est en fait le cas (je pourrais en effet être faux), alors quelle est la sortie d'un Identity par exemple:

Identity(Option(1)) Est-ce que cela deviendrait Option(Identity(1))? Ou est-ce que je manque quelque chose, si tel est le cas, des pointeurs seraient extrêmement utiles.

Éditer

En effet, j'avais raison de dire que la séquence d'identité est la suivante:

Identity(Option(1)) devient en effet Option(Identity(1)). De sorte que cette partie de la question est réglée.

Donc, ma question est affinée au titre original - chaque séquence de monad traversable est-elle traversée?

Était-ce utile?

La solution

sequence peut être très simple comme traversant la fonction d'identité - IE dans Haskell:

sequence = traverse id

Ou dans Scalaz 6 (à partir de votre deuxième lien ci-dessus), le beaucoup plus verbeux:

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

Alors oui, tout type avec une instance traversable peut être séquencé (et il n'a même pas besoin d'être une monade).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top