Langkau ke kandungan
cd /languages
  • Fungsian tulen
  • Pengaturcaraan
  • Sokongan AST dan simbol

Haskell dalam Maguyva: graf kod untuk kelas jenis dan modul

Maguyva menyokong Haskell dengan AST, simbol dan graf, supaya ejen AI boleh menjejak fungsi, instance kelas jenis dan pembina data merentas modul.

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, kemudian semak matriks sokongan di halaman keserasian. Untuk pangkalan kod fungsian yang lain, baca panduan Elixir.

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.

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