我目前正在学习Haskell和Yampa,并对reactimate函数有疑问。
reactimate :: IO a -- init
-> (Bool -> IO (DTime, Maybe a)) -- sense
-> (Bool -> b -> IO Bool) -- actuate
-> SF a b -- signal function
-> IO ()
从类型签名中可以看出,sense函数的一部分输出是当前调用和上一次调用之间的时间差。在我看到的示例中,这个时间差是“手动”在sense函数中计算的,使用IORef来保持上一次调用的值。
需要注意的是,在reactimate函数中为什么不进行这个计算,而要使用外部状态记录时间差,这似乎有些奇怪。IORef是处理这种情况的好方法吗?