# Maguyva में Haskell: टाइप क्लास और मॉड्यूल के लिए कोड ग्राफ़

Canonical source: https://maguyva.ai/hi/languages/haskell

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva, Haskell को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट मॉड्यूल के पार फ़ंक्शन, टाइप-क्लास इंस्टेंस और डेटा कंस्ट्रक्टर को ट्रेस कर सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .hs, .lhs
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- कई मॉड्यूल, टाइप क्लास और इंस्टेंस वाली Haskell सर्विस और लाइब्रेरी।
- कंपाइलर, पार्सर और ऐसे दूसरे कोडबेस जहाँ एक डेटा टाइप में बदलाव का असर दूर तक जाता है।
- ऐसी टीमें जो रीफ़ैक्टर से पहले AI एजेंट के साथ अपरिचित Haskell कोड पढ़ती हैं।

## एजेंट वर्कफ़्लो

- किसी फ़ंक्शन का टाइप सिग्नेचर बदलने से पहले उसके सभी कॉलर ढूँढना।
- किसी टाइप क्लास के इंस्टेंस वाले टाइप की सूची बनाना।
- ट्रेस करना कि कोई डेटा कंस्ट्रक्टर कहाँ बनाया जाता है और कौन-से फ़ंक्शन उसका इस्तेमाल करते हैं।

## Haskell सतही AI टूल को कहाँ उलझाती है

Haskell फ़ंक्शन को बिना कोष्ठक के कॉल करती है, उन्हें ऑपरेटर से जोड़ती है, और टाइप क्लास के ज़रिए डिस्पैच करती है। `render user` एक कॉल है, `f . g <$> xs` में कई कॉल हैं, और `show` का अर्थ वही है जो उस टाइप का इंस्टेंस तय करता है। टेक्स्ट सर्च नाम ढूँढ लेता है, पर उनके पीछे के इंस्टेंस नहीं।

Maguyva इंस्टेंस और कंस्ट्रक्टर को संबंधों के रूप में दर्ज करता है, ताकि एजेंट देख सके कि कौन-से टाइप किसी क्लास को लागू करते हैं और कोई मान कहाँ बनाया जाता है।

## Maguyva, Haskell से क्या निकालता है

Maguyva `.hs` और `.lhs` फ़ाइलों को Haskell से जोड़ता है। फ़ंक्शन और बाइंडिंग कॉलेबल के रूप में निकाले जाते हैं, और टाइप क्लास, `data` टाइप और `newtype` टाइप, टाइप के रूप में। कॉल को स्पेस से अलग किए गए एप्लिकेशन में और इनफ़िक्स ऑपरेटर के ज़रिए पहचाना जाता है, और इम्पोर्ट `qualified`, `hiding` तथा `as` क्लॉज़ को सामान्यीकृत करते हैं।

टाइप क्लास और कंस्ट्रक्टर ग्राफ़ संबंध बनते हैं:

- `instance Eq Point` दर्ज करता है कि `Point`, `Eq` को लागू करता है।
- अगर किसी क्लास मेथड की उसी फ़ाइल में डिफ़ॉल्ट बॉडी है, तो उस मेथड को परिभाषित करने वाला इंस्टेंस डिफ़ॉल्ट का ओवरराइड दर्ज करता है।
- `Point 1 2` जैसे डेटा कंस्ट्रक्टर को लागू करना इंस्टैंशिएशन गिना जाता है।
- `error`, `undefined` और `throw` थ्रो दर्ज करते हैं, और `catch` जैसे हैंडलर कैच दर्ज करते हैं।

क्योंकि इंस्टेंस डिक्लेरेशन `show` या `return` जैसे नाम परिभाषित कर सकते हैं, उसी फ़ाइल की परिभाषा को उस नाम वाले बिना रिसीवर के कॉल का लक्ष्य नहीं माना जाता।

## एजेंट प्रॉम्प्ट के उदाहरण

- "`parseConfig` को कौन कॉल करता है, और किन मॉड्यूल से?" (`find_symbol`, फिर `dependency_search` इनकमिंग)
- "किन टाइप का `ToJSON` इंस्टेंस है?" (`dependency_search`)
- "ट्रेस करो कि कोई अनुरोध कैसे पार्स और वैलिडेट होता है।" (`get_task_context`)

## ज्ञात सीमाएँ

- `map`, `foldr`, `fmap`, `pure` और `>>=` जैसे लगभग 130 Prelude और बेस लाइब्रेरी के नाम, और `Data.List` तथा `Control.Monad` जैसे मॉड्यूल, संबंधों से फ़िल्टर किए जाते हैं। इनके लिए `text_pattern_search` इस्तेमाल करें।
- ग्रामर में साधारण फ़ंक्शन नोड फ़ंक्शन टाइप को भी दर्शाता है, इसलिए `structural_search` में `functions` प्रीसेट सिर्फ़ लैम्ब्डा लौटाता है, और `methods` तथा `variables` प्रीसेट कुछ भी नहीं चुनते। नामित फ़ंक्शन के लिए `find_symbol` इस्तेमाल करें।
- लिटरेट `.lhs` फ़ाइलें पूरी तरह Haskell ग्रामर से पढ़ी जाती हैं; इन फ़ाइलों में अधूरे नतीजों की अपेक्षा करें।
- Haskell में डेकोरेटर सिंटैक्स नहीं है, इसलिए डेकोरेटर संबंध लागू नहीं के रूप में चिह्नित हैं।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। दूसरे फ़ंक्शनल कोडबेस के लिए [Elixir गाइड](/hi/languages/elixir) पढ़ें।

## इंजन विवरण

- Haskell सपोर्ट `.hs` और `.lhs` फ़ाइलों को Haskell से जोड़ता है। टाइप क्लास, `data` टाइप और `newtype` टाइप, टाइप हैं; कॉल स्पेस वाले एप्लिकेशन में और इनफ़िक्स ऑपरेटर के ज़रिए पहचाने जाते हैं।
- `instance Eq Point` दर्ज करता है कि `Point`, `Eq` को लागू करता है, और उसी फ़ाइल में क्लास डिफ़ॉल्ट की जगह लेने वाला इंस्टेंस मेथड ओवरराइड दर्ज करता है।
- डेटा कंस्ट्रक्टर लागू करना इंस्टैंशिएशन गिना जाता है; लगभग 130 Prelude और बेस लाइब्रेरी के नाम संबंधों से फ़िल्टर किए जाते हैं।

## उपयोगी MCP एंट्री पॉइंट

- `find_symbol`: किसी फ़ंक्शन या टाइप के लिए इस्तेमाल करें जब आपको परिभाषा और रेफ़रेंस चाहिए; स्ट्रक्चरल प्रीसेट सिर्फ़ लैम्ब्डा लौटाते हैं।
- `dependency_search`: यह देखने के लिए किसी टाइप क्लास पर इनकमिंग ट्रैवर्सल इस्तेमाल करें कि किन टाइप के इंस्टेंस हैं।
- `get_task_context`: "ट्रेस करो कि कोई अनुरोध कैसे पार्स और वैलिडेट होता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।
