Разница во времени в функции реактивного (смысла )в Ямпе

В данный момент я изучаю Haskell и Yampa, и у меня есть вопрос о функции реактивации.

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

Как видно из сигнатуры типа, часть вывода функции sense — это разница во времени между текущим и предыдущим вызовом функции. В примерах, которые я видел, эта разница во времени вычисляется «вручную» внутри смысла, используя IORef для сохранения значения предыдущего вызова.

Кажется странным, что вы должны отслеживать разницу во времени, используя внешнее состояние, почему этот расчет не выполняется в функции реактивации? Является ли IORef хорошим способом справиться с этим?

7
задан AsgarZigel 4 July 2012 в 17:11
поделиться