मैं Put
मोनैड का उपयोग कर Data.Binary
पर सीधे उपयोग करने के लिए उलझन में हूं। मैंने Binary Generation बाइनरी डेटा से निपटने के अनुभाग को पढ़ा है, और ऐसा लगता है कि आपको Put
का उपयोग करना चाहिए, लेकिन यह बहुत छोटा है क्यों नहीं समझाता है।हास्केल में बाइटस्ट्रिंग्स: क्या मुझे पुट या बिल्डर का उपयोग करना चाहिए?
Data.Binary.Put
रखें इकाई। आलसी bytestrings कुशलतापूर्वक निर्माण के लिए एक मोनड।
type Put = PutM()
बिल्डर को केवल एक राइटर मोनाड में लिफ्ट करें, जो() पर लागू होता है।
Data.Binary.Builder
आलसी बाइट तार के कुशल निर्माण।
एक Writer
इकाई की बात ()
के लिए आवेदन किया क्या है?
मैं देख सकता हूँ कि Put
(एक विशेष प्रकार के पर्याय) जबकि Builder
एक इकाई नहीं है, लेकिन मैं वास्तव में नहीं मिलता है क्यों Put
जरूरत होगी।
मेरे मामले में, मैं एक 3 डी दृश्य प्रस्तुत कर रहा हूं और प्रत्येक पिक्सेल को 3 बाइट्स के रूप में लिख रहा हूं, और फिर शुरुआत में पीपीएम प्रारूप के शीर्षलेख को जोड़ रहा हूं (बाद में पीएनजी का उपयोग करूंगा)।
Binary
ऐसा लगता है कि यह उन प्रकारों के लिए तत्काल होना है जिन्हें बाइनरी डेटा से क्रमबद्ध और deserialized किया जा सकता है। यह ठीक है कि मैं क्या कर रहा हूँ नहीं है, लेकिन यह मेरे रंग प्रकार के लिए Binary
का दृष्टांत के लिए प्राकृतिक महसूस किया
instance (Binary a) => Binary (Colour a) where
put (Colour r g b) = put r >> put g >> put b
get = Colour <$> get <*> get <*> get
यह put
करने के लिए आसान एक 24 बिट में Colour Word8
बनाता है। लेकिन फिर मुझे हेडर पर भी निपटना होगा, और मुझे यकीन नहीं है कि मुझे यह कैसे करना चाहिए।
Builder
दृश्यों के पीछे छिपा हुआ था, या यह निर्भर करता है? Binary
कक्षा केवल (डी) डेटा क्रमबद्ध करने के लिए, या सभी द्विआधारी उत्पादन उद्देश्यों के लिए है?
कोई जवाब नहीं है, लेकिन आप बाइनरी के बजाय ब्लेज़-बिल्डर (और दोस्तों) का उपयोग करने के लिए एक नज़र रखना चाहते हैं। –
@ टिलोविकलंड: मैंने पहले देखा था। इसके बारे में क्या अलग है? क्या यह अधिक कुशल है? – mk12
अन्य चीजों के अलावा। यहां लेखकों में से एक द्वारा एक अच्छा लेखन है: http://lambda-view.blogspot.se/2010/11/blaze-builder-library-faster.html –