تخطَّ إلى المحتوى
cd /languages
  • وظيفية خالصة
  • البرمجة
  • دعم AST والرموز

لغة Haskell في Maguyva: رسوم بيانية للشيفرة لفئات الأنواع والوحدات

يدعم Maguyva لغة Haskell بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الدوال ونُسخ فئات الأنواع ومُنشِئات البيانات عبر الوحدات.

أين تُربك Haskell أدوات الذكاء الاصطناعي السطحية

تستدعي 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)

القيود المعروفة

  • يُستبعد من العلاقات نحو 130 اسمًا من Prelude والمكتبة الأساسية، مثل map وfoldr وfmap وpure و>>=، ووحدات مثل Data.List وControl.Monad. استخدم text_pattern_search لها.
  • في القواعد النحوية، تدل عقدة الدالة الخام أيضًا على أنواع الدوال، لذا لا يُرجع الإعداد المسبق functions في structural_search إلا تعابير lambda، ولا يختار الإعدادان methods وvariables شيئًا. استخدم find_symbol للدوال المسمّاة.
  • تُقرأ ملفات .lhs الأدبية كاملة بقواعد Haskell النحوية، فتوقّع نتائج جزئية لها.
  • لا تملك Haskell صيغة للمزخرفات، لذا تُعلَّم علاقات المزخرفات بأنها غير قابلة للتطبيق.

الخطوات التالية

اربط مستودعًا عبر دليل البدء السريع، ثم راجع مصفوفة الدعم في صفحة التوافق. ولقواعد الشيفرة الوظيفية الأخرى، اقرأ دليل لغة Elixir.

الأنسب لـ

  • > خدمات Haskell ومكتباتها التي تضم وحدات وفئات أنواع ونُسخًا كثيرة.
  • > المترجمات والمحلّلات وقواعد الشيفرة الأخرى التي يمتد فيها أثر تغيير نوع بيانات واحد بعيدًا.
  • > الفرق التي تستخدم وكلاء الذكاء الاصطناعي لقراءة شيفرة Haskell غير مألوفة قبل إعادة الهيكلة.

سير عمل الوكلاء

  • > العثور على كل مستدعٍ لدالة قبل تغيير توقيع نوعها.
  • > سرد الأنواع التي لها نسخة من فئة أنواع.
  • > تتبّع أين يُبنى مُنشِئ بيانات وأي الدوال تستهلكه.

تفاصيل المحرك

  • > يربط دعم Haskell الملفات `.hs` و`.lhs` بلغة Haskell. فئات الأنواع وأنواع `data` و`newtype` أنواع، وتُتعرَّف الاستدعاءات في التطبيق بالمسافات وعبر العوامل الوسيطة.
  • > يسجّل `instance Eq Point` أن `Point` ينفّذ `Eq`، ويسجّل تابع النسخة الذي يستبدل التنفيذ الافتراضي للفئة في الملف نفسه تجاوزًا.
  • > يُحتسب تطبيق مُنشِئ البيانات إنشاءً لنسخة، ويُستبعد من العلاقات نحو 130 اسمًا من Prelude والمكتبة الأساسية.

نقاط دخول مفيدة عبر MCP

  • find_symbol

    استخدمه لدالة أو نوع عندما تحتاج إلى التعريف والمراجع؛ فالإعدادات البنيوية المسبقة لا تُرجع إلا تعابير lambda.

  • dependency_search

    استخدم الاجتياز الوارد على فئة أنواع لرؤية الأنواع التي لها نُسخ منها.

  • get_task_context

    استخدمه لمطالبات مثل "تتبّع كيف يُفكّ ترميز الطلب ويُتحقق منه".