2012-09-20 14 views
7

मैं खुद को एफआरपी और प्रतिक्रियाशील-केले को पढ़ाने की प्रक्रिया में हूं, जबकि मुझे उम्मीद है कि मेरे पीछे आने वाले लोगों के लिए एक और उपयोगी ट्यूटोरियल होगा। आप ट्यूटोरियल here पर मेरी प्रगति की जांच कर सकते हैं।प्रतिक्रियाशील-केले में गैर-घटनाओं से घटनाओं के निर्माण के लिए कोई फ़ंक्शन क्यों नहीं हैं?

मैं घटनाओं का उपयोग कर सरल बीपी शोर उदाहरणों को लागू करने की कोशिश में फंस गया हूं। मैं जानता हूँ कि मैं इस तरह से कुछ करने की जरूरत है:

reactimate $ fmap (uncurry playNote) myEvent 

मेरी NetworkDescription में है, लेकिन मैं यह पता लगाने नहीं कर सकते कि कैसे सिर्फ नेटवर्क है करने के लिए बार-बार एक ही बात करते हैं, या एक बार कुछ करने। आदर्श रूप में, मैं इस तरह बातों के लिए देख रहा हूँ:

once :: a -> Event t a 
repeatWithDelay :: Event t a -> Time -> Event t a 
concatWithDelay :: Event t a -> Event t a -> Time -> Event t a 

Time प्रकार ऊपर समय की जो कुछ भी माप हम प्रयोग कर अंत के लिए सिर्फ एक खड़े में है। क्या मुझे "देरी" कार्यों को चलाने के लिए सिस्टम के समय को व्यवहार के रूप में जोड़ना होगा? यह आवश्यक से अधिक जटिल लगता है।

अग्रिम धन्यवाद,

इको नोलन

संपादित करें: ठीक है repeatWithDelay और concatWithDelay के लिए प्रकार मतलब नहीं है। यहां वास्तव में मेरा मतलब है।

repeatWithDelay :: a -> Time -> Event t a 
concatWithDelay :: a -> a -> Time -> Event t a 
+0

घटनाओं को उत्पन्न करने के लिए टाइमर का उपयोग करने के बारे में कैसे? – AndrewC

उत्तर

4

मैं अब के लिए कोर मॉडल में इस तरह के कार्यों में शामिल हैं के लिए नहीं चुना है, क्योंकि समयस्थिरता के लिए विभिन्न चुनौतियों को जन्म देती है। उदाहरण के लिए, यदि दो घटनाएं अब से 5 सेकंड होने वाली हैं, तो क्या वे एक साथ होनी चाहिए? यदि नहीं, तो कौन पहले आना चाहिए? मुझे लगता है कि मूल मॉडल औपचारिक प्रमाण के लिए उपयुक्त होना चाहिए, लेकिन यह वास्तविक, भौतिक समय माप के साथ काम नहीं करता है।

उसने कहा, "मैं काम करता हूं, लेकिन कोई गारंटी नहीं" फैशन में ऐसे कार्यों को शामिल करने की योजना बना रहा हूं। मुख्य कारण यह है कि मैंने पहले से ऐसा नहीं किया है कि समय माप के लिए कोई कैनोलिक विकल्प नहीं है। अलग-अलग अनुप्रयोगों की अलग-अलग ज़रूरत होती है, कभी-कभी आप नैनोसेकंद रिज़ॉल्यूशन चाहते हैं, कभी-कभी आप अपने जीयूआई फ्रेमवर्क से टाइमर का उपयोग करना चाहते हैं, और कभी-कभी आप बाहरी मिडी घड़ी में सिंक्रनाइज़ करना चाहते हैं। दूसरे शब्दों में, आप समय-आधारित फ़ंक्शन को कई टाइमर कार्यान्वयन के साथ सामान्य रूप से काम करना चाहते हैं, और यह केवल प्रतिक्रियाशील-केला-0.7.0 के साथ है कि मुझे इसके लिए एक अच्छा एपीआई डिज़ाइन मिला है।

बेशक, टाइमर का उपयोग कर अपने समय-आधारित फ़ंक्शन को लागू करना पहले से ही संभव है। Wave.hs उदाहरण दर्शाता है कि यह कैसे करें। एक और उदाहरण हेनिंग थिलेमैन की reactive-balsa library है, जो वास्तविक समय में MIDI डेटा को संसाधित करने के लिए विभिन्न समय-आधारित संयोजकों को लागू करता है।

संबंधित मुद्दे