Lumaktaw papunta sa content
cd /languages
  • Puro functional
  • Programming
  • Support para sa AST at mga simbolo

Haskell sa Maguyva: mga code graph para sa type class at module

Sinusuportahan ng Maguyva ang Haskell gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga function, type-class instance at data constructor sa iba't ibang module.

Saan nalilito ang mababaw na AI tool sa Haskell

Tumatawag ang Haskell ng mga function nang walang panaklong, pinagsasama ang mga ito gamit ang mga operator, at nagdi-dispatch sa pamamagitan ng type class. Isang call ang render user, may ilang call ang f . g <$> xs, at ang ibig sabihin ng show ay kung ano ang sabi ng instance ng type na iyon. Nahahanap ng text search ang mga pangalan, hindi ang mga instance sa likod nila.

Itinatala ng Maguyva ang mga instance at constructor bilang relationship, para makita ng agent kung aling mga type ang nag-i-implement ng isang class at kung saan nalilikha ang isang value.

Ano ang kinukuha ng Maguyva mula sa Haskell

Iminamapa ng Maguyva sa Haskell ang mga .hs at .lhs file. Kinukuha bilang callable ang mga function at binding, at bilang type ang mga type class, data type at newtype type. Nakikilala ang mga call sa application na hinihiwalay ng espasyo at sa mga infix operator, at nino-normalize ng mga import ang mga clause na qualified, hiding at as.

Nagiging graph relationship ang mga type class at constructor:

  • Itinatala ng instance Eq Point na ini-implement ng Point ang Eq.
  • Kapag may default body ang isang class method sa parehong file, itinatala ng instance na nagdedeklara ng method na iyon na ino-override nito ang default.
  • Bilang instantiation ang pag-apply ng data constructor tulad ng Point 1 2.
  • Nagtatala ng throw ang error, undefined at throw, at nagtatala ng catch ang mga handler tulad ng catch.

Dahil puwedeng magdeklara ang mga instance declaration ng mga pangalan tulad ng show o return, hindi ipinagpapalagay na ang definition sa parehong file ang target ng call na walang receiver at may ganoong pangalan.

Mga halimbawang agent prompt

  • “Sino ang tumatawag sa parseConfig, at mula sa aling mga module?” (find_symbol, tapos dependency_search na incoming)
  • “Aling mga type ang may ToJSON instance?” (dependency_search)
  • “I-trace kung paano pina-parse at vina-validate ang isang request.” (get_task_context)

Mga kilalang limitasyon

  • Mga 130 pangalan mula sa Prelude at base tulad ng map, foldr, fmap, pure at >>=, at mga module tulad ng Data.List at Control.Monad, ang nifi-filter mula sa mga relationship. Gamitin ang text_pattern_search para sa mga iyon.
  • Sa grammar, kumakatawan din sa mga function type ang raw function node, kaya mga lambda lang ang ibinabalik ng functions preset sa structural_search, at walang napipili ang mga methods at variables preset. Gamitin ang find_symbol para sa mga named function.
  • Binabasa nang buo gamit ang Haskell grammar ang mga literate .lhs file; asahan ang hindi kumpletong resulta sa mga file na iyon.
  • Walang decorator syntax ang Haskell, kaya minarkahang hindi naaangkop ang mga decorator relationship.

Mga susunod na hakbang

Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Para sa iba pang functional codebase, basahin ang gabay sa Elixir.

Pinakabagay

  • > Mga Haskell service at library na may maraming module, type class at instance.
  • > Mga compiler, parser at iba pang codebase kung saan malayo ang abot ng pagbabago sa isang data type.
  • > Mga team na nagbabasa ng hindi pamilyar na Haskell code kasama ang mga AI agent bago mag-refactor.

Mga workflow ng agent

  • > Hanapin ang lahat ng tumatawag sa isang function bago baguhin ang type signature nito.
  • > Ilista ang mga type na may instance para sa isang type class.
  • > I-trace kung saan nalilikha ang isang data constructor at aling mga function ang gumagamit nito.

Mga detalye ng engine

  • > Iminamapa ng suporta sa Haskell ang mga `.hs` at `.lhs` file sa Haskell. Mga type ang type class, `data` type at `newtype` type; nakikilala ang mga call sa application na may espasyo at sa mga infix operator.
  • > Itinatala ng `instance Eq Point` na ini-implement ng `Point` ang `Eq`, at nagtatala ng override ang instance method na pumapalit sa default ng class sa parehong file.
  • > Bilang instantiation ang pag-apply ng data constructor; mga 130 pangalan mula sa Prelude at base ang nifi-filter mula sa mga relationship.

Mga kapaki-pakinabang na MCP entry point

  • find_symbol

    Gamitin para sa isang function o type kapag kailangan mo ang definition at mga reference; mga lambda lang ang ibinabalik ng mga structural preset.

  • dependency_search

    Gumamit ng incoming traversal sa isang type class para makita kung aling mga type ang may instance.

  • get_task_context

    Gamitin para sa mga prompt tulad ng "i-trace kung paano pina-parse at vina-validate ang isang request".