mtl, ट्रांसफार्मर, मोनड्स-एफडी, मोनडलिब और पसंद का विरोधाभास


92

Hackad के पास monad ट्रांसफार्मर के लिए कई पैकेज हैं:

  • mtl : मोनाड ट्रांसफॉर्मर लाइब्रेरी
  • ट्रांसफॉर्मर : ठोस फ़नकार और मोनाड ट्रांसफार्मर
  • मोनाड्स-एफडी : मोनाड कक्षाएं, कार्यात्मक निर्भरता का उपयोग करते हुए
  • monads-tf : मोनाड क्लासेस, टाइप परिवारों का उपयोग करते हुए
  • मोनाडलिब : मोनाड ट्रांसफार्मर का एक संग्रह।
  • mtl-tf : प्रकार परिवारों का उपयोग करते हुए मोनाड ट्रांसफार्मर लाइब्रेरी।
  • एमएमटीएल : मॉड्यूलर मोनाड ट्रांसफॉर्मर लाइब्रेरी
  • mtlx : मोनाड ट्रांसफॉर्मर लाइब्रेरी टाइप इंडेक्स के साथ, 'मुफ्त' प्रतियां प्रदान करता है।
  • कम्पोज़-ट्रांस : कम्पोज़ेबल मोनाड ट्रांसफार्मर

(और शायद मुझे कुछ याद आया)

हम किसका उपयोग करेंगे?

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

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

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

  • data-accessor-monadLib लाइब्रेरी: monadLib के मोनडर्स के लिए एक्सेसर कार्य करता है
  • data-accessor-monads-fd लाइब्रेरी: मोनसार्ड- fd स्टेट मोनड क्लास में एक्सेस करने के लिए एक्सेसर का उपयोग करें
  • data-accessor-monads-tf लाइब्रेरी: मोनाड्स-tf में स्टेट एक्सेस करने के लिए Accessor का उपयोग करें
  • data-accessor-mtl लाइब्रेरी: mtl स्टेट मोनड क्लास में एक्सेस करने के लिए Accessor का उपयोग करें
  • data-accessor- ट्रांसफॉर्मर लाइब्रेरी: ट्रांसफॉर्मर में स्टेट एक्सेस करने के लिए Accessor का उपयोग करें स्टेट मोनाड

मुझे लगता है कि अगर यह चल रहा है और उदाहरण के लिए कई प्रतिस्पर्धी एरो पैकेज विकसित होते हैं, तो हम कुछ ऐसा देख सकते हैं: स्पूनकिलिंक-एरो-ट्रांसफॉर्मर, स्पूनकलिंक-एरो-मोनाडलिब, स्पूनकलिंक-टीएफ़र्रोज़-ट्रान्सफ़ॉर्मर, स्पूनक्लिंक-टीएफ़रोज़-मोनाडलिब, ...

और फिर मुझे चिंता है कि अगर स्पूनकलिंक कांटा हो गया, तो हैकेज डिस्क स्थान से बाहर चला जाएगा। :)

प्रशन:

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

2
इस लिंक ने मुझे mtl बनाम ट्रांसफॉर्मर haskell.org/haskellwiki/Monad_Transformer_Library
ब्रैंडन कुक

2
@Jberryman टिप्पणी के लिए नीचे स्क्रॉल करें ! Mtl या ट्रांसफ़ोमर्स का उपयोग करें, वे संगत बन गए!
सोफी

जवाबों:


70

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

  • mtlGHC एक्सटेंशन का उपयोग करता है, लेकिन transformersHaskell 98 है।
  • monads-fdकार्यात्मक निर्भरता और प्रकार के परिवारों का उपयोग करते हुए दोनों को क्रमशः monads-tfजोड़ने और उसमें से गायब होने की transformersकार्यक्षमता प्रदान करते हैं ।mtltransformers
  • mtl-tfmtlप्रकार परिवारों का उपयोग करके पुन: लागू किया जाता है ।

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

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

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

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

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

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

2
अगर mtl == ट्रांसफॉर्मर ++ मोनड्स-एफडी, तो क्या इसे इस तरह से लागू नहीं किया जा सकता है? (इसे प्रतिस्थापित करने की दिशा में एक चरण के रूप में) जिसमें डेटा-
एक्सेसर

2
@yairchu: हाँ, लेकिन आप मुझसे इसके बारे में क्या करने की उम्मीद करते हैं? :) बैकवर्ड संगतता बनाए रखना कभी भी उतना आसान नहीं है जितना लगता है, और महत्वपूर्ण पुस्तकालयों को बदलने में समय, प्रयास और कुछ हद तक सामुदायिक समर्थन लगता है। मोनड ट्रांसफॉर्मर की स्थिति एक ज्ञात समस्या है लेकिन मुझे नहीं लगता कि यह लंबे शॉट द्वारा किसी की सर्वोच्च प्राथमिकता है।
सीए मैक्कैन

5
@yairchu: मूल रूप से क्या किया जा रहा है। एमटीएल का अगला प्रमुख संस्करण एक स्टब होना चाहिए जो ट्रांसफॉर्मर + मोनड्स-एफडी को आयात करता है, और उस संस्करण के साथ संगतता निर्णायक कारक होगी। तब लाइब्रेरी व्यक्तिगत रूप से अपडेट की जा सकेंगी, ताकि वे mtl 1.1 और 1.2 दोनों के साथ संगत हों, और फिर ऐप को कबूतरों में से जो भी संस्करण स्थापित हो या उनके सबसे अधिक प्रतिबंधात्मक पुस्तकालय निर्भरता के लिए आवश्यक हो।
एडवर्ड KMETT

2
वर्तमान में पुस्तकालयों की मेलिंग सूची में मोनादियो (और संभवतः मोनाडट्रांस को एमटीएल और बेस से बाहर ले जाने पर चर्चा की जा रही है। हालांकि, इस बात पर लटका दिया गया है कि मोनाडिओ या एक अधिक सामान्य मोनडबेस को इस तथ्य के बावजूद कि मोनाडबेस को एमपीटीसी, फंडेप्स, आदि की आवश्यकता है)। ।
एडवर्ड KMETT

27
चूँकि मुझे यह पोस्ट बेहद ज्ञानवर्धक लगी। मैंने सोचा कि मैं अन्य googlers को अपडेट करूंगा: mtl अब ट्रांसफॉर्मर पर निर्भर करता है, monads-fd अब mll के आसपास एक स्टब है। इसलिए यदि आपके पास अतिरिक्त माल की जरूरत है, या केवल ट्रांसफॉर्मर का आयात करें, तो यदि उसका आपकी जरूरत का हर सामान है तो mtl का उपयोग करें।
jberryman

20

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

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

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

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


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

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

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

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

बहुत बढ़िया, विस्तृत स्पष्टीकरण के लिए धन्यवाद! जाहिर है, मेरे द्वारा स्विच किए गए कोड में कुछ बाहरी निर्भरताएं थीं - ज्यादातर एफएफआई बाइंडिंग, मुझे लगता है। मुझे यह भी एहसास नहीं हुआ कि मॉड्यूल नाम संघर्ष थे कि ... आक्रामक, मुझे लगता है? यह वास्तव में अजीब बातें करता है। :(
सीए मैककेन

16

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.