मेरे पास एक साधारण कार्य है - फाइल से लाइनों का एक समूह पढ़ें और उनमें से प्रत्येक के साथ कुछ करें। पहले को छोड़कर - जो कुछ शीर्षकों को अनदेखा किया जा सकता है।एक पाइपलाइन में कंड्यूट ड्रॉप फ़ंक्शन का उपयोग कैसे करें?
तो मैंने सोचा कि मैं कंडिशन का प्रयास करूंगा।
printFile src = runResourceT $ CB.sourceFile src =$=
CT.decode CT.utf8 =$= CT.lines =$= CL.mapM_ putStrLn
कूल।
तो अब मैं सिर्फ बंद ... पहली पंक्ति ड्रॉप करना चाहते हैं और उसके लिए एक समारोह हो रहा है -
printFile src = runResourceT $ CB.sourceFile src =$=
CT.decode CT.utf8 =$= CT.lines =$= drop 1 =$= CL.mapM_ putStrLn
हम्म - लेकिन अब मैं ड्रॉप हस्ताक्षर Sink a m()
टाइप है नोटिस। - किसी ने मुझे सुझाव दिया कि मैं effectfully कुछ तत्वों ड्रॉप करने के पाइप और उपयोग ड्रॉप के लिए इकाई उदाहरण उपयोग कर सकते हैं तो मैं इस कोशिश की:
drop' :: Int -> Pipe a a m()
drop' n = do
CL.drop n
x <- await
case x of
Just v -> yield v
Nothing -> return()
कौन सा जाँच टाइप नहीं है क्योंकि पाइप के लिए इकाई उदाहरण केवल पाइप पर लागू होता है उसी प्रकार के - सिंक के पास उनके आउटपुट के रूप में शून्य है, इसलिए मैं इसका उपयोग इस तरह नहीं कर सकता।
मैंने पाइप और पाइप-कोर पर एक त्वरित नज़र डाली और मैंने देखा कि पाइप-कोर में यह कार्य है जैसा कि मैंने उम्मीद की थी, जहां पाइप एक न्यूनतम लाइब्रेरी है लेकिन दस्तावेज दिखाता है कि इसे कैसे कार्यान्वित किया जाएगा।
तो मैं कर रहा हूँ उलझन में - हो सकता है वहाँ एक महत्वपूर्ण अवधारणा मैं याद कर रहा हूँ है .. मैं समारोह
sequence :: Sink input m output -> Conduit input m output
लेकिन वह, सही विचार होना करने के लिए के रूप में उत्पादन मूल्य है प्रतीत नहीं होता देखा ()
CL.sequence (CL.drop 1) :: Conduit a m()
मैं शायद सिर्फ वापस जाएँ और आलसी-कब का उपयोग के रूप में मैं वास्तव में किसी भी स्ट्रीमिंग की जरूरत नहीं है जाएगा - लेकिन मैं यह करने के लिए उचित तरीके से देखने के लिए दिलचस्पी होगी।
हम्म - सरल उत्तर अच्छी तरह से काम करता है, धन्यवाद। ड्रॉपकंडिट 'मोनाड एम => इंट -> पाइप शून्य शून्य एम()' जो मुझे लगता है कि मुझे लगता है कि किसी भी चीज़ के लिए उपयोग करना मुश्किल है? – Oliver
क्षमा करें, मैं कोडबेस के एक अलग संस्करण पर काम कर रहा हूं जहां यह लागू नहीं होगा। कंड्यूट 0.4 में, आपको 'सिंकटॉइप (CL.drop n) >> CL.map id' होना चाहिए। मुद्दा यह है कि Data.Conduit.List में प्रकार अत्यधिक प्रतिबंधित हैं। कंड्यूट 0.5 उन्हें आराम देगा। –
अहह - चीयर्स। यह समझ आता है। – Oliver