मैं आम तौर पर प्रतिक्रियाशील केले और एफआरपी के लिए नया हूं, इसलिए क्षमा करें यदि मुझे कुछ स्पष्ट याद आ रही है।ज़िप को कार्यान्वित करना :: इवेंट टी ए -> इवेंट टी बी -> इवेंट टी (ए, बी)
my project (GDB/MI फ्रंट एंड) के लिए मैं जीयूआई और फ्रंट एंड लॉजिक मॉड्यूल दोनों के लिए प्रतिक्रियाशील केले (संस्करण 0.6.0.0) का उपयोग कर रहा हूं। पूर्व महान काम करता है लेकिन बाद के लिए मुझे स्पष्ट रूप से अतिरिक्त संयोजक की आवश्यकता होती है।
उनमें से एक zipE :: Event t a -> Event t b -> Event t (a, b)
है।
zipE :: Event t Int -> Event t String -> NetworkDescription t (Event t (Int, String))
zipE ea eb = changes $ (,) <$> stepper 0 ea <*> stepper "" eb
बेशक
, मैं इस से संतुष्ट नहीं हूं: दुर्भाग्य से, मैं सब के साथ आ सकता है NetworkDescription इकाई changes
का उपयोग करता है और घटना प्रकार में साधारण नहीं है में एक समाधान है। इस प्रकार मैं पूछना चाहता था कि changes
(जो गैर-जीयूआई उद्देश्यों के लिए उपयोग करने के लिए निराश है) के बिना जेनेरिक ज़िप कार्य को कार्यान्वित करना है।
अन्य प्रयास विफल, उदा। tuples के पहले तत्व में
zipE :: Num a => Event t a -> Event t b -> Event t (a,b)
zipE ea eb = apply (stepper (0,) ((,) <$> ea)) eb
परिणाम एक के बाद स्थानांतरित किया जा रहा है - मैं "कुछ देरी" stepper
द्वारा शुरू की वजह से लगता है। लेकिन मुझे नहीं लगता कि stepper
(या उस मामले के लिए accumB
) के बिना किसी ईवेंट से व्यवहार कैसे प्राप्त करें और मुझे नहीं लगता कि किसी व्यवहार के बिना किसी फ़ंक्शन को फ़ंक्शन कैसे लागू करें। और कुल मिलाकर, मुझे नहीं लगता कि सामान्य प्रकार के मामले में स्टेपर को प्रारंभिक मूल्य कैसे प्रदान किया जाए।
'ea' और' eb' एक ही समय में आग नहीं जा रहे हैं। (यदि आप जानते हैं कि वे एक ही समय में आग लगने जा रहे हैं क्योंकि वे दोनों एक ही अंतर्निहित घटना से व्युत्पन्न हैं, तो शायद अंतर्निहित घटना को दोबारा शुरू करना सबसे अच्छा है।) आप क्या करना चाहते हैं जब कोई आग लगती है और दूसरा ' टी? – dave4420
डेव, आप सही हैं। मुझे अपने इवेंट नेटवर्क के लिए एक अलग डिज़ाइन चाहिए: -/इसे इंगित करने के लिए धन्यवाद। – copton
मुझे वास्तव में एक अलग घटना नेटवर्क की आवश्यकता है।प्रारंभ में, मैं tfles को 'f :: (ए, बी) -> आईओ() 'में खिलाने के लिए दो घटनाओं को ज़िप करना चाहता था। मेरे पास अब इसके बजाय 'f :: a -> b -> IO() 'और' प्रतिक्रिया $ (एफ <$> stepper 0 aE) <@> bE' है। – copton