हम इस तरह कोड है:नेटवर्क में प्रतिक्रियाशील-केला हैंडल चक्र कर सकते हैं?
guiState :: Discrete GuiState
guiState = stepperD (GuiState []) $
union (mkGuiState <$> changes model) evtAutoLayout
evtAutoLayout :: Event GuiState
evtAutoLayout = fmap fromJust . filterE isJust . fmap autoLayout $ changes guiState
आप देख सकते हैं evtAutoLayout guiState जो evtAutoLayout में फ़ीड में फ़ीड - तो वहाँ एक चक्र है। यह जानबूझकर है। ऑटो लेआउट गुई राज्य को तब तक समायोजित करता है जब तक यह संतुलन तक नहीं पहुंच जाता है और फिर यह कुछ भी नहीं देता है और इसलिए इसे लूप को रोकना चाहिए। एक नया मॉडल परिवर्तन बेशक इसे फिर से लात मार सकता है।
जब हम इसे एक साथ रखते हैं, हालांकि, हम संकलन फ़ंक्शन कॉल पर एक अनंत लूप में भागते हैं। यहां तक कि अगर autoLayout = कुछ भी नहीं, यह अभी भी संकलन के दौरान एक ढेर ओवरफ्लो में परिणाम।
अगर मैं guiState में संघ कॉल को हटाने और तस्वीर से बाहर evtAutoLayout को दूर ...
guiState :: Discrete GuiState
guiState = stepperD (GuiState []) $ mkGuiState <$> changes model
यह ठीक काम करता है।
कोई सुझाव?
चूंकि आपने कहा था कि मैं स्पष्टीकरण/उदाहरणों के लिए पूछ सकता हूं ... आपके फ़िल्टर में, राइजिंग के लिए पहला पैरामीटर क्या है? यदि यह सिर्फ एक ईवेंट और इवेंट को परिवर्तित कर रहा है, तो इसमें 2 पैरा क्यों हैं? और आप फ़िल्टरराइजिंग का उपयोग कैसे करेंगे? धन्यवाद! – mentics
@taotree: आह, पहला पैरामीटर केवल कुछ प्रकार का प्रारंभिक मूल्य था। मैंने अब वर्णन से मेल खाने के लिए उदाहरण बदल दिया है। 'फ़िल्टरराइजिंग' फ़ंक्शन का उपयोग करना सरल है: यह एक ईवेंट स्ट्रीम को तर्क के रूप में लेता है और परिणामस्वरूप एक नया ईवेंट स्ट्रीम देता है, ताकि आप इसे अपनी पसंद की ईवेंट स्ट्रीम पर लागू कर सकें और एक नया प्राप्त कर सकें। –