सामग्री पर जाएँ
cd /languages
  • विशुद्ध फ़ंक्शनल
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

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

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

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 में डेकोरेटर सिंटैक्स नहीं है, इसलिए डेकोरेटर संबंध लागू नहीं के रूप में चिह्नित हैं।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। दूसरे फ़ंक्शनल कोडबेस के लिए Elixir गाइड पढ़ें।

सबसे उपयुक्त

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

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

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

इंजन विवरण

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

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

  • find_symbol

    किसी फ़ंक्शन या टाइप के लिए इस्तेमाल करें जब आपको परिभाषा और रेफ़रेंस चाहिए; स्ट्रक्चरल प्रीसेट सिर्फ़ लैम्ब्डा लौटाते हैं।

  • dependency_search

    यह देखने के लिए किसी टाइप क्लास पर इनकमिंग ट्रैवर्सल इस्तेमाल करें कि किन टाइप के इंस्टेंस हैं।

  • get_task_context

    "ट्रेस करो कि कोई अनुरोध कैसे पार्स और वैलिडेट होता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।

संबंधित गाइड

रिपॉज़िटरी के संबंधित हिस्से

सभी गाइड ब्राउज़ करें