हास्केल: Difference between revisions
From Vigyanwiki
(Created page with "{{short description|Functional programming language}} {{Other uses}} {{Use dmy dates|date=November 2019}} {{Infobox programming language | name = Haskell | logo = Logo_of_the_...") |
No edit summary |
||
| (9 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
{{short description|Functional programming language}} | {{short description|Functional programming language}} | ||
{{Other uses}} | {{Other uses}} | ||
{{Infobox programming language | {{Infobox programming language | ||
| name = Haskell | | name = Haskell | ||
| Line 25: | Line 25: | ||
| file ext = .hs, .lhs | | file ext = .hs, .lhs | ||
}} | }} | ||
हास्केल ({{IPAc-en|ˈ|h|æ|s|k|əl}}<ref>{{cite mailing list |url=http://www.haskell.org/pipermail/haskell-cafe/2008-January/038756.html |title=कोई मुझे "हास्केल" का उच्चारण बता सकता है?|date=28 January 2008 |access-date=12 March 2011 |mailing-list=Haskell-cafe |last=Chevalier |first=Tim}}</ref>) | हास्केल ({{IPAc-en|ˈ|h|æ|s|k|əl}}<ref>{{cite mailing list |url=http://www.haskell.org/pipermail/haskell-cafe/2008-January/038756.html |title=कोई मुझे "हास्केल" का उच्चारण बता सकता है?|date=28 January 2008 |access-date=12 March 2011 |mailing-list=Haskell-cafe |last=Chevalier |first=Tim}}</ref>) सामान्य-उद्देश्य वाली [[ प्रोग्रामिंग भाषा |प्रोग्रामिंग भाषा]] है। जिसका सामान्य-उद्देश्य, [[ स्थिर टाइपिंग |स्थिर टाइपिंग]] या स्थैतिक रूप से टाइप की गई, प्रकार अनुमान और [[ आलसी मूल्यांकन |मूल्यांकन]] के साथ [[ विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग |विशुद्ध रूप से फंक्शनल प्रोग्रामिंग]] प्रोग्रामिंग भाषा में प्रोग्राम करना हैं।<ref>Type inference originally using [[Type inference#Hindley–Milner type inference algorithm|Hindley-Milner type inference]]</ref>{{sfn|Peyton Jones|2003}} शिक्षण, अनुसंधान और औद्योगिक अनुप्रयोगों के लिए इसे डिज़ाइन किया गया, हास्केल ने कई प्रोग्रामिंग भाषाओं की सुविधाओं को प्रदान किया है जैसे कि [[ वर्ग टाइप करें |वर्ग टाइप करें]] , जो टाइप करने की सुरक्षा को सक्षम बनाता हैं। टाइप-सेफ[[ ऑपरेटर ओवरलोडिंग ]], और मोनाड (फंक्शनल प्रोग्रामिंग) इनपुट/आउटपुट के लिए बहुत उपयोगी हैं। हास्केल का मुख्य कार्यान्वयन [[ ग्लासगो हास्केल कंपाइलर |ग्लासगो हास्केल कंपाइलर]] (जीएचसी) है। इसका नाम [[ तर्क |तर्क]] विद्वान[[ हास्केल करी | हास्केल करी]] के नाम पर रखा गया है।{{sfn|Hudak|Hughes|Peyton Jones|Wadler|2007}} हास्केल के सिमेंटिक्स (कंप्यूटर विज्ञान) को ऐतिहासिक रूप से [[ मिरांडा (प्रोग्रामिंग भाषा) |मिरांडा (प्रोग्रामिंग भाषा)]] प्रोग्रामिंग भाषा पर आधारित हैं, जो प्रारंभिक हास्केल वर्किंग ग्रुप के प्रयासों पर ध्यान केंद्रित करने के लिए कार्य करता था।<ref>Edward Kmett, [https://www.youtube.com/watch?v=hIZxTQP1ifo Edward Kmett – Type Classes vs. the World]</ref> भाषा का अंतिम औपचारिक विनिर्देश जुलाई 2010 में बनाया गया था, जबकि जीएचसी का विकास भाषा के विस्तार के माध्यम से हास्केल का विस्तार करना जारी रखता है। | ||
हास्केल के सिमेंटिक्स (कंप्यूटर विज्ञान) ऐतिहासिक रूप से मिरांडा (प्रोग्रामिंग | |||
हास्केल का उपयोग अकादमिक और उद्योग में किया जाता है।<ref>{{Citation|last=Mossberg|first=Erik|title=erkmos/haskell-companies|date=2020-06-08|url=https://github.com/erkmos/haskell-companies|access-date=2020-06-22}}</ref><ref>{{cite book |last1=O'Sullivan |first1=Bryan |last2=Goerzen |first2=John |last3=Stewart |first3=Donald Bruce |title=रियल वर्ल्ड हास्केल: कोड जिस पर आप विश्वास कर सकते हैं|date=15 November 2008 |publisher="O'Reilly Media, Inc." |isbn=978-0-596-55430-9 |pages=xxviii-xxxi |url=https://books.google.com/books?id=nh0okI1a1sQC |language=en}}</ref><ref>{{cite web|title=प्रोडक्शन में हास्केल: रिस्कबुक|url=https://serokell.io/blog/haskell-in-industry-riskbook|access-date=2021-09-07|website=Serokell Software Development Company|language=en}}</ref> {{As of|2021|May}} हास्केल ट्यूटोरियल के लिए गूगल खोजों द्वारा 28वीं सबसे लोकप्रिय प्रोग्रामिंग भाषा थी,<ref>{{cite web|last=|first=|date=May 2021|title=प्रोग्रामिंग लैंग्वेज इंडेक्स की PYPL लोकप्रियता|url=http://pypl.github.io/PYPL.html|url-status=dead|archive-url=https://web.archive.org/web/20210507222106/https://pypl.github.io/PYPL.html|archive-date=7 May 2021|access-date=16 May 2021|website=pypl.github.io|language=en}}</ref> और [[ GitHub |गिट हब (GitHub)]] स्रोत कोड रिपॉजिटरी पर 1% से कम सक्रिय उपयोगकर्ता हैं।<ref>{{cite web|url=https://www.benfrederickson.com/ranking-programming-languages-by-github-users/|title=गिटहब उपयोगकर्ताओं द्वारा रैंकिंग प्रोग्रामिंग भाषाएं|last=Frederickson|first=Ben|website=www.benfrederickson.com|access-date=6 September 2019}}</ref> | |||
== इतिहास == | == इतिहास == | ||
1985 में रिसर्च सॉफ्टवेयर लिमिटेड द्वारा मिरांडा (प्रोग्रामिंग | 1985 में रिसर्च सॉफ्टवेयर लिमिटेड द्वारा मिरांडा (प्रोग्रामिंग भाषा) जारी करने के बाद फंक्शनल भाषाओं में रुचि बढ़ी। 1987 तक, एक दर्जन से अधिक गैर-सख्त कार्य, विशुद्ध रूप से फंक्शनल प्रोग्रामिंग भाषाएं सम्मलित थीं। मिरांडा सबसे व्यापक रूप से उपयोग किया गया था, लेकिन यह [[ मालिकाना सॉफ्टवेयर |मालिकाना सॉफ्टवेयर]] था। पोर्टलैंड, ओरेगॉन में [[ कार्यात्मक प्रोग्रामिंग भाषाएं और कंप्यूटर वास्तुकला |फंक्शनल प्रोग्रामिंग भाषाएं और कंप्यूटर वास्तुकला]] (FPCA '87) पर सम्मेलन में, एक मजबूत सहमति थी कि ऐसी भाषाओं के लिए खुले मानक को परिभाषित करने के लिए समिति का गठन किया जाए। इस समिति का उद्देश्य फंक्शनल-भाषा डिजाइन में भविष्य के शोध के आधार के रूप में कार्य करने के लिए सम्मलित फंक्शनल भाषाओं को सरल भाषा में समावेशित करना था।{{sfn|Peyton Jones|2003|loc=Preface}} | ||
=== हास्केल 1.0 से 1.4 === | === हास्केल 1.0 से 1.4 === | ||
हास्केल को एक समिति द्वारा विकसित किया गया था, जहां संभव हो वहां शेल्फ समाधानों को एक साथ लाने का प्रयास किया गया था। | हास्केल को एक समिति द्वारा विकसित किया गया था, जहां संभव हो वहां शेल्फ समाधानों को एक साथ लाने का प्रयास किया गया था। | ||
प्रकार की कक्षाएं, जो | इसमें कुछ प्रकार की कक्षाएं, जो इसकी सुरक्षा को सक्षम करती हैं। इन प्रकार के सुरक्षित ऑपरेटर ओवरलोडिंग, पहली बार [[ फिलिप वाडलर |फिलिप वाडलर]] और स्टीफन ब्लॉट द्वारा समानता से हर प्रकारों के तदर्थ संचालन और उस समय भाषाओं में अंकगणितीय अधिभार को संबोधित करने के लिए प्रस्तावित किया गया था।<ref>{{cite web|url=https://www.researchgate.net/publication/2710954|title=तदर्थ बहुरूपता को कम तदर्थ कैसे बनाया जाए|last=Wadler|first=Philip|date=October 1988}}</ref> | ||
हास्केल के | |||
हास्केल के प्रारंभिक संस्करणों में संस्करण 1.2 तक और इसमें सम्मलित हैं, उपयोगकर्ता इंटरैक्शन और आईओ (इनपुट और आउटपुट) दोनों स्ट्रीम आधारित और निरंतरता आधारित तंत्र द्वारा नियंत्रित किए गए थे जिन्हें व्यापक रूप से असंतोषजनक माना जाता था।<ref>{{cite web|url=https://www.microsoft.com/en-us/research/publication/wearing-hair-shirt-retrospective-haskell-2003/|title=हेयर शर्ट पहनना: हास्केल पर एक पूर्वव्यापी|last=Peyton Jones|first=Simon|website=[[Microsoft]] |date=2003|ref=none}}</ref> संस्करण 1.3 में, मोनाड_ (फंक्शनल_प्रोग्रामिंग) आईओ को टाइप क्लास के सामान्यीकरण के साथ-साथ उच्च प्रकार (टाइप कन्स्ट्रक्टर) के साथ पेश किया गया था। नोटेशन के साथ, जो मोनाड टाइप क्लास के लिए सिंटैक्टिक चीनी प्रदान करता है, इसने हास्केल को एक प्रभाव प्रणाली दी जो रेफरेंसियल पारदर्शिता बनाए रखती थी और सुविधाजनक थी। | |||
प्रारंभिक संस्करणों में अन्य उल्लेखनीय परिवर्तन 'सीक्वेंस (seq)' फ़ंक्शन के दृष्टिकोण थे, जो मूल्यों के बीच डेटा निर्भरता बनाता है, और अत्यधिक मेमोरी खपत से बचने के लिए इन भाषाओं में इसका उपयोग किया जाता है, रिफैक्टरिंग को और अधिक व्यावहारिक बनाने के लिए इसे सभी वर्गों से इसके मानक कार्यों में उपयोग किए जाने लगा था। | |||
हास्केल (हास्केल 1.0) का पहला संस्करण 1990 में परिभाषित किया गया था।{{sfn|Hudak|Hughes|Peyton Jones|Wadler|2007}} समिति के प्रयासों के परिणामस्वरूप भाषा परिभाषाओं की एक श्रृंखला (1.0, 1.1, 1.2, 1.3, 1.4) हुई। | हास्केल (हास्केल 1.0) का पहला संस्करण 1990 में परिभाषित किया गया था।{{sfn|Hudak|Hughes|Peyton Jones|Wadler|2007}} समिति के प्रयासों के परिणामस्वरूप भाषा परिभाषाओं की एक श्रृंखला (1.0, 1.1, 1.2, 1.3, 1.4) हुई। | ||
[[File:Base-classes.svg|thumb|right|जीएचसी 7.10 के अनुसार हास्केल प्रस्तावना में प्रकार वर्गों का पदानुक्रम। फोल्डेबल और ट्रैवर्सेबल (कुछ कार्यों के प्रकार के हस्ताक्षरों में संबंधित परिवर्तनों के साथ), और फंक्टर और मोनाड के बीच मध्यवर्ती के रूप में आवेदक को | [[File:Base-classes.svg|thumb|right|जीएचसी 7.10 के अनुसार हास्केल प्रस्तावना में प्रकार वर्गों का पदानुक्रम। फोल्डेबल और ट्रैवर्सेबल (कुछ कार्यों के प्रकार के हस्ताक्षरों में संबंधित परिवर्तनों के साथ), और फंक्टर और मोनाड के बीच मध्यवर्ती के रूप में आवेदक को सम्मलित करना, हास्केल 2010 मानक से विचलन हैं।]] | ||
=== हास्केल 98 === | === हास्केल 98 === | ||
1997 के अंत में, हास्केल 98 में श्रृंखला समाप्त हुई, जिसका उद्देश्य भाषा के | 1997 के अंत में, हास्केल 98 में श्रृंखला समाप्त हुई, जिसका उद्देश्य भाषा के स्थिर, न्यूनतम, पोर्टेबल संस्करण और शिक्षण के लिए एक मानक [[ पुस्तकालय (कंप्यूटर विज्ञान) |लाइब्रेरी (कंप्यूटर विज्ञान)]] और भविष्य के विस्तार के लिए आधार के रूप में निर्दिष्ट करना था। समिति ने प्रायोगिक सुविधाओं को जोड़कर और सम्मलित करके हास्केल 98 के एक्सटेंशन और वेरिएंट बनाने का स्पष्ट रूप से स्वागत किया।{{sfn|Peyton Jones|2003|loc=Preface}} | ||
फरवरी 1999 में, हास्केल 98 भाषा मानक को मूल रूप से द हास्केल 98 रिपोर्ट के रूप में प्रकाशित किया गया था।{{sfn|Peyton Jones|2003|loc=Preface}} जनवरी 2003 में, हास्केल 98 भाषा और लाइब्रेरी: संशोधित रिपोर्ट के रूप में एक संशोधित संस्करण प्रकाशित किया गया था।{{sfn|Peyton Jones|2003}} भाषा तेजी से विकसित हो रही है, ग्लासगो हास्केल कंपाइलर (जीएचसी) कार्यान्वयन वर्तमान वास्तविक मानक का प्रतिनिधित्व करता है।<ref name="HaskellWikiImpl">{{cite web|title=हास्केल विकी: कार्यान्वयन|url=http://www.haskell.org/haskellwiki/Implementations|access-date=18 December 2012}}</ref> | |||
=== हास्केल 2010 === | === हास्केल 2010 === | ||
2006 | 2006 के प्रारंभ में, हास्केल 98 मानक के उत्तराधिकारी को परिभाषित करने की प्रक्रिया शुरू हुई, जिसे अनौपचारिक रूप से हास्केल प्राइम नाम दिया गया।<ref>{{cite web|url=https://prime.haskell.org/|title=हास्केल में आपका स्वागत है'|work=The Haskell' Wiki|access-date=11 February 2016|archive-date=20 February 2016|archive-url=https://web.archive.org/web/20160220103915/https://prime.haskell.org/|url-status=dead}}</ref> यह भाषा की परिभाषा को संशोधित करने के लिए सतत वृद्धिशील प्रक्रिया थी, जो प्रति वर्ष नये संशोधन के लिए तैयार करती थी। हास्केल 2010 नाम का पहला संशोधन नवंबर 2009 में घोषित किया गया था<ref name="2010ann"/>और जुलाई 2010 में इसे प्रकाशित किया गया था। | ||
हास्केल 2010 भाषा के लिए | हास्केल 2010 भाषा के लिए वृद्धिशील अद्यतन है, जिसमें अधिकतम अच्छी तरह से उपयोग की जाने वाली और गैर-विवादास्पद विशेषताएं सम्मलित हैं जो पहले संकलक-विशिष्ट झंडे के माध्यम से सक्षम थीं। | ||
* पदानुक्रमित मॉड्यूल | * पदानुक्रमित मॉड्यूल के नामों को केवल ऐसे पहचानकर्ता के अतिरिक्त पूंजीकृत पहचानकर्ताओं के डॉट-पृथक अनुक्रमों को सम्मलित करने की अनुमति दी गई है। यह मॉड्यूल को पदानुक्रमित तरीके से नामित करने देता है (उदाहरण के लिए, <code>Data.List</code> के अतिरिक्त <code>List</code>), चूंकि तकनीकी रूप से मॉड्यूल अभी भी मोनोलिथिक नेमस्पेस में हैं। यह एक्सटेंशन हास्केल 98 के परिशिष्ट में निर्दिष्ट किया गया था और व्यवहार में सार्वभौमिक रूप से उपयोग किया गया था। | ||
* विदेशी फ़ंक्शन इंटरफ़ेस (FFI) अन्य प्रोग्रामिंग भाषाओं के लिए बाइंडिंग की अनुमति देता है। रिपोर्ट में केवल C (प्रोग्रामिंग भाषा) के लिए बाइंडिंग निर्दिष्ट हैं, लेकिन डिज़ाइन अन्य भाषा बाइंडिंग के लिए अनुमति देता है। इसका समर्थन करने के लिए, डेटा प्रकार की घोषणाओं में कोई कंस्ट्रक्टर नहीं होने की अनुमति दी गई थी, जो हास्केल में निर्मित नहीं किए जा सकने वाले विदेशी डेटा के लिए मजबूत गैर प्रकार को सक्षम करता है। यह एक्सटेंशन पहले हास्केल 98 रिपोर्ट के परिशिष्ट में निर्दिष्ट किया गया था और व्यापक रूप से उपयोग किया गया था। | * [[ विदेशी फ़ंक्शन इंटरफ़ेस | विदेशी फ़ंक्शन इंटरफ़ेस]] (FFI) अन्य प्रोग्रामिंग भाषाओं के लिए बाइंडिंग की अनुमति देता है। रिपोर्ट में केवल C (प्रोग्रामिंग भाषा) के लिए बाइंडिंग निर्दिष्ट हैं, लेकिन डिज़ाइन अन्य भाषा बाइंडिंग के लिए अनुमति देता है। इसका समर्थन करने के लिए, डेटा प्रकार की घोषणाओं में कोई कंस्ट्रक्टर नहीं होने की अनुमति दी गई थी, जो हास्केल में निर्मित नहीं किए जा सकने वाले विदेशी डेटा के लिए मजबूत गैर प्रकार को सक्षम करता है। यह एक्सटेंशन पहले हास्केल 98 रिपोर्ट के परिशिष्ट में निर्दिष्ट किया गया था और व्यापक रूप से उपयोग किया गया था। | ||
* तथाकथित एन + के पैटर्न (फॉर्म की परिभाषाएं <code>fact (n+1) = (n+1) * fact n</code>) की अनुमति नहीं थी। इस सिंटैक्टिक चीनी में भ्रामक शब्दार्थ था, जिसमें कोड ऐसा दिखता था जैसे इसका उपयोग किया गया हो <code>(+)</code> ऑपरेटर, लेकिन वास्तव में कोड का उपयोग करने के लिए desugared <code>(-)</code> | * तथाकथित एन + के पैटर्न (फॉर्म की परिभाषाएं <code>fact (n+1) = (n+1) * fact n</code>) की अनुमति नहीं थी। इस [[ सिंटैक्टिक चीनी |सिंटैक्टिक चीनी]] में भ्रामक शब्दार्थ था, जिसमें कोड ऐसा दिखता था जैसे इसका उपयोग किया गया हो <code>(+)</code> ऑपरेटर, लेकिन वास्तव में कोड का उपयोग करने के लिए desugared <code>(-)</code> और <code>(>=)</code>. | ||
* प्रकार के अनुमान के नियमों में ढील दी गई | * प्रकार के अनुमान के नियमों में ढील दी गई जिससे कि अधिक कार्यक्रमों को जाँचने की अनुमति मिल सके। | ||
* कुछ | * कुछ [[ सिंटेक्स (प्रोग्रामिंग भाषाएं) |सिंटेक्स (प्रोग्रामिंग भाषाएं)]] विवाद (औपचारिक व्याकरण में परिवर्तन) तय किए गए थे: [[ पैटर्न गार्ड |पैटर्न गार्ड]] जोड़े गए थे, जिससे गार्ड के भीतर पैटर्न का मेल हो सके, इसके संचालन के आदेश का संकल्प सरल विधियों से निर्दिष्ट किया गया था जो वास्तविकता में इसके अभ्यास को दर्शाता है, ऑपरेटरों और टिप्पणियों की भाषा के [[ शाब्दिक वाक्य रचना |शाब्दिक वाक्य की रचना]] के लिए की जाने वाली बातचीत में बढ़त बनाने की स्थिति को संबोधित किया गया था, और अनपेक्षित सिंटैक्स त्रुटियों को खत्म करने के लिए do-notation और if-then-else को ट्वीक किया गया था। | ||
* <code>LANGUAGE</code> | * <code>LANGUAGE</code> E> [[ निर्देश (प्रोग्रामिंग) |निर्देश (प्रोग्रामिंग)]] निर्दिष्ट किया गया था। 2010 तक, भाषा के विस्तार होने के व्यापक उपयोग किए जाने लगे थे, और जीएचसी (अन्य संकलकों के बीच) ने यह प्रदान किया कि <code>LANGUAGE</code> pragma पहचानकर्ताओं की सूची के साथ अलग-अलग एक्सटेंशन निर्दिष्ट करने में उत्कृष्ट हो सके। समर्थन करने के लिए हास्केल 2010 कंपाइलर्स की आवश्यकता होती है, <code>Haskell2010</code> एक्सटेंशन और कई अन्य लोगों का समर्थन करने के लिए इसे प्रोत्साहित किया जाता है, जो हास्केल 2010 में जोड़े गए एक्सटेंशन के अनुरूप हैं। | ||
=== भविष्य के मानक === | === भविष्य के मानक === | ||
2020 के लिए अगले औपचारिक विनिर्देश की योजना बनाई गई थी।<ref name="2020committee" />29 अक्टूबर 2021 को | 2020 के लिए अगले औपचारिक विनिर्देश की योजना बनाई गई थी।<ref name="2020committee" />29 अक्टूबर 2021 को जीएचसी संस्करण 9.2.1 के साथ, जीएचसी2021 एक्सटेंशन जारी किया गया था। चूंकि यह एक औपचारिक भाषा युक्ति नहीं है, यह हास्केल 2010 में कई स्थिर, व्यापक रूप से उपयोग किए जाने वाले जीएचसी एक्सटेंशन को जोड़ती है।<ref name= ghc9,2,1> GHC 2020 Team (29 October 2021) [https://downloads.haskell.org/~ghc/9.2.1/docs/html/users_guide/9.2.1-notes.html GHC 9.2.1] released</ref> | ||
== सुविधाएँ == | |||
{{Main|हास्केल के गुण}} | |||
{{See also|ग्लासगो हास्केल कंपाइलर हास्केल के लिए एक्सटेंशन}} | |||
हास्केल में मूल्यांकन, अन-नोन फ़ंक्शन, [[ पैटर्न मिलान |पैटर्न मिलान]], [[ सूची समझ |सूची समझ]] , प्रकार वर्ग और प्रकार बहुरूपता सम्मलित हैं। यह [[ विशुद्ध रूप से कार्यात्मक भाषा |विशुद्ध रूप से फंक्शनल भाषा]] है, जिसका अर्थ है कि कार्यों का सामान्यतः कोई [[ साइड इफेक्ट (कंप्यूटर विज्ञान) |साइड इफेक्ट (कंप्यूटर विज्ञान)]] नहीं होता है। साइड इफेक्ट्स का प्रतिनिधित्व करने के लिए ऑर्थोगोनल कंप्यूटर विज्ञान कार्यों के प्रकार के लिए एक अलग निर्माण सम्मलित है। शुद्ध कार्य एक दुष्प्रभाव वापस कर सकता है जिसे बाद में निष्पादित किया जाता है, शुद्ध कार्य अन्य भाषाओं के अशुद्ध कार्यों को मॉडलिंग करता है। | |||
हास्केल के पास [[ दृढ़ता से टाइप की गई प्रोग्रामिंग भाषा |दृढ़ता से टाइप की गई प्रोग्रामिंग भाषा]] है, स्टैटिक टाइप स्टेटिक टाइपिंग टाइप सिस्टम हिंडले-मिलनर प्रकार के अनुमान पर आधारित है। इस क्षेत्र में इसका प्रमुख नवाचार प्रकार वर्ग है, मूल रूप से भाषा में [[ बहुरूपता (कंप्यूटर विज्ञान) |बहुरूपता (कंप्यूटर विज्ञान)]] को जोड़ने के लिए एक सैद्धांतिक तरीके के रूप में माना जाता है,<ref name="wadler89">{{cite journal|last1=Wadler|first1=P.|first2=S. |last2=Blott|year=1989|title=तदर्थ बहुरूपता को कम तदर्थ कैसे बनाया जाए|journal=Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages|publisher=[[Association for Computing Machinery|ACM]]|pages=60–76|doi=10.1145/75277.75283|isbn=978-0-89791-294-5|s2cid=15327197}}</ref> लेकिन कई और उपयोग खोजने के बाद से।<ref name="hallgren01">{{cite journal|last=Hallgren|first=T.|date=January 2001|title=फंक्शनल डिपेंडेंसीज के साथ फन, या हास्केल में स्टेटिक संगणनाओं में वैल्यू के रूप में टाइप|journal=Proceedings of the Joint CS/CE Winter Meeting|location=Varberg, Sweden|url=http://www.cs.chalmers.se/~hallgren/Papers/wm01.html}}</ref> निर्माण जो साइड-इफेक्ट्स का प्रतिनिधित्व करता है, एक [[ मोनाड (कार्यात्मक प्रोग्रामिंग) |मोनाड (फंक्शनल प्रोग्रामिंग)]] का उदाहरण है: सामान्य ढांचा जो विभिन्न संगणनाओं को मॉडल कर सकता है जैसे कि त्रुटि से निपटने, गैर-नियतात्मक एल्गोरिथ्म, [[ पदच्छेद |पदच्छेद]] और [[ सॉफ्टवेयर लेनदेन स्मृति |सॉफ्टवेयर लेनदेन स्मृति]] उन्हें साधारण डेटाटाइप्स के रूप में परिभाषित किया गया है, लेकिन हास्केल उनके उपयोग के लिए कुछ सिंटैक्टिक सुगर प्रदान करता है। | |||
हास्केल का एक ओपन सोर्स प्रकाशित विनिर्देश और कार्यान्वयन भाषा हैं,{{sfn|Peyton Jones|2003}}। इसका मुख्य कार्यान्वयन, ग्लासगो हास्केल [[ संकलक |संकलक]] (जीएचसी), इंटरप्रेटर (कंप्यूटिंग) और [[ मशीन कोड |मशीन कोड]] या नेटिव-कोड कंपाइलर दोनों में किया जाता है जो अधिकांश प्लेटफॉर्म पर रन होती हैं। जीएचसी अपने समृद्ध प्रकार की प्रणाली के लिए विख्यात है, जिसमें [[ सामान्यीकृत बीजगणितीय डेटा प्रकार |सामान्यीकृत बीजगणितीय डेटा प्रकार]] और प्रकार परिवारों जैसे हाल के नवाचारों को सम्मलित किया गया, [[ कंप्यूटर भाषा बेंचमार्क गेम |कंप्यूटर भाषा बेंचमार्क गेम]] कॉन्करेंसी (कंप्यूटर साइंस) और [[ समानांतर कंप्यूटिंग |समानांतर कंप्यूटिंग]] के अपने उच्च-प्रदर्शन कार्यान्वयन पर भी प्रकाश डालता है।<ref name="shootout">[https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/haskell.html Computer Language Benchmarks Game]</ref> | |||
यह एक सक्रिय, बढ़ता हुआ समुदाय भाषा के आसपास सम्मलित है, और ऑनलाइन पैकेज रिपॉजिटरी हैकेज में 5,400 से अधिक तृतीय-पक्ष ओपन-सोर्स लाइब्रेरी और टूल उपलब्ध हैं।<ref name="hackage-stats">{{cite web|url=http://hackage.haskell.org/cgi-bin/hackage-scripts/stats|archive-url=https://web.archive.org/web/20130503114836/http://hackage.haskell.org/cgi-bin/hackage-scripts/stats|archive-date=3 May 2013 |title=HackageDB आँकड़े|publisher=Hackage.haskell.org |access-date=26 June 2013}}</ref> | |||
== कोड उदाहरण == | |||
{{See also|हास्केल की विशेषताएं # उदाहरण}} | |||
एक Hello, World! प्रोग्राम हास्केल में इस प्रकार लिखा जाएगा (केवल अंतिम पंक्ति सख्ती से जरूरी है):<blockquote>module Main (main) जहां द्विभाषिया स्थिति में इसकी आवश्यकता नहीं है, मॉड्यूल फ़ाइल में डिफ़ॉल्ट है | |||
main :: IO () -- संकलक इस प्रकार की परिभाषा का अनुमान लगा सकता है | |||
main = putStrLn "Hello, World!"</blockquote> | |||
हास्केल में [[ कारख़ाने का |फैक्टोरियल]] फ़ंक्शन, कुछ अलग तरीकों से परिभाषित किया गया है (पहली पंक्ति [[ हस्ताक्षर टाइप करें |हस्ताक्षर टाइप करें]] है, जो वैकल्पिक है और प्रत्येक कार्यान्वयन के लिए समान है):<blockquote>factorial :: (Integral a) => a -> a | |||
-- Using recursion (with the "ifthenelse" expression) | |||
factorial n = if n < 2 | |||
== | then 1 | ||
else n * factorial (n - 1) | |||
-- Using recursion (with pattern matching) | |||
factorial 0 = 1 | |||
factorial n = n * factorial (n - 1) | |||
-- Using recursion (with guards) | |||
factorial n | |||
| n < 2 = 1 | |||
| otherwise = n * factorial (n - 1) | |||
-- Using a list and the "product" function | |||
factorial n = product [1..n] | |||
-- Using fold (implements "product") | |||
= | factorial n = foldl (*) 1 [1..n] | ||