7

Sto imparando Haskell e Yampa al momento e ho una domanda sulla funzione di riattivazione.Differenza di tempo nella funzione di rincorsa (senso) in Yampa

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

Come si può vedere nella firma tipo, parte dell'output per la funzione di senso è la differenza di tempo tra la chiamata corrente e precedente della funzione. Negli esempi che ho visto, questa differenza di orario è calcolata "manualmente" all'interno del senso, usando un IORef per mantenere il valore della chiamata precedente.

Sembra strano che sia necessario tenere traccia della differenza di fuso orario utilizzando uno stato esterno, perché questo calcolo non viene eseguito nella funzione di riattivazione? È un IORef un buon modo per gestirlo?

risposta

1

Penso che il motivo per cui la riattivazione non calcola il tempo delta stesso è che questo potrebbe codificare un concetto specifico di tempo. Immagina di voler simulare il rischio del portafoglio per un periodo di dieci anni o qualcosa del genere e la risoluzione del delta temporale dovrebbe essere un giorno. Detto questo, sono d'accordo che la cosa di Ioref sembra un po 'hacky, anche se ho usato la stessa tecnica nel mio codice.

Problemi correlati