मैं इस गाइड को कौशल के स्तर पर ऑर्डर करने जा रहा हूं जो आपके पास हास्केल में है, जो एक विशेषज्ञ के लिए बिल्कुल सही शुरुआत से जा रहा है। ध्यान दें कि इस प्रक्रिया में कई महीने (वर्ष?) लगेंगे, इसलिए यह लंबा है।
बिलकुल शुरुआती
सबसे पहले, हास्केल कुछ भी करने में सक्षम है, पर्याप्त कौशल के साथ। यह बहुत तेज़ है (मेरे अनुभव में केवल C और C ++ के पीछे), और इसका उपयोग सिमुलेशन से सर्वर, गाइस और वेब एप्लिकेशन तक किसी भी चीज़ के लिए किया जा सकता है।
हालांकि कुछ समस्याएं हैं जो हास्केल में दूसरों की तुलना में शुरुआती के लिए लिखना आसान है। गणितीय समस्याएं और सूची प्रक्रिया कार्यक्रम इसके लिए अच्छे उम्मीदवार हैं, क्योंकि उन्हें केवल हास्केल ज्ञान की सबसे बुनियादी आवश्यकता है जो लिखने में सक्षम हो।
सबसे पहले, हास्केल की मूल बातें सीखने के लिए कुछ अच्छे मार्गदर्शक हैं, हैप्पी लर्निंग हैस्केल ट्यूटोरियल और पहले 6 अध्यायों में आप एक हैस्केल सीखते हैं । इन्हें पढ़ते हुए, यह बहुत अच्छा विचार है कि आप जो जानते हैं, उसके साथ सरल समस्याओं को भी हल करें।
एक और दो अच्छे संसाधन हैंस्केल प्रोग्रामिंग पहले सिद्धांतों से , और हास्केल में प्रोग्रामिंग । वे दोनों प्रत्येक अध्याय के लिए अभ्यास के साथ आते हैं, इसलिए आपके पास पिछले कुछ पृष्ठों पर सीखी गई छोटी-छोटी सरल समस्याएं हैं।
कोशिश करने के लिए समस्याओं की एक अच्छी सूची है haskell 99 समस्याएं पृष्ठ । ये बहुत बुनियादी शुरू करते हैं, और जैसे-जैसे आगे बढ़ते हैं, और अधिक कठिन होते जाते हैं। यह बहुत अच्छा अभ्यास है उनमें से बहुत से कर रहे हैं, क्योंकि वे आपको अपने कौशल को पुनरावृत्ति और उच्च क्रम कार्यों में अभ्यास करने देते हैं। मैं किसी भी समस्या को रोकने की सिफारिश करूंगा जिसमें यादृच्छिकता की आवश्यकता होती है क्योंकि हास्केल में यह थोड़ा अधिक कठिन है। यदि आप क्विकचेक के साथ अपने समाधान का परीक्षण करना चाहते हैं, तो इस एसओ प्रश्न की जाँच करें ( नीचे इंटरमीडिएट देखें)।
एक बार जब आप उनमें से कुछ कर लेते हैं, तो आप प्रोजेक्ट यूलर की कुछ समस्याओं को करने के लिए आगे बढ़ सकते हैं । ये इस बात से हल हो जाते हैं कि कितने लोगों ने उन्हें पूरा किया है, जो कठिनाई का एक अच्छा संकेत है। ये पिछली समस्याओं से अधिक आपके तर्क और हास्केल का परीक्षण करते हैं, लेकिन आपको अभी भी पहले कुछ करने में सक्षम होना चाहिए। इन समस्याओं के साथ हास्केल का एक बड़ा फायदा यह है कि इंटेगर आकार में सीमित नहीं हैं। इनमें से कुछ समस्याओं को पूरा करने के लिए, आपको एक हास्केल सीखने के लिए अध्याय 7 और 8 को पढ़ना उपयोगी होगा।
शुरुआती
उसके बाद आपके पास पुनरावृत्ति और उच्च क्रम के कार्यों पर एक अच्छा संभाल होना चाहिए, इसलिए यह कुछ और वास्तविक कार्य समस्याओं को शुरू करने का एक अच्छा समय होगा। शुरू करने के लिए एक बहुत अच्छी जगह है रियल वर्ल्ड हास्केल (ऑनलाइन बुक, आप एक हार्ड कॉपी भी खरीद सकते हैं)। मैंने पाया कि पहले कुछ अध्यायों ने बहुत जल्दी किसी ऐसे व्यक्ति के लिए शुरुआत की, जिसने पहले कभी कार्यात्मक प्रोग्रामिंग / पुनरावृत्ति नहीं की थी। हालांकि अभ्यास के साथ आपको पिछली समस्याओं को करने से आपको पूरी तरह से समझने योग्य होना चाहिए।
पुस्तक में समस्याओं के माध्यम से काम करना हास्केल में अमूर्त और पुन: प्रयोज्य घटकों का प्रबंधन करने का एक शानदार तरीका है। यह ऑब्जेक्ट-ओरिएंटेड (oo) प्रोग्रामिंग के लिए उपयोग किए जाने वाले लोगों के लिए महत्वपूर्ण है, क्योंकि सामान्य oo एब्स्ट्रैक्शन मेथड (oo classes) Haskell में नहीं दिखाई देते हैं (Haskell में टाइप क्लासेस होती हैं, लेकिन वे oo क्लासेस के लिए बहुत भिन्न होती हैं, oo इंटरफेस से अधिक )। मुझे नहीं लगता कि यह अध्यायों को छोड़ना एक अच्छा विचार है, क्योंकि प्रत्येक बहुत नए विचारों का परिचय देता है जो बाद के अध्यायों में उपयोग किए जाते हैं।
थोड़ी देर बाद आपको अध्याय 14, खूंखार मोनाडर्स अध्याय (डम डम डममम) मिलेगा। लगभग हर कोई जो हास्केल सीखता है, उसे समझने में परेशानी होती है कि अवधारणा कितनी अमूर्त है। मैं किसी अन्य भाषा में किसी भी अवधारणा के बारे में नहीं सोच सकता जो कि सारगर्भित है क्योंकि मठ कार्यात्मक प्रोग्रामिंग में हैं। मोनाड्स एक विचार के तहत एकीकृत होने के लिए कई विचारों (जैसे कि आईओ संचालन, गणना विफल हो सकता है, पार्सिंग, ...) की अनुमति देता है। यदि आप वास्तव में उन्हें नहीं समझते हैं तो मोनाड अध्याय को पढ़ने के बाद निराश न हों। मुझे भिक्षुओं के कई अलग-अलग स्पष्टीकरणों को पढ़ना उपयोगी लगा; हर एक समस्या पर एक नया दृष्टिकोण देता है। यहाँ monad ट्यूटोरियल्स की बहुत अच्छी सूची है । मैं सभी मोनाड्स के बारे में अत्यधिक अनुशंसा करता हूं , लेकिन अन्य भी अच्छे हैं।
इसके अलावा, अवधारणाओं को वास्तव में डूबने में कुछ समय लगता है। यह उपयोग के माध्यम से आता है, लेकिन समय के माध्यम से भी। मुझे लगता है कि कभी-कभी किसी समस्या पर सोने से कहीं ज्यादा मदद मिलती है! आखिरकार, यह विचार क्लिक करेगा, और आपको आश्चर्य होगा कि आपने एक अवधारणा को समझने के लिए संघर्ष क्यों किया है कि वास्तव में अविश्वसनीय रूप से सरल है। ऐसा होने पर यह बहुत बढ़िया है, और जब ऐसा होता है, तो आप हास्केल को अपनी पसंदीदा अनिवार्य प्रोग्रामिंग भाषा मान सकते हैं :)
यह सुनिश्चित करने के लिए कि आप हास्केल प्रकार प्रणाली को पूरी तरह से समझ रहे हैं, आपको 20 मध्यवर्ती हैस्केल अभ्यासों को हल करने का प्रयास करना चाहिए । "प्यारे" और "केला" जैसे कार्यों के मज़ेदार नामों का उपयोग करने वाले व्यायाम और यदि आपके पास पहले से ही नहीं है तो आपको कुछ बुनियादी कार्यात्मक प्रोग्रामिंग अवधारणाओं की अच्छी समझ रखने में मदद मिलती है। तीर, यूनिकॉर्न, सॉसेज और प्यारे केले के साथ कवर किए गए कागज के एक गुच्छा के साथ अपनी शाम बिताने का अच्छा तरीका।
मध्यम
एक बार जब आप मोनाड्स को समझ लेते हैं, तो मुझे लगता है कि आपने एक शुरुआती हास्केल प्रोग्रामर से एक मध्यवर्ती हस्केलर में संक्रमण किया है। तो यहां से कहां जाएं? पहली चीज़ जो मैं सुझाऊँगा (यदि आपने उन्हें पहले से सीखने वाले साधुओं से नहीं सीखा है) तो पाठक, लेखक और राज्य जैसे विभिन्न प्रकार के भिक्षु हैं। फिर से, असली दुनिया हास्केल और सभी के बारे में भिक्षुओं के महान कवरेज देता है। अपने मॉनड प्रशिक्षण को पूरा करने के लिए मोनाड ट्रांसफार्मर के बारे में सीखना आवश्यक है। ये आपको विभिन्न प्रकार के मोनाड (जैसे रीडर और स्टेट मोनाड) को एक में जोड़ देते हैं। यह शुरू करने के लिए बेकार लग सकता है, लेकिन थोड़ी देर के लिए उनका उपयोग करने के बाद आप आश्चर्य करेंगे कि आप उनके बिना कैसे रहते थे।
यदि आप चाहें तो अब आप असली दुनिया हास्केल पुस्तक को समाप्त कर सकते हैं। अध्यायों को छोड़ना अब वास्तव में कोई मायने नहीं रखता है, जब तक कि आपके पास थपथपाने वाले पैट हैं। बस वही चुनें जो आप में रुचि रखते हैं।
आपके पास अब जो ज्ञान है, उसके साथ आपको कैबेल पर अधिकांश पैकेज (अच्छी तरह से प्रलेखित कम से कम ...) का उपयोग करने में सक्षम होना चाहिए, साथ ही साथ अधिकांश पुस्तकालय जो हास्केल के साथ आते हैं। कोशिश करने के लिए दिलचस्प पुस्तकालयों की एक सूची होगी:
पारसेक : पार्सिंग कार्यक्रमों और पाठ के लिए। रेगेक्स का उपयोग करने से बहुत बेहतर है। उत्कृष्ट प्रलेखन, एक वास्तविक दुनिया हास्केल अध्याय भी है।
क्विकचेक : एक बहुत अच्छा परीक्षण कार्यक्रम। आप जो करते हैं वह एक विधेय लिखते हैं जो हमेशा सही होना चाहिए (जैसे length (reverse lst) == length lst
)। आप फिर QuickCheck को विधेय पास करते हैं, और यह बहुत सारे यादृच्छिक मान उत्पन्न करेगा (इस मामले की सूचियों में) और परीक्षण करें कि विधेय सभी परिणामों के लिए सही है। ऑनलाइन मैनुअल भी देखें ।
HUnit : हास्केल में यूनिट परीक्षण।
gtk2hs : हास्केल के लिए सबसे लोकप्रिय गिनी ढांचा, आपको हास्केल में gtk एप्लिकेशन लिखने की सुविधा देता है।
हैप्पीस्टैक : हास्केल के लिए एक वेब डेवलपमेंट फ्रेमवर्क। डेटाबेस का उपयोग नहीं करता है, बजाय एक डेटा प्रकार की दुकान। बहुत अच्छे डॉक्स (अन्य लोकप्रिय ढांचे स्नैप और यसोद होंगे )।
साथ ही, कई अवधारणाएं (जैसे मोनाड अवधारणा) हैं जिन्हें आपको अंततः सीखना चाहिए। यह पहली बार मोनाड्स सीखने से ज्यादा आसान होगा, क्योंकि आपके मस्तिष्क का उपयोग गर्भपात के स्तर से निपटने के लिए किया जाएगा। इन उच्च स्तरीय अवधारणाओं के बारे में सीखने के लिए एक बहुत अच्छा अवलोकन और वे एक साथ कैसे फिट होते हैं, यह टिपेकैपोपिडिया है ।
आवेदन: मोनाड्स की तरह एक इंटरफ़ेस, लेकिन कम शक्तिशाली। प्रत्येक मोनाड एपेक्टिव है, लेकिन इसके विपरीत नहीं। यह उपयोगी है क्योंकि कुछ प्रकार हैं जो लागू होते हैं लेकिन मोनाड नहीं होते हैं। इसके अलावा, आवेदक कार्यों का उपयोग करते हुए लिखा गया कोड अक्सर मोनाड कार्यों का उपयोग करते हुए समकक्ष कोड लिखने की तुलना में अधिक योग्य होता है। फ़नवेक्टर, एपेक्टिव फ़ंक्शंस और मोनॉयड देखें कि आप एक हेकेल गाइड सीखते हैं।
तह , traversable : Typeclasses कि सूचियों के संचालन के सार कई, ताकि एक ही काम करता है अन्य कंटेनर प्रकार के लिए लागू किया जा सकता है। हैस्केल विकी स्पष्टीकरण भी देखें ।
Monoid : एक Monoid एक ऐसा प्रकार है जिसमें एक शून्य (या यादगार) मान होता है, और एक ऑपरेशन होता है, <>
जो कि दो Monoids को एक साथ जोड़ता है, जैसे कि x <> mempty = mempty <> x = x
और x <> (y <> z) = (x <> y) <> z
। इन्हें पहचान और सहकारिता कानून कहा जाता है। कई प्रकार के मोनॉयड हैं, जैसे कि संख्या, साथ mempty = 0
और <> = +
। यह कई स्थितियों में उपयोगी है।
तीर : तीर एक अभिकलन का प्रतिनिधित्व करने का एक तरीका है जो एक इनपुट लेता है और एक आउटपुट लौटाता है। एक फ़ंक्शन सबसे बुनियादी प्रकार का तीर है, लेकिन कई अन्य प्रकार हैं। पुस्तकालय में तीरों के हेरफेर के लिए कई बहुत उपयोगी कार्य हैं - वे बहुत उपयोगी हैं, भले ही वे सादे पुराने हास्केल कार्यों के साथ उपयोग किए जाते हों।
Arrays : हास्केल में विभिन्न उत्परिवर्तनीय / अपरिवर्तनीय सरणियाँ।
ST मोनाड : आपको एक उत्परिवर्तित अवस्था वाला कोड लिखने देता है जो बहुत जल्दी चलता है, जबकि मोनाड के बाहर शुद्ध रहता है। अधिक जानकारी के लिए लिंक देखें।
FRP: फंक्शनल रिएक्टिव प्रोग्रामिंग, कोड लिखने का एक नया, प्रायोगिक तरीका जो इवेंट्स, ट्रिगर्स, इनपुट्स और आउटपुट (जैसे कि एक gui) को हैंडल करता है। मैं हालांकि इस बारे में ज्यादा नहीं जानता। यम के बारे में पॉल हुडक की चर्चा एक अच्छी शुरुआत है।
कई नई भाषा सुविधाएँ हैं जिन पर आपको एक नज़र डालनी चाहिए। मैं बस उन्हें सूचीबद्ध करूंगा, आप उनके बारे में बहुत सारी जानकारी Google से प्राप्त कर सकते हैं, haskell wikibook , haskellwiki.org साइट और gh प्रलेखन ।
- मल्टीपरमीटर प्रकार की कक्षाएं / कार्यात्मक निर्भरताएं
- परिवारों को टाइप करें
- लगातार मात्रा निर्धारित प्रकार
- प्रेत प्रकार
- GADTS
- अन्य...
बहुत से हास्केल श्रेणी के सिद्धांत पर आधारित है , इसलिए आप उस पर गौर करना चाहते हैं। कंप्यूटर वैज्ञानिक के लिए एक अच्छा प्रारंभिक बिंदु श्रेणी का सिद्धांत है । यदि आप पुस्तक नहीं खरीदना चाहते हैं, तो लेखक का संबंधित लेख भी उत्कृष्ट है।
अंत में आप विभिन्न हास्केल टूल्स के बारे में अधिक जानना चाहते हैं। इसमें शामिल है:
- ghc (और इसकी सभी विशेषताएँ)
- केबल : हास्केल पैकेज सिस्टम
- डार्क्स : हास्केल में लिखा एक वितरित संस्करण नियंत्रण प्रणाली, हास्केल कार्यक्रमों के लिए बहुत लोकप्रिय है।
- हैडॉक : एक हास्केल स्वचालित प्रलेखन जनरेटर
इन सभी नए पुस्तकालयों और अवधारणाओं को सीखने के दौरान, हास्केल में एक मध्यम आकार की परियोजना लिखना बहुत उपयोगी है। यह कुछ भी हो सकता है (उदाहरण के लिए एक छोटा खेल, डेटा विश्लेषक, वेबसाइट, संकलक )। इस पर काम करने से आप सीखी गई कई चीजों को लागू कर सकेंगे। आप इस स्तर पर उम्र के लिए बने रहें (यह वह जगह है जहां मैं हूं)।
विशेषज्ञ
इस चरण में जाने के लिए आपको वर्ष लगेंगे (2009 से हैलो!), लेकिन यहां से मैं अनुमान लगा रहा हूं कि आप पीएचडी के पेपर, नए ghc एक्सटेंशन लिखना और नए अमूर्त के साथ आना शुरू कर देंगे।
सहायता ले रहा है
अंत में, सीखने के किसी भी स्तर पर, जानकारी प्राप्त करने के लिए कई स्थान हैं। य़े हैं:
- #haskell irc चैनल
- मेलिंग सूची । ये केवल चर्चाओं को पढ़ने के लिए साइन अप करने के लायक हैं - कुछ बहुत दिलचस्प हैं।
- अन्य स्थान haskell.org होम पेज पर सूचीबद्ध हैं
निष्कर्ष
खैर यह मेरी अपेक्षा से अधिक लंबा निकला ... वैसे भी, मुझे लगता है कि हास्केल में पारंगत होना बहुत अच्छा विचार है। इसमें लंबा समय लगता है, लेकिन यह मुख्य रूप से है क्योंकि आप ऐसा करके एक पूरी तरह से नया तरीका सीख रहे हैं। यह जावा सीखने के बाद रूबी सीखने जैसा नहीं है, लेकिन सी। सीखने के बाद जावा सीखना पसंद है। इसके अलावा, मुझे पता चल रहा है कि हास्केल सीखने के परिणामस्वरूप मेरे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कौशल में सुधार हुआ है, क्योंकि मैं अमूर्त विचारों के कई नए तरीके देख रहा हूं।