我正在使用Helm开发一个基于Elm语言的项目。
我需要根据一对信号中的哪个信号首先到达来触发事件。在Elm中,我会使用merge函数,但我找不到Helm中的等价函数。我看到的最近的是组合(在信号库中),它似乎没有做我想要的。似乎组合只需要一个信号列表并使它们直接成为列表信号,这不是我正在寻找的。 p>
编辑:具体来说,我正在寻找一个带有签名Signal a -> Signal a -> Signal a
的函数,它会触发第一个信号并丢弃第二个信号。
在Helm中实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
您可以使用Applicative
实例组合内容。例如,liftA2 (,)
的类型为Signal a -> Signal b -> Signal (a,b)
。
(我不是百分之百确定这是否是你的问题。如果你的问题是关于合并像Event a -> Event a -> Event a
这样的事件,我不确定helm是否具有这样的功能。我只能找到文档对于具有连续语义的类似行为的Signal
。)
答案 1 :(得分:2)
我认为最好的方法是找出Helm的merge
如何用Elerea的东西实现,并用更原始的术语实现timestamp
。我担心我无法帮助你,因为我不太了解赫尔姆,我根本不认识埃莉亚。
我可以帮助您完全基于Helm的hacky解决方案。您可以使用merge sigL sigR =
let
tsMerge (t1,v1) (t2,v2) =
if t1 >= t2
then v1
else v2
in
tsMerge <~ timestamp sigL ~~ timestamp sigR
区分不同的事件和压缩信号:
{{1}}