Ich frage mich, ob es eine typeclass
in Katzen oder Scalaz ist, die einen Operator wie dies bietet:Scala Katzen oder Scalaz typeclass scanLeft wie
def scan[G[_],A,B](zero: B)(g: G[A],f: (A,B) => B):G[B]
Oder wenn es existiert eine gewisse mathematische Definition für solche Betreiber (etwas wie Monad
für bind/flatMap
).
Die Idee von diesem typeclass
wäre, eine binäre Funktion auf einen Typkonstruktor anzuwenden und den gleichen Typkonstruktor zurückzubekommen, aber mit einem anderen Typparameter (der gleiche Typ, den die Binärfunktion zurückgibt).
Ich denke, würde scanLeft
der Scala Standard Library Sammlungen ähnlich sein.
Lassen Sie mich fragen, was die Eigenschaften des zurückgegebenen Wertes sind - was sind die Gesetze dieser Typklasse? Ich meine, ich weiß es für "Scan" auf sammlungstypischen Typen. Aber können wir das verallgemeinern? – ziggystar
@ziggystar Ja, wir könnten es verallgemeinern. Der zurückgegebene Wert ('G [_]') könnte ein Monad/Funktor sein .. der 'Scan' selbst kann in Form von 'flatMap/map' mit einem Zustand in der Methode implementiert werden. Mein Denken ähnelt Elms "foldp". Entschuldigung für die späte Antwort. – salc2