# Haskell dalam Maguyva: graf kod untuk kelas jenis dan modul

Canonical source: https://maguyva.ai/ms/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 menyokong Haskell dengan AST, simbol dan graf, supaya ejen AI boleh menjejak fungsi, instance kelas jenis dan pembina data merentas modul.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .hs, .lhs
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Perkhidmatan dan pustaka Haskell dengan banyak modul, kelas jenis dan instance.
- Pengkompil, penghurai dan pangkalan kod lain di mana perubahan pada satu jenis data memberi kesan yang jauh.
- Pasukan yang membaca kod Haskell yang belum dikenali bersama ejen AI sebelum pemfaktoran semula.

## Aliran kerja ejen

- Mencari semua pemanggil sesuatu fungsi sebelum mengubah tandatangan jenisnya.
- Menyenaraikan jenis yang mempunyai instance bagi sesuatu kelas jenis.
- Menjejak di mana pembina data dicipta dan fungsi mana yang menggunakannya.

## Di mana Haskell memerangkap alat AI yang cetek

Haskell memanggil fungsi tanpa kurungan, menggubahnya dengan operator dan melakukan dispatch melalui kelas jenis. `render user` ialah panggilan, `f . g <$> xs` mengandungi beberapa panggilan, dan `show` bermaksud apa sahaja yang dinyatakan oleh instance jenis itu. Carian teks menemui nama, bukan instance di sebaliknya.

Maguyva merekodkan instance dan pembina sebagai hubungan, supaya ejen dapat melihat jenis mana yang melaksanakan sesuatu kelas dan di mana sesuatu nilai dicipta.

## Apa yang diekstrak oleh Maguyva daripada Haskell

Maguyva memetakan fail `.hs` dan `.lhs` kepada Haskell. Fungsi dan ikatan diekstrak sebagai callable, manakala kelas jenis, jenis `data` dan jenis `newtype` diekstrak sebagai jenis. Panggilan dikenal pasti dalam aplikasi yang dipisahkan ruang dan melalui operator infiks, dan import menormalkan klausa `qualified`, `hiding` dan `as`.

Kelas jenis dan pembina menjadi hubungan graf:

- `instance Eq Point` merekodkan bahawa `Point` melaksanakan `Eq`.
- Jika kaedah kelas mempunyai badan lalai dalam fail yang sama, instance yang mentakrifkan kaedah itu merekodkan penggantian ke atas lalai tersebut.
- Mengaplikasikan pembina data seperti `Point 1 2` dikira sebagai instansiasi.
- `error`, `undefined` dan `throw` merekodkan lontaran, dan pengendali seperti `catch` merekodkan tangkapan.

Oleh sebab pengisytiharan instance boleh mentakrifkan nama seperti `show` atau `return`, takrifan dalam fail yang sama tidak diandaikan sebagai sasaran panggilan tanpa penerima dengan nama itu.

## Contoh gesaan ejen

- "Siapa yang memanggil `parseConfig`, dan daripada modul mana?" (`find_symbol`, kemudian `dependency_search` arah masuk)
- "Jenis mana yang mempunyai instance `ToJSON`?" (`dependency_search`)
- "Jejaki bagaimana permintaan dihuraikan dan disahkan." (`get_task_context`)

## Had yang diketahui

- Kira-kira 130 nama Prelude dan base seperti `map`, `foldr`, `fmap`, `pure` dan `>>=`, serta modul seperti `Data.List` dan `Control.Monad`, ditapis daripada hubungan. Gunakan `text_pattern_search` untuknya.
- Dalam tatabahasanya, nod fungsi mentah juga mewakili jenis fungsi, jadi pratetap `functions` dalam `structural_search` hanya memulangkan lambda, manakala pratetap `methods` dan `variables` tidak memilih apa-apa. Gunakan `find_symbol` untuk fungsi bernama.
- Fail literate `.lhs` dibaca sepenuhnya dengan tatabahasa Haskell; jangkakan keputusan separa bagi fail tersebut.
- Haskell tiada sintaks penghias, jadi hubungan penghias ditanda sebagai tidak berkenaan.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk pangkalan kod fungsian yang lain, baca [panduan Elixir](/ms/languages/elixir).

## Butiran enjin

- Sokongan Haskell memetakan fail `.hs` dan `.lhs` kepada Haskell. Kelas jenis, jenis `data` dan jenis `newtype` ialah jenis; panggilan dikenal pasti dalam aplikasi berjarak dan melalui operator infiks.
- `instance Eq Point` merekodkan bahawa `Point` melaksanakan `Eq`, dan kaedah instance yang menggantikan lalai kelas dalam fail yang sama merekodkan penggantian.
- Mengaplikasikan pembina data dikira sebagai instansiasi; kira-kira 130 nama Prelude dan base ditapis daripada hubungan.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk fungsi atau jenis apabila anda memerlukan takrifan dan rujukannya; pratetap struktur hanya memulangkan lambda.
- `dependency_search`: Gunakan penelusuran arah masuk pada kelas jenis untuk melihat jenis mana yang mempunyai instance.
- `get_task_context`: Gunakan untuk gesaan seperti "jejaki bagaimana permintaan dihuraikan dan disahkan".
