7

Estoy aprendiendo Haskell y Yampa por el momento y tengo una pregunta acerca de la función de reactivación.Diferencia de tiempo en la función de recíproco (sentido) en Yampa

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

Como se puede ver en la firma de tipo, parte de la salida para la función de detección es la diferencia de tiempo entre la llamada actual y anterior de la función. En los ejemplos que he visto, esta diferencia horaria se calcula "manualmente" dentro de sense, usando un IORef para mantener el valor de la llamada anterior.

Parece raro que tenga que hacer un seguimiento de la diferencia de tiempo usando un estado externo, ¿por qué no se hace este cálculo en la función de reactivación? ¿Es un IORef una buena manera de manejarlo?

Respuesta

1

Creo que la razón por la que la reactimación no calcula el tiempo delta en sí es que esto dificultaría el código de una noción específica de tiempo. Imagine que desea simular el riesgo de la cartera durante un período de diez años o algo así, y su resolución delta de tiempo debería ser de un día. Habiendo dicho esto, estoy de acuerdo en que Ioref parece un poco hacky, aunque utilicé la misma técnica en mi código.

Cuestiones relacionadas