2010-05-04 10 views
80

Hackage इकाई ट्रांसफार्मर के लिए कई संकुल है:MTL, ट्रांसफॉर्मर, monads-fd, monadLib, और पसंद का विरोधाभास

  • mtl: इकाई ट्रांसफार्मर पुस्तकालय
  • transformers: कंकरीट functor और इकाई ट्रांसफार्मर
  • monads-fd: इकाई वर्गों कार्यात्मक निर्भरता
  • monads-tf का उपयोग कर,:, इकाई वर्गों प्रकार परिवारों का उपयोग कर
  • monadLib: इकाई ट्रांसफार्मर का एक संग्रह।
  • mtl-tf: इकाई ट्रांसफार्मर प्रकार परिवारों का उपयोग कर पुस्तकालय।
  • mmtl: मॉड्यूलर इकाई ट्रांसफार्मर पुस्तकालय
  • mtlx: प्रकार सूचकांक इकाई ट्रांसफार्मर पुस्तकालय, उपलब्ध कराने के 'निःशुल्क' प्रतियां।
  • compose-trans: composable इकाई ट्रांसफार्मर

(और शायद मैं कुछ याद किया)

कौन सा उपयोग हम चाहिए?

एमटीएल हास्केल प्लेटफ़ॉर्म में से एक है, लेकिन मैं रेडडिट पर सुनता रहता हूं कि यह अनकॉल है।

लेकिन क्या पसंद के बारे में बुरा वैसे भी, है यह सिर्फ एक अच्छी बात है न?

ठीक है, मैंने देखा कि कैसे उदाहरण के लिए डेटा-एक्सेसर के लेखकों इन सभी के लिए सिर्फ लोकप्रिय विकल्पों में पूरा करने के लिए करना था:

  • डेटा-एक्सेसर-monadLib पुस्तकालय: monadLib के monads
  • के लिए Accessor कार्यों
  • डेटा-एक्सेसर-monads-fd पुस्तकालय: उपयोग accessor में राज्य का उपयोग करने की monads-fd राज्य इकाई वर्ग
  • डेटा-एक्सेसर-monads-TF पुस्तकालय: उपयोग accessor monads-TF राज्य इकाई प्रकार परिवार में राज्य का उपयोग करने की
  • डेटा-एक्सेसर-MTL पुस्तकालय: उपयोग accessor राज्य तक पहुँचने के लिए मैं n MTL राज्य इकाई वर्ग
  • डेटा-एक्सेसर-ट्रांसफार्मर पुस्तकालय: उपयोग Accessor ट्रांसफार्मर राज्य इकाई में राज्य का उपयोग करने की

मैं कल्पना है कि अगर इस पर और उदाहरण कई प्रतिस्पर्धी तीर संकुल विकसित के लिए चला जाता है, हम कुछ देख सकते हैं जैसे: spoonklink-तीर-ट्रांसफॉर्मर, spoonklink-तीर-monadLib, spoonklink-tfArrows-ट्रांसफॉर्मर, spoonklink-tfArrows-monadLib, ...

और फिर मैं चिंता डिस्क से बाहर है कि अगर spoonklink काँटेदार हो जाता है, Hackage चलेंगे अंतरिक्ष । :)

सवाल:

  • क्यों इतने सारे इकाई ट्रांसफार्मर संकुल देखते हैं?
  • क्यों MTL [माना] uncool है?
  • मुख्य अंतर क्या हैं?
  • इनमें से अधिकतर प्रतिस्पर्धी पैकेज एंडी गिल द्वारा लिखे गए थे और रॉस पैटरसन द्वारा बनाए रखा जाता है। क्या इसका मतलब यह है कि ये पैकेज प्रतिस्पर्धा नहीं कर रहे हैं बल्कि किसी तरह से मिलकर काम करते हैं? और क्या एंडी और रॉस अप्रचलित के रूप में अपने स्वयं के किसी भी पैकेज पर विचार करते हैं?
  • आपको कौन सा और मैं उपयोग करना चाहिए?
+2

यह लिंक मुझे MTL ट्रांसफार्मर बनाम समझ में http://www.haskell.org/haskellwiki/Monad_Transformer_Library –

+1

के लिए [@jberryman टिप्पणी] (http://stackoverflow.com/questions/2769487/mtl-transformers नीचे स्क्रॉल मदद की -monads-एफडी monadlib और-विरोधाभास के- विकल्प # comment8791863_2769664)! एमटीएल या ट्रांसफॉर्मर्स का प्रयोग करें, वे संगत हो गए! – Sophie

उत्तर

63

उनमें से एक गुच्छा लगभग पूरी तरह से बराबर हैं:

  • mtl GHC एक्सटेंशन का उपयोग करता है, लेकिन transformers कार्यात्मक निर्भरता और प्रकार के उपयोग के हास्केल 98. है
  • monads-fd और monads-tftransformers लिए ऐड-ऑन कर रहे हैं, क्रमशः परिवार, mtl में कार्यक्षमता प्रदान करते हैं जो transformers से अनुपलब्ध है।
  • mtl-tfmtl टाइप परिवारों का उपयोग करके पुन: कार्यान्वित किया गया है।

तो अनिवार्य रूप से, mtl == transformers ++ monads-fd, mtl-tf == transformers ++ monads-tftransformers की बेहतर पोर्टेबिलिटी और मॉड्यूलरिटी और इसके संबंधित पैकेज क्यों हैं mtl इन दिनों अनकॉल है, मुझे लगता है।

mmtl और mtlx दोनों एपीआई मतभेदों और अतिरिक्त सुविधाओं के साथ mtl पर समान और/या समान प्रतीत होते हैं।

MonadLib मामलों पर एक अलग लेना प्रतीत होता है, लेकिन मैं सीधे इसके बारे में परिचित नहीं हूं। दूसरों के मुकाबले बहुत सारे जीएचसी एक्सटेंशन का भी उपयोग करना प्रतीत होता है।

एक नज़र में compose-trans मोनैड ट्रांसफार्मर बनाने के लिए मेटाप्रोग्रामिंग सामग्री की तरह लगता है। यह Control.Monad.Trans के साथ संगत होने का दावा करता है ... मुझे लगता है कि mtl है?

किसी भी दर पर, मैं निम्नलिखित निर्णय एल्गोरिथ्म सुझाव देंगे:

  • आप एक नई परियोजना के लिए मानक monads की ज़रूरत है? transformers & सह का उपयोग करें, हमें mtl को आराम करने में मदद करें।
  • क्या आप पहले से ही एक बड़ी परियोजना में mtl का उपयोग कर रहे हैं? transformers पूरी तरह से संगत नहीं है, लेकिन स्विच करने के लिए कोई भी आपको मार नहीं देगा।
  • अन्य पैकेजों में से एक यह है कि आप की जरूरत असामान्य कार्यक्षमता प्रदान करता है? अपने आप को रोल करने के बजाए इसका इस्तेमाल भी कर सकते हैं।
  • अभी भी असंतुष्ट? , उन सब को बाहर फेंक category-extras डाउनलोड, और एक पृष्ठ और समझ से बाहर सार बकवास breathtakingly सामान्य कोड के आधे के साथ दुनिया की समस्याओं का समाधान।
+2

यदि mtl == ट्रांसफॉर्मर ++ monads-fd, क्या इसे अभी इस तरह कार्यान्वित नहीं किया जा सकता है? (इसे बदलने की दिशा में एक चरण के रूप में) जो डेटा-एक्सेसर-एमटीएल – yairchu

+1

@Yairchu जैसी चीजों की आवश्यकता से छुटकारा पड़ेगा: हालांकि वे 100% संगत नहीं हैं, हालांकि - अगर कुछ और नहीं, तो मुझे लगता है कि इसमें मामूली अंतर हैं एपीआई। 'Mtl' का उपयोग करके अधिकांश पैकेजों के लिए स्विच करना मुश्किल नहीं होगा, लेकिन शायद यह ऐसा कुछ नहीं है जो सुरक्षित रूप से या दृश्यों के पीछे सुरक्षित रूप से किया जा सके। –

+1

@camccann: मैं देखता हूं। लेकिन अभी भी कुछ एकीकरण है जो कुछ सामान्य सामान निकालने के पीछे पीछे-संगत तरीके से किया जा सकता है। मोनाडट्रान क्लास, जो बिल्कुल वही है, को अपने पैकेज में रखा जा सकता है। फिर हो सकता है कि हो सकता है कि होलीटी/होट टी-ट्रांसफार्मर जैसे विभाजन की आवश्यकता न हो। दूसरा एक पहचान मोनाड है, जो टाइपकॉम्पेस में भी पुनर्निर्मित हो जाता है क्योंकि कोनल एमटीएल पर निर्भर नहीं होना चाहता है। – yairchu

20

इस पल के लिए? आपको शायद mtl का उपयोग करना चाहिए। क्या हो रहा है कि transformers पुस्तकालय एक फैशन है कि monads-fd और monads-tf सकते में MTL से बाहर किया जा रहा है पर निर्भर करता है सह-अस्तित्व शांतिपूर्ण ढंग से, लेकिन पिछले जाँच पर कि अभी तक मामला नहीं है।

जब ऐसा होता है आप StateT के लिए monads-fd और transformers आयात करने के लिए और (लगभग) मिलता है एक ही इंटरफ़ेस, अपवाद है कि State, आदि के साथ एक उपनाम होगा सकेंगे।

तो मैं mtl को लिखने चाहते हैं, लेकिन तथ्य यह है कि राज्य, रीडर, आदि वर्तमान में data के रूप में वे type रों साथ प्रतिस्थापित किया जाएगा रहे हैं पर भरोसा नहीं।

MonadLib एक और विकल्प है कि Iver पर काम कर रहा है, जिसे सुरक्षित रूप से उपयोग किया जा सकता है क्योंकि यह किसी अन्य मॉड्यूल नाम को दूसरों के साथ साझा नहीं करता है, लेकिन इसका काफी अलग उपयोग पैटर्न है।

+4

किस अर्थ में सह-अस्तित्व में है? एक ही पैकेज द्वारा प्रयुक्त? एक ही मॉड्यूल में आयात किया? एक ही ट्रांसफार्मर ढेर में संयुक्त? मिक्सिंग फंडप और टीएफ मुझे सामान्य रूप से एक बुरे विचार के रूप में मारता है। वैसे भी, मैंने 'ट्रांसफार्मर' और सह का व्यापक उपयोग नहीं किया है। अभी तक कुछ मामूली एपीआई मतभेद बनाम 'mtl' के अलावा कुछ (काफी सरल) कोड स्विच करते समय किसी भी समस्या का ध्यान नहीं दिया। –

+4

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

+1

ट्रांसफॉर्मर + monads- (tf | fd) का उपयोग लंबे समय तक उस अचार से बचने के लिए होगा, लेकिन हम अभी तक नहीं हैं। इस बीच उपयोग की प्रेरणा एमटीएल के पक्ष में है। अपग्रेड पथ यह प्रतीत होता है कि एमटीएल का अगला प्रमुख संस्करण एक स्टब के रूप में फिर से परिभाषित किया जाएगा जो मोनाड्स-एफडी और ट्रांसफार्मर आयात करता है। प्रमुख संस्करण ब्रेक आपके कैबेल फ़ाइल में राज्य करने का एक अच्छा तरीका प्रदान करता है कि आपको कोई परवाह नहीं है कि आपको कौन सा संस्करण मिलता है (यानी आप राज्य को एक प्रकार के उपनाम या डेटा प्रकार के बारे में परवाह नहीं करते हैं) और एक बार जब वह प्रमुख संस्करण बंप होता है तो यदि आप सभी लाइब्रेरी का उपयोग करते हैं तो आपको परवाह नहीं है कि सभी समान पूर्वाग्रह साझा करते हैं। –

7

फैक्टरिंग बाहर एडवर्ड Kmett उल्लेख his answer में monads-fd, ट्रांसफार्मर पर बनाया गया 2010 के अंत इसका अंतिम परिणाम में पूरा किया गया था, MTL का संस्करण 2 बन गया। mtl, monads-tf की सर्वव्यापीता के परिणामस्वरूप वास्तव में कभी पकड़ा नहीं गया। 2017 की शुरुआत में, एमटीएल और ट्रांसफार्मर एकमात्र मोनैड ट्रांसफॉर्मर लाइब्रेरी हैं जो व्यापक उपयोग देखते हैं।

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