gpt4 book ai didi

haskell - 如何在 elerea 中统一两个或多个信号?

转载 作者:行者123 更新时间:2023-12-02 15:58:43 25 4
gpt4 key购买 nike

有类似 reactive-bananas 的东西吗? union函数位于 elerea

union :: Signal a -> Signal a -> Signal a

这只是将两个信号合并到一个流中。理想情况下,我正在寻找大量(14k)信号的有效联合:

unions :: [Signal a] -> Signal a

文档中似乎没有任何内容,也没有任何我可以识别的构建 block 。

<小时/>

编辑:除了这个:

unionSignal :: a -> Signal a -> Signal a -> SignalGen p (Signal a)
unionSignal initial a b = do
(s,f) <- execute $ external initial
_ <- effectful1 f a
_ <- effectful1 f b
return s

但是......这太丑陋了并且没有体现union的想法.

最佳答案

由于 elerea 网络的建模方式,没有什么比 elerea 信号的 union 更好的了。 elerea 信号在每一步只包含一个值,因此没有明智的方法可以同时组合任意值。但是,您可以通过几种不同的方式来组合信号,具体取决于值的组合方式。

unions :: [Signal a] -> Signal [a]
unions = sequence -- or Data.Traversable.sequenceA

或者您可以直接折叠输入

foldS :: (a -> b -> b) -> b -> [Signal a] -> Signal b
foldS f b signals = foldr (\signal acc -> f <$> signal <*> acc) (return b) signals
-- I think a right fold is more efficient, but it depends on elerea's internals and I'm not sure

如果您实际上并不关心该值,而只是想确保信号已接通,则可以使用

unions_ :: [Signal a] -> Signal ()
unions_ = sequence_

关于haskell - 如何在 elerea 中统一两个或多个信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26104735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com