Lompat ke konten
cd /languages
  • Fungsional murni
  • Pemrograman
  • Dukungan AST dan simbol

Haskell di Maguyva: graf kode untuk kelas tipe dan modul

Maguyva mendukung Haskell dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri fungsi, instance kelas tipe, dan konstruktor data di seluruh modul.

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, lalu periksa matriks dukungan di halaman kompatibilitas. Untuk basis kode fungsional lainnya, baca panduan Elixir.

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.

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".