Haskell 定义信号功能,如;积分;在Yampa方面';s公共API

Haskell 定义信号功能,如;积分;在Yampa方面';s公共API,haskell,yampa,Haskell,Yampa,我试图掌握Yampa,但从更高级别的信号函数(如integral)的定义来看,我不清楚如何使用Yampa导出的带有惯用Haskell的组合器来定义此类信号函数(目前我不关心性能)。我的目标是学习如何编写用于去抖动、缓冲、分组等的组合器 integral函数由未报告的构造函数SF和SF'定义。我如何才能只使用其他导出的组合符来编写它,可能使用更为惯用的带有开关和箭头符号的Yampa样式 integral :: VectorSpace a s => SF a a integral = SF {

我试图掌握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

通过查看
标识
常量
arrPrim
,可以为导出版本更改未报告的构造函数,但我发现,使用Hai Liu等人研究中的因果交换箭头这一更通用的方法更有趣

以我想要的样式显示一个
integral
实现:

integral :: ArrowInit a => a Double Double
integral = proc x -> do
  rec let i' = i + x * dt
      i <- init 0 -< i'
  returnA -< i
integral::ArrowInit a=>双精度
积分=过程x->do
rec让i'=i+x*dt

i通过查看
标识
常量
arrPrim
等,可以为导出版本更改未报告的构造函数,但我发现使用Hai Liu等人研究中的因果交换箭头的更一般方法更有趣

以我想要的样式显示一个
integral
实现:

integral :: ArrowInit a => a Double Double
integral = proc x -> do
  rec let i' = i + x * dt
      i <- init 0 -< i'
  returnA -< i
integral::ArrowInit a=>双精度
积分=过程x->do
rec让i'=i+x*dt
我