में व्यवहार (और अन्य प्रकार) को लागू करने के लिए कहां मैं reactive-banana का उपयोग कर प्रोग्राम पर काम कर रहा हूं, और मैं सोच रहा हूं कि बुनियादी प्रकार के एफआरपी बिल्डिंग ब्लॉक के साथ मेरे प्रकारों को कैसे व्यवस्थित किया जाए।एफआरपी
उदाहरण के लिए, यहां मेरे वास्तविक कार्यक्रम से एक सरल उदाहरण है: मेरा सिस्टम मुख्य रूप से विजेट से बना है - मेरे कार्यक्रम में, पाठ के टुकड़े समय के साथ भिन्न होते हैं।
मैं
newtype Widget = Widget { widgetText :: Behavior String }
हो सकता था लेकिन मैं यह भी
newtype Widget = Widget { widgetText :: String }
है और Behavior Widget
का उपयोग जब मैं समय-अलग व्यवहार के बारे में बात करना चाहता हूँ सकता है। ऐसा लगता है कि चीजें "सरल" बनाती हैं, और इसका मतलब है कि मैं इसे करने के लिए विजेट को अनपैक और रीपैक करने के बजाय Behavior
संचालन का अधिक उपयोग कर सकता हूं।
दूसरी ओर, पूर्व कोड है कि वास्तव में विजेट्स को परिभाषित करता है में दोहराव से बचने के, के बाद से लगभग सभी विजेट का समय के साथ बदल रहा है, और मैं अपने आप को भी कुछ है कि Behavior
साथ नहीं है परिभाषित, यह बाद से लगता है मैं उन्हें दूसरों के साथ एक अधिक संगत तरीके से गठबंधन करने देता हूं।
एक और उदाहरण के रूप में, दोनों प्रस्तुतियों के साथ, Monoid
उदाहरण (और मैं अपने कार्यक्रम में एक होना चाहता हूं) होने का अर्थ है, लेकिन बाद के लिए कार्यान्वयन अधिक प्राकृतिक लगता है (क्योंकि यह केवल एक छोटा सा उठाना है newtype के लिए monoid सूची)।
इसी तरह (मेरे वास्तविक कार्यक्रम नहीं बल्कि Behavior
से Discrete
का उपयोग करता है, लेकिन मुझे लगता है कि प्रासंगिक है नहीं लगता है।)
, मैं Behavior (Coord,Coord)
या (Behavior Coord, Behavior Coord)
का उपयोग करना चाहिए एक 2D बिंदु का प्रतिनिधित्व करते हैं? इस मामले में, पूर्व स्पष्ट पसंद की तरह लगता है; लेकिन जब यह पांच-तत्व रिकॉर्ड होता है जो गेम में किसी इकाई की तरह कुछ प्रस्तुत करता है, तो विकल्प कम स्पष्ट लगता है।
संक्षेप में, इन सभी समस्याओं के लिए नीचे को कम:
एफआरपी का उपयोग करते समय क्या परत पर मैं Behavior
प्रकार आवेदन करना चाहिए?
(वही सवाल भी Event
पर लागू होता है, एक डिग्री कम है, हालांकि।)
ठीक है, 'विजेट' के मामले में, केवल एक फ़ील्ड होने पर सरलीकरण नहीं था, यह मेरी वास्तविक स्थिति है, इसलिए कोई tuples शामिल नहीं हैं :) मदद के लिए धन्यवाद, हालांकि - यह होना चाहिए भविष्य में बहुत मददगार! मैं अब 'व्यवहार' को नए प्रकार के अंदर रखूंगा। काश मैं दोनों उत्तरों को स्वीकार कर सकता हूँ :) – ehird