我正在尝试掌握 Yampa,但是从高级信号函数的定义来看,integral
对于我来说,如何使用 Yampa 导出的带有惯用 Haskell 的组合器自己定义这样的信号函数对我来说并不明显(我不在乎目前的表现)。我的目标是学习如何编写自己的组合器来进行去抖动、缓冲、分组等。
该integral
函数使用未导出的构造函数SF
和SF'
. 如何仅使用其他导出的组合器编写它,可能使用带有开关和箭头符号的更惯用的 Yampa 样式?
integral :: VectorSpace a s => SF a a
integral = SF {sfTF = tf0}
where
tf0 a0 = (integralAux igrl0 a0, igrl0)
igrl0 = zeroVector
integralAux igrl a_prev = SF' tf -- True
where
tf dt a = (integralAux igrl' a, igrl')
where
igrl' = igrl ^+^ realToFrac dt *^ a_prev