Hopp til innhold
cd /languages
  • Rent funksjonelt
  • Programmering
  • AST- og symbolstøtte

Haskell i Maguyva: kodegrafer for typeklasser og moduler

Maguyva støtter Haskell med AST, symboler og graf, slik at AI-agenter kan følge funksjoner, typeklasseinstanser og datakonstruktører på tvers av moduler.

Der Haskell får overfladiske AI-verktøy til å snuble

Haskell kaller funksjoner uten parenteser, setter dem sammen med operatorer og dispatcher via typeklasser. render user er ett kall, f . g <$> xs inneholder flere, og show betyr det instansen for den typen sier. Tekstsøk finner navnene, ikke instansene bak dem.

Maguyva registrerer instanser og konstruktører som relasjoner, slik at en agent ser hvilke typer som implementerer en klasse og hvor en verdi bygges.

Hva Maguyva henter ut i Haskell

Maguyva knytter .hs- og .lhs-filer til Haskell. Funksjoner og bindinger hentes ut som kallbare enheter, og typeklasser, data-typer og newtype-typer som typer. Kall gjenkjennes i applikasjon med mellomrom og via infiksoperatorer, og importer normaliserer qualified-, hiding- og as-ledd.

Typeklasser og konstruktører blir relasjoner i grafen:

  • instance Eq Point registrerer at Point implementerer Eq.
  • Når en klassemetode har en standardkropp i samme fil, registrerer en instans som definerer metoden en override av standarden.
  • Å anvende en datakonstruktør, som Point 1 2, teller som instansiering.
  • error, undefined og throw registrerer throws, og håndterere som catch registrerer catches.

Fordi instansdeklarasjoner kan definere navn som show eller return, antas ikke en definisjon i samme fil å være målet for et kall uten mottaker med det navnet.

Eksempler på prompter for agenter

  • «Hvem kaller parseConfig, og fra hvilke moduler?» (find_symbol, deretter dependency_search incoming)
  • «Hvilke typer har en ToJSON-instans?» (dependency_search)
  • «Spor hvordan en forespørsel dekodes og valideres.» (get_task_context)

Kjente begrensninger

  • Rundt 130 navn fra Prelude og base, som map, foldr, fmap, pure og >>=, og moduler som Data.List og Control.Monad, filtreres bort fra relasjonene. Bruk text_pattern_search for dem.
  • I grammatikken betegner en rå funksjonsnode også funksjonstyper, så presetet functions i structural_search returnerer bare lambdaer, og presetene methods og variables velger ingenting. Bruk find_symbol for navngitte funksjoner.
  • Literate-filer (.lhs) leses i sin helhet med Haskell-grammatikken, så regn med ufullstendige resultater for dem.
  • Haskell har ikke dekoratorsyntaks, så dekoratorrelasjoner er merket som ikke relevante.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter støttematrisen på kompatibilitetssiden. For andre funksjonelle kodebaser bør du lese veiledningen for Elixir.

Best egnet

  • > Haskell-tjenester og -biblioteker med mange moduler, typeklasser og instanser.
  • > Kompilatorer, parsere og andre kodebaser der en endring i én datatype når langt.
  • > Team som bruker AI-agenter til å lese ukjent Haskell før en refaktorering.

Agent-arbeidsflyter

  • > Finne alle kallere av en funksjon før typesignaturen endres.
  • > Liste hvilke typer som har en instans av en typeklasse.
  • > Spore hvor en datakonstruktør bygges og hvilke funksjoner som bruker den.

Motordetaljer

  • > Haskell-støtten knytter `.hs` og `.lhs` til Haskell. Typeklasser, `data`-typer og `newtype`-typer er typer, og kall gjenkjennes i applikasjon med mellomrom og via infiksoperatorer.
  • > `instance Eq Point` registrerer at `Point` implementerer `Eq`, og en instansmetode som erstatter en klassestandard i samme fil, registrerer en override.
  • > Å anvende en datakonstruktør teller som instansiering, og rundt 130 navn fra Prelude og base filtreres bort fra relasjonene.

Nyttige MCP-inngangspunkter

  • find_symbol

    Bruk det for en funksjon eller type når du trenger definisjonen og referansene; strukturelle presets returnerer bare lambdaer.

  • dependency_search

    Bruk incoming-traversering på en typeklasse for å se hvilke typer som har instanser.

  • get_task_context

    Bruk det for prompter som «spor hvordan en forespørsel dekodes og valideres».