28

In the chain documentation Sie finden:Funktioniert die Kettenfunktion in underscore.js eine Monade?

chain auf einem eingewickelt Objekt aufrufen wird zukünftig alle Verfahren führen ruft als gut verpackt Objekte zurückzukehren. Wenn Sie die Berechnung abgeschlossen haben, verwenden Sie value, um den endgültigen Wert abzurufen.

Funktioniert die chain Funktion eine Monade?

+3

Ich habe diese Haskell markiert, weil Haskellers etwas zu diesem Thema zu sagen haben. – Marcin

Antwort

38

Nein, keine Monade, aber eine Komonade! Es wird eine Funktion aktiviert, die ein umgebrochenes Objekt verwendet und einen normalen Wert in eine Funktion zurückgibt, die ein umgebrochenes Objekt sowohl übernimmt als auch zurückgibt. Als Signatur Haskell Typ, der wäre:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b) 

Die Art Signatur von value ist:

Wrapped a -> a 

Dies sind genau das, was Sie für einen comonad benötigen. Die erste Funktion wird üblicherweise extend und die zweite extract genannt.

Sie können sich ein comonad als Wert mit einem zusätzlichen Kontext vorstellen. Und das ist natürlich genau das, was chain tut.

Weitere Informationen zu Comonaden finden Sie unter this Stackoverflow question.

+8

Ich mag diese Antwort; Ich denke, es wäre augenfälliger, was Sie meinen, wenn Sie die Zuordnung von Unterstrich-Objektmethoden zu Typen erklären würden. Wenn ich richtig verstehe, sind die Methoden normalerweise 'Wrapped a -> b's, aber diese' chain' gibt ein Objekt zurück, dessen Methoden (außer 'value') alle' Wrapped a -> Wrapped b's sind. Ich kenne ein wenig Haskell, aber die Frage wurde ursprünglich nicht mit Haskell getaggt. Daher könnten Erklärungen, wie Ihre Antwort der JS-Bibliothek zugeordnet wird, hilfreich sein. – ellisbben