# Haskell di Maguyva: graf kode untuk kelas tipe dan modul

Canonical source: https://maguyva.ai/id/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 mendukung Haskell dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri fungsi, instance kelas tipe, dan konstruktor data di seluruh modul.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .hs, .lhs
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Layanan dan pustaka Haskell dengan banyak modul, kelas tipe, dan instance.
- Kompiler, parser, dan basis kode lain tempat perubahan pada satu tipe data berdampak jauh.
- Tim yang membaca kode Haskell yang belum dikenal bersama agen AI sebelum refaktor.

## Workflow agent

- Menemukan semua pemanggil sebuah fungsi sebelum mengubah tanda tangan tipenya.
- Mendaftar tipe yang memiliki instance untuk sebuah kelas tipe.
- Menelusuri di mana sebuah konstruktor data dibuat dan fungsi mana yang menggunakannya.

## Di mana Haskell menjebak alat AI yang dangkal

Haskell memanggil fungsi tanpa tanda kurung, menyusunnya dengan operator, dan melakukan dispatch melalui kelas tipe. `render user` adalah sebuah panggilan, `f . g <$> xs` berisi beberapa panggilan, dan `show` berarti apa pun yang dikatakan instance tipe tersebut. Pencarian teks menemukan nama, bukan instance di baliknya.

Maguyva mencatat instance dan konstruktor sebagai relasi, sehingga agen dapat melihat tipe mana yang mengimplementasikan sebuah kelas dan di mana sebuah nilai dibuat.

## Apa yang diekstrak Maguyva dari Haskell

Maguyva memetakan berkas `.hs` dan `.lhs` ke Haskell. Fungsi dan binding diekstrak sebagai callable, sedangkan kelas tipe, tipe `data`, dan tipe `newtype` diekstrak sebagai tipe. Panggilan dikenali dalam aplikasi yang dipisahkan spasi dan melalui operator infiks, dan impor menormalkan klausa `qualified`, `hiding`, dan `as`.

Kelas tipe dan konstruktor menjadi relasi graf:

- `instance Eq Point` mencatat bahwa `Point` mengimplementasikan `Eq`.
- Jika sebuah metode kelas memiliki badan bawaan di berkas yang sama, instance yang mendefinisikan metode itu mencatat penimpaan atas bawaan tersebut.
- Menerapkan konstruktor data seperti `Point 1 2` dihitung sebagai instansiasi.
- `error`, `undefined`, dan `throw` mencatat lemparan, dan penangan seperti `catch` mencatat tangkapan.

Karena deklarasi instance dapat mendefinisikan nama seperti `show` atau `return`, definisi di berkas yang sama tidak dianggap sebagai target panggilan tanpa penerima dengan nama itu.

## Contoh prompt agen

- "Siapa yang memanggil `parseConfig`, dan dari modul mana saja?" (`find_symbol`, lalu `dependency_search` incoming)
- "Tipe mana saja yang memiliki instance `ToJSON`?" (`dependency_search`)
- "Telusuri bagaimana sebuah permintaan diurai dan divalidasi." (`get_task_context`)

## Batasan yang diketahui

- Sekitar 130 nama Prelude dan base seperti `map`, `foldr`, `fmap`, `pure`, dan `>>=`, serta modul seperti `Data.List` dan `Control.Monad`, difilter dari relasi. Gunakan `text_pattern_search` untuk itu.
- Dalam tata bahasanya, node fungsi mentah juga menyatakan tipe fungsi, sehingga preset `functions` di `structural_search` hanya mengembalikan lambda, sedangkan preset `methods` dan `variables` tidak memilih apa pun. Gunakan `find_symbol` untuk fungsi bernama.
- Berkas literate `.lhs` dibaca utuh dengan tata bahasa Haskell; harapkan hasil parsial pada berkas tersebut.
- Haskell tidak memiliki sintaksis dekorator, sehingga relasi dekorator ditandai tidak berlaku.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk basis kode fungsional lainnya, baca [panduan Elixir](/id/languages/elixir).

## Detail engine

- Dukungan Haskell memetakan berkas `.hs` dan `.lhs` ke Haskell. Kelas tipe, tipe `data`, dan tipe `newtype` adalah tipe; panggilan dikenali dalam aplikasi berspasi dan melalui operator infiks.
- `instance Eq Point` mencatat bahwa `Point` mengimplementasikan `Eq`, dan metode instance yang menggantikan bawaan kelas di berkas yang sama mencatat penimpaan.
- Menerapkan konstruktor data dihitung sebagai instansiasi; sekitar 130 nama Prelude dan base difilter dari relasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk fungsi atau tipe saat Anda membutuhkan definisi dan referensinya; preset struktural hanya mengembalikan lambda.
- `dependency_search`: Gunakan penelusuran incoming pada kelas tipe untuk melihat tipe mana yang memiliki instance.
- `get_task_context`: Gunakan untuk prompt seperti "telusuri bagaimana sebuah permintaan diurai dan divalidasi".
