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

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الدوال ونُسخ فئات الأنواع ومُنشِئات البيانات عبر الوحدات.

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .hs, .lhs
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

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

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

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

## أين تُربك 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 صيغة للمزخرفات، لذا تُعلَّم علاقات المزخرفات بأنها غير قابلة للتطبيق.

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

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). ولقواعد الشيفرة الوظيفية الأخرى، اقرأ [دليل لغة Elixir](/ar/languages/elixir).

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

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

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

- `find_symbol`: استخدمه لدالة أو نوع عندما تحتاج إلى التعريف والمراجع؛ فالإعدادات البنيوية المسبقة لا تُرجع إلا تعابير lambda.
- `dependency_search`: استخدم الاجتياز الوارد على فئة أنواع لرؤية الأنواع التي لها نُسخ منها.
- `get_task_context`: استخدمه لمطالبات مثل "تتبّع كيف يُفكّ ترميز الطلب ويُتحقق منه".
