Yampa中重新(感觉)功能的时差

Asg*_*gel 7 haskell functional-programming reactive-programming yampa

我现在正在学习Haskell和Yampa,并对重新启动函数有疑问.

reactimate :: IO a -- init
      -> (Bool -> IO (DTime, Maybe a)) -- sense
      -> (Bool -> b -> IO Bool) -- actuate
          -> SF a b -- signal function
      -> IO ()
Run Code Online (Sandbox Code Playgroud)

正如你在类型签名中看到的那样,sense函数的部分输出是函数当前和上一次调用之间的时间差.在我看到的例子中,这个时间差是在意义上"手动"计算的,使用IORef来保持前一次调用的值.

你必须使用外部状态跟踪时差这似乎很奇怪,为什么在重新计算功能中不进行这种计算?IORef是处理它的好方法吗?

mar*_*ngw 1

我认为重新启动本身不计算时间增量的原因是这会硬编码一个特定的时间概念。想象一下,您想要模拟十年或类似时间段内的投资组合风险,并且您的时间增量分辨率应该是一天。话虽这么说,我同意 Ioref 的东西看起来有点老套,尽管我在代码中使用了相同的技术。