2014-09-29 6 views
7

क्या reactive-bananasunionelerea में कुछ ऐसा है?मैं elerea में दो या दो से अधिक संकेतों को कैसे एकीकृत करूं?

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

यह सिर्फ एक सिग्नल में दो सिग्नल विलय करता है। आदर्श रूप में मैं एक बड़ी संख्या (14 कश्मीर) संकेतों के का एक कुशल संघ तलाश कर रहा हूँ:

unions :: [Signal a] -> Signal a 

वहाँ डॉक्स में कुछ भी हो प्रतीत नहीं होता है, और न ही कुछ ऐसा है जिसे मैं एक निर्माण खंड की वजह रूप में देख सकते है ।


संपादित करें: शायद इस के अलावा:

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 के विचार पर कब्जा नहीं है।

उत्तर

4

elerea सिग्नल के लिए union की तरह कुछ भी नहीं है क्योंकि एक elerea नेटवर्क का मॉडल कैसे किया जाता है। एक 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_ 
संबंधित मुद्दे