7

J'apprends actuellement Haskell et Yampa et j'ai une question sur la fonction de réactivité.Différence de temps dans la fonction de réactivité (sens) dans Yampa

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

Comme vous pouvez le voir dans la signature de type, une partie de la sortie de la fonction de détection est la différence de temps entre l'appel en cours et précédent de la fonction. Dans les exemples que j'ai vus, cette différence de temps est calculée "manuellement" à l'intérieur du sens, en utilisant un IORef pour garder la valeur de l'appel précédent.

Il semble bizarre que vous deviez garder une trace de la différence de temps en utilisant un état externe, pourquoi ce calcul n'est-il pas fait dans la fonction de réactualisation? Un IORef est-il un bon moyen de le gérer?

Répondre

1

Je pense que la raison pour laquelle reactimate ne calcule pas le delta temporel lui-même est que cela coderait dur une notion spécifique du temps. Imaginez que vous souhaitiez simuler le risque du portefeuille sur une période de dix ans ou quelque chose comme ça, et votre résolution de delta de temps devrait être un jour. Cela étant dit, je suis d'accord que la chose Ioref semble un peu hacky, même si j'ai utilisé la même technique dans mon code.

Questions connexes