मैं पार्सर का उपयोग कर Conduit
लिखने की कोशिश कर रहा हूं। विशेष रूप से, parseOne :: Parser T
दिए गए, मैं Conduit ByteString m T
बनाना चाहता हूं जो बार-बार इनपुट में पार्सर लागू करता है और परिणामों को स्ट्रीम करता है।मैं सिंक को एक सिंक में कैसे बदल सकता हूं?
attoparsec-conduit एक Sink
में एक Parser
चालू करने के लिए sinkParser
प्रदान करता है, लेकिन कैसे मैं एक Conduit
में इस Sink
बदल सकते हैं?
conduitSink :: (Resource m) => Sink a m b -> Conduit a m b
जो बार-बार Sink
में डेटा फ़ीड प्रत्येक परिणाम के उत्पादन के रूप में यह हो जाता है: क्या मैं के लिए देख रहा हूँ की तरह एक समारोह है। ऐसा लगता है कि इसे मैन्युअल लूप के रूप में काफी आसानी से लिखा जा सकता है, लेकिन मैं सोच रहा हूं कि कोई बेहतर तरीका है या नहीं।
कंड्यूट लाइब्रेरी में इस प्रतीत होता है-स्पष्ट कार्य की कमी मुझे लगता है कि मैं कुछ गलत कर रहा हूं; क्या इसे पूरा करने का एक बेहतर तरीका है? पाइपलाइन के बाद के चरणों द्वारा संसाधित होने के लिए उपयोग केस कच्चे बाइट को संदेश-आधारित नेटवर्क प्रोटोकॉल के पार्स किए गए रूप में बदल रहा है। मेरे पास पहले से विपरीत दिशा है (यानी Conduit T m ByteString
) blaze-builder-conduit के लिए धन्यवाद, इसलिए यह चीजों को ढांचे के सबसे प्राकृतिक तरीके की तरह लग रहा था।
धन्यवाद, मैं इसे आज़मा दूंगा। क्या इसका मतलब यह है कि मैं एटोपर्सेक-कंड्यूट का उपयोग नहीं करूँगा?यदि हां, तो इस तकनीक का उपयोग करके एक सामान्य 'conduitParser :: (AttoparsecInput a, ResourceThrow m) => पार्सर बी बी>> अपने इंटरफेस में एक एम बी' कंडिशन जोड़ने के लिए कोई बाधा होगी, या यह एक साधारण चूक है? – ehird
@ehird, मुझे विश्वास है कि यह बस एक चूक है; वर्तमान 'सिंक पार्सर' कोड से पता चलता है कि इसे आसानी से इनपुट स्ट्रीम को कई बार पार्स करने के लिए परिवर्तित किया जा सकता है, क्योंकि यह ऊपर वर्णित एक समान तकनीक का उपयोग करता है, केवल यह कि पहले पार्स के बाद इनपुट उपभोग करना बंद कर देता है। – dflemstr
दरअसल, ऐसा लगता है कि पहले से ही [पुल अनुरोध] है (https://github.com/snoyberg/conduit/pull/11) 'conduitParser' को attoparsec-enumerator में जोड़ना; मैं शायद उस कार्यान्वयन का उपयोग करूंगा। रास्ते में 'अनुक्रमित सिंक' के बारे में मुझे बताने के लिए धन्यवाद; दस्तावेज पढ़ने के दौरान मैंने इसे पारित किया। – ehird