7

Ich lerne Haskell und Yampa im Moment und habe eine Frage über die Reaktivierungsfunktion.Zeitunterschied in der Reaktiv (Sinn) Funktion in Yampa

reactimate :: IO a -- init 
     -> (Bool -> IO (DTime, Maybe a)) -- sense 
     -> (Bool -> b -> IO Bool) -- actuate 
      -> SF a b -- signal function 
     -> IO() 

Wie Sie in der Art Unterschrift, einen Teil der Ausgabe für die Lesefunktion ist die Zeitdifferenz zwischen dem aktuellen und den vorherigen Aufruf der Funktion zu sehen. In den Beispielen, die ich gesehen habe, wird diese Zeitdifferenz innerhalb von sense "manuell" berechnet, wobei ein IORef verwendet wird, um den Wert des vorherigen Anrufs beizubehalten.

Es scheint seltsam, dass Sie den Zeitunterschied mit einem externen Zustand verfolgen müssen, warum wird diese Berechnung nicht in der Reaktivierungsfunktion durchgeführt? Ist ein IORef ein guter Weg, damit umzugehen?

Antwort

1

Ich denke, der Grund, warum reactimate das Zeitdelta selbst nicht berechnet, ist, dass dies einen bestimmten Zeitbegriff fest codieren würde. Stellen Sie sich vor, Sie möchten das Portfoliorisiko über einen Zeitraum von zehn Jahren oder in ähnlicher Weise simulieren, und Ihre Zeit-Delta-Auflösung sollte einen Tag betragen. Ich stimme dem zu, dass das Ioref-Ding irgendwie hacky aussieht, obwohl ich die gleiche Technik in meinem Code verwendete.

Verwandte Themen