haskell - 如何在 Helm 中合并信号?

标签 haskell frp elm

我正在使用 Helm 开展一个项目,它基于 Elm 语言。

我需要根据一对信号中哪个信号首先到达来触发一个事件。在 Elm 中,我会使用 merge函数,但我在 Helm 中找不到等效的函数。我看到的最接近的是组合(在信号库中),它似乎没有达到我想要的效果。看来combine只是接受一个信号列表并将它们直接变成一个列表信号,这并不是我想要的。

编辑:具体来说,我正在寻找一个带有签名 Signal a -> Signal a -> Signal a 的函数,它需要第一个信号来触发并丢弃第二个信号。

在 Helm 中实现此目的的最佳方法是什么?

最佳答案

我认为最好的方法是找出 Helm 的 Signal 是如何用 Elerea 的东西实现的,并用那些更原始的术语实现 merge 。恐怕我帮不了你,因为我不太了解 Helm,也根本不了解 Elerea。

可以帮助您提供仅基于 Helm 的黑客解决方案。您可以使用 timestamp 来区分不同的事件和压缩信号:

merge sigL sigR =
  let
    tsMerge (t1,v1) (t2,v2) =
        if t1 >= t2
          then v1
          else v2
  in
    tsMerge <~ timestamp sigL ~~ timestamp sigR

关于haskell - 如何在 Helm 中合并信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553388/

相关文章:

haskell - `valueB` 是如何工作的?它总是返回相同的值?

Elm 语法,在不使用临时变量的情况下转发匹配案例

list - Elm 随机列表实现

haskell - 了解filterM

c# - Haskell 和 LINQ 之间有什么联系吗?

haskell - 如何提取文字幻像类型的值?

Haskell 代码错误 - 我不明白它的要求

javascript - 如何在 rxjs 中链接可观察量

haskell - react 性香蕉中的 'Latch' 和 'Pulse' 是什么?

arrays - Elm 中的阵列与列表