reactive-banana Zeitverzögerungen

8

Ich habe die Dokumentation von reactive-banana durchforstet und finde keinen Weg, explizit anzugeben Zeitverzögerungen. Nehmen wir zum Beispiel an, ich möchte ein Event t a nehmen und alle seine Vorkommen 1 Sekunde in die Zukunft verschieben; oder erhalte ein Ereignis, das in einer Sekunde ausgelöst wird (in Moment t ); oder so ähnlich. Sind explizite Verzögerungen in reaktiven Bananen darstellbar? Wenn nein, wie implementieren Benutzer z. B. eine um eine Sekunde verzögerte Eingabe?

    
luqui 29.10.2013, 20:56
quelle

2 Antworten

4

Wie Ben sagt, ist das richtig: reactive-banana ist keine eingebaute Vorstellung von Zeit und Verzögerungen.

Der Hauptgrund ist, dass es schwer ist zu garantieren, dass logische Zeit und Echtzeit übereinstimmen. Was passiert, wenn ein Mausklick in Echtzeit vor der logischen Zeit eines Ereignisses passiert, das noch nicht berechnet werden konnte, d. H. Dessen Echtzeit hinter der logischen Zeit zurückbleibt?

Es ist jedoch immer noch möglich, mit der Zeit zu arbeiten, indem externe Timer-Ereignisse verwendet werden. Sehen Sie sich das Beispiel Wave.hs an.

    
Heinrich Apfelmus 31.10.2013, 10:36
quelle
3

Ich bin kein Experte, aber ich habe eine ältere reaktive Banane für ein Programm mit genau diesem Bedürfnis verwendet (leider habe ich den Code im Moment leider nicht).

>

Ich denke , dass explizite Verzögerungen nicht super-natürlich in das reaktive Bananen-Framework passen, weil du immer implizit mit einer Art abstrakter Zeit arbeitest. Das Verzögern um bestimmte Intervalle erfordert die Auseinandersetzung mit dem Zeitbegriff der realen Welt. Ich kann sehen, dass es sehr schwer wäre zu sagen, was etwas wie union event (delay 1.0 event) im Sinne des autoritativen Modells bedeuten würde, wo type Event a = [Maybe a] : sollte es [a, b, a, b] oder [a, a, b, b] sein? Wie ich schon darüber nachgedacht habe, ist das Problem, dass das, was von diesen beiden resultieren sollte, ohne Angabe operativer Laufzeitdetails nicht spezifiziert ist.

Aber Sie können es "um" das reactive-banana-Framework tun, indem Sie eine IO-Aktion mit dem Ereignis verbinden, das Sie für eine Weile verzögern möchten (nicht natürlich im Hauptthread) und dann ein anderes Ereignis auslöst. Ich glaube, ich war in der Lage, all diese Logik in eine Funktion einzubinden, die ich von der NetworkDescription monad aufrufen konnte (das war, bevor die Moment monad existierte), um mein neues verzögertes Ereignis zu erhalten.

    
Ben 30.10.2013 05:35
quelle

Tags und Links