Die changes
Funktion hat den Typ Frameworks t => Behavior t a -> Moment t (Event t (Future a))
. Future
ist abstrakt und es gibt nur eine Funktion, die es konsumiert ( reactimate'
).
Allerdings kann ich einfach die folgende Funktion schreiben:
%Vor% um ein normales (nicht Future
) Ereignis zu erhalten.
Stimmt etwas nicht mit dieser Funktion? Wenn nicht, warum hat die ursprüngliche Funktion changes
einen restriktiveren Typ?
Die Funktion changes
liefert andere Werte als die von Ihnen beschriebene Funktion changes'
. Der entscheidende Punkt ist der folgende:
Betrachten Sie ein Verhalten, das von stepper
(oder accumB
) definiert wird und sich zur Zeit t0 ändert. Welchen Wert hat das Verhalten zu diesem Zeitpunkt? Die Antwort ist, dass das Verhalten den neuen Wert für alle Zeiten annimmt, die streng größer sind als der Zeitpunkt der Änderung, t & gt; t0 , und dass es zum Zeitpunkt t0 immer noch seinen alten Wert hat. Mit anderen Worten, die Funktion changes'
gibt ein Ereignis zurück, dessen Werte die alten Werte des Verhaltens zum Zeitpunkt der Änderung sind. Im Gegensatz dazu gibt die Funktion changes
die neuen ("zukünftigen") Werte zurück. Aus verschiedenen Gründen, die mit Rekursion zu tun haben, werden die neuen Werte in einen Future
-Typ eingeschlossen, so dass dies nicht möglich ist Zugriff bis zur reactimate'
-Phase.
EDIT: Tobias hat ein Bild zur Veranschaulichung gezeichnet:
Tags und Links haskell reactive-banana