Yampa中的reactimate函数中的时间差异(意义)。

7

我目前正在学习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是处理这种情况的好方法吗?

1个回答

1
我认为 reactimate 不计算时间差的原因是这会硬编码一个特定的时间概念。想象一下,你想在十年期间模拟投资组合风险或类似的事情,而你的时间差分辨率应该是一天。话虽如此,我同意 Ioref 的东西看起来有点 hacky,尽管我在我的代码中使用了相同的技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接