conduit
और pipes
दोनों कहीं अधिक machines
से परिपक्व हैं, लेकिन - कि कहा - machines
conduit
और pipes
से एक अलग रास्ता लेने की कोशिश कर रहा है।
machines
के साथ, मैं प्रकार तर्कों के संदर्भ में अपेक्षाकृत सरल एपीआई की कोशिश कर रहा हूं। conduit
और pipes
दोनों ने 5-6 विभिन्न प्रकार परिवर्तनीय तर्कों का उपयोग करके अपनी सभी अवधारणाओं को एकजुट करना चुना है।
मशीनें अपने "इनपुट भाषा" है, जो (या दो एक Plan
के मामले में) एक भी अतिरिक्त तर्क पर सभी जिम्मेदारी डालता है पर एक मशीन (या Plan
) parameterizing का अलग तरीका अपनाते हैं। इस तरह इनपुट भाषा को पैरामीटर करने के लिए भी इस तरह से मशीनों का उपयोग करने की संभावनाएं खुलती हैं जो कई इनपुट स्रोतों से इनपुट (गैर-) को निश्चित रूप से स्वीकार कर सकती हैं। परिणाम मूल रूप से एक अतिरिक्त 'emit' निर्देश के साथ एक मुफ़्त मोनड है!
मशीनों का निर्माण और उपयोग करने के तरीके के बारे में थोड़ा और कठोर नीति के बदले में, यह अंततः परिणामस्वरूप कोड के एसिम्पटोटिक्स के बारे में बेहतर सुरक्षा प्रदान कर सकता है।
जिसके अनुसार, pipes
और conduit
असली दुनिया उपयोग का एक बहुत पड़ा है और machines
कम या ज्यादा मेरे लिए एक खेल का मैदान, रुनर Bjarnason और पॉल Chiusano है।
यह वर्तमान में इनपुट पर काम करने के लिए उपयुक्त है जिसे आप पूरी तरह से उपभोग करने का इरादा रखते हैं, लेकिन जटिल संसाधनों के साथ काम करने के लिए या उन अन्य दो एपीआई के साथ आप जो प्राप्त करते हैं उससे पार्सिंग के लिए कम है।
अब, उस मात्रात्मक के बारे में!
t
वास्तव में अस्तित्व में प्रमाणित है। ऐसा करके हम Monad
मशीनों के लिए k
पैरामीटर की functoriality की परवाह नहीं कर सकते हैं। यह महत्वपूर्ण है क्योंकि Source
लागू किया गया है। मैं काम करने के लिए Source
जरूरत नहीं थी, तो हम इस्तेमाल कर सकते हैं सरल
data Step k o r = Stop
| Yield o r
| Await (k r) r
यह दुर्भाग्यपूर्ण पक्ष प्रभाव होता है कि जब आप एक Source
के साथ एक मशीन की रचना करने, कि संकलक पता नहीं चला गया क्या Functor
उदाहरण लेने के लिए और आप अनावश्यक प्रकार की टिप्पणियों में तैर रहे होंगे।
kan-extensions
पैकेज पर काम करते समय मौजूद एक चाल है जो मैंने उठाया है। यह वहां से Yoneda
प्रकारों में से एक का सामान्यीकरण है।
धन्यवाद, क्या आप शायद 'के' के बारे में कुछ बता सकते हैं? 'प्रतीक्षा' में 'के आर' क्यों शामिल है, विशेष रूप से, 'k :: * -> *' और 'r' द्वारा parametrized क्यों है? मैंने 'टी', 'वाई' और 'इज़' की जांच करने की कोशिश की, अलग-अलग 'के' के कुछ उदाहरण देखने के लिए, लेकिन फिर भी मैं इसे समझने से बहुत दूर हूं। –
'k a' एक ऐसा प्रकार का अनुरोध है जिसे आप डेटा को खिला रहे हैं जो भी कर रहे हैं। 'ए 'अनुरोध के परिणाम का प्रतिनिधित्व करता है। 'प्रतीक्षा' प्रभावी ढंग से दो तर्क हैं: "अनुरोध सफल होने पर क्या करना है" और "विफलता पर क्या करना है"। एक इनपुट के लिए आप k = (->) i' का उपयोग कर सकते हैं ताकि 'मशीन ((->) i)' को '(i -> r)' से एक फ़ंक्शन दिया गया हो ताकि आप इनपुट की आपूर्ति कर सकें। 'टी' के साथ आप दो कार्यों में से एक के साथ हवादार हो जाते हैं ताकि आप या तो इनपुट को अलग से ब्लॉक कर सकें। 'वाई' आपको एक ही समय में या तो दोनों इनपुट पर अवरुद्ध करने की अनुमति देता है। 'Is' का उपयोग अभी' (->) 'जैसा किया जाता है। –
एक और सवाल, 'योजना और' मशीन क्यों हैं? भेद क्यों? –