启动信号功能与事件。哈斯克尔 - Euterpea

时间:2015-12-14 15:46:23

标签: haskell reactive-programming yampa euterpea

我正在使用Euterpea开发FRP应用程序,并且在理解如何做这件事时遇到了重大问题。

我有自己的信号功能,我想在特定事件发生时触发。现在我的SigFun刚从程序开始运行。

假设我有一个函数在图形上显示信号的傅里叶变换,它运行良好:(字符串1是负责生成吉他弦波形的函数。)

    d <- clockedSFToUISF 1 $ toFFT $ string 1 
                                  -< ()
    let (s,fft) = unzip d
        (a1,b1) = unzip s
    _ <- realtimeGraph graLay 1 Black -< zip a1 fft

我在toFFT函数中尝试了if-then-else表达式:

toFFT ::  SigFun CtrRate b Double -> SigFun CtrRate b (Double, SEvent [Double])
toFFT sf = proc input -> do 
       sfOut <- sf -< input
       fourierData <- fftA 100 256 -< sfOut
       outA -< if  ______  then (sfOut, fourierData) else (0.0, Nothing)

当if-flag为True时,一切正常显示,程序资源正常。当标志为假时。 FFT是平坦的(没关系),但程序开始消耗大量内存: Memory graph

我知道在Yampa有一些叫做开关的功能但我在Euterpea找不到它们。

是否可以按照我认为的方式“触发”信号功能?我读了一些关于ArrowChoice的内容,但我不清楚它是如何有用的。

我觉得有一些我不知道的基本内容。

0 个答案:

没有答案