Frage

Ich schaute mir an scalaz und zu sehen, dass die meisten Monaden die Fähigkeit haben, zu sein durchquert List, Option, Identity usw. und fragen Sie sich, ob dies bedeutet, dass jedes durchquerenbare Objekt auch eine Sequenz haben kann - Erwägen.

Wenn das tatsächlich der Fall ist (ich könnte tatsächlich falsch liegen), was ist dann die Ausgabe von a Identity zum Beispiel:

Identity(Option(1)) würde das werden Option(Identity(1))? Oder fehlt mir etwas, wenn dies der Fall ist, wären Zeiger äußerst hilfreich.

Bearbeiten

In der Tat hatte ich Recht, dass die Identitätssequenz Folgendes war:

Identity(Option(1)) wird in der Tat Option(Identity(1)). Dieser Teil der Frage wird also geklärt.

Meine Frage ist also auf den Original -Titel verfeinert - ist jede durchlaufbare Monad -Sequenzierung?

War es hilfreich?

Lösung

sequence Kann sehr einfach als Traversal mit der Identitätsfunktion definiert werden - Iie in Haskell:

sequence = traverse id

Oder in Scalaz 6 (aus Ihrem zweiten Link oben), desto wesentlich mehr ausführlicher:

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

Ja, jeder Typ mit einer durchlaufbaren Instanz kann sequenziert werden (und es muss nicht einmal ein Monad sein).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top