Spring til indhold
cd /languages
  • Rent funktionelt
  • Programmering
  • AST- og symbolunderstøttelse

Haskell i Maguyva: kodegrafer til typeklasser og moduler

Maguyva understøtter Haskell med AST, symboler og graf, så AI-agenter kan følge funktioner, typeklasseinstanser og datakonstruktører på tværs af moduler.

Hvor Haskell får overfladiske AI-værktøjer til at snuble

Haskell kalder funktioner uden parenteser, sætter dem sammen med operatorer og dispatcher via typeklasser. render user er ét kald, f . g <$> xs indeholder flere, og show betyder det, som instansen for den type siger. Tekstsøgning finder navnene, ikke instanserne bag dem.

Maguyva registrerer instanser og konstruktører som relationer, så en agent kan se, hvilke typer der implementerer en klasse, og hvor en værdi bygges.

Hvad Maguyva udtrækker i Haskell

Maguyva knytter .hs- og .lhs-filer til Haskell. Funktioner og bindinger udtrækkes som kaldbare enheder, og typeklasser, data-typer og newtype-typer som typer. Kald genkendes i applikation adskilt af mellemrum og via infiksoperatorer, og imports normaliserer qualified-, hiding- og as-led.

Typeklasser og konstruktører bliver relationer i grafen:

  • instance Eq Point registrerer, at Point implementerer Eq.
  • Når en klassemetode har en standardkrop i samme fil, registrerer en instans, der definerer metoden, en override af standarden.
  • At anvende en datakonstruktør, som Point 1 2, tæller som instansiering.
  • error, undefined og throw registrerer throws, og handlere som catch registrerer catches.

Fordi instansdeklarationer kan definere navne som show eller return, antages en definition i samme fil ikke at være målet for et kald uden modtager med det navn.

Eksempler på prompts til agenter

  • “Hvem kalder parseConfig, og fra hvilke moduler?” (find_symbol, derefter dependency_search incoming)
  • “Hvilke typer har en ToJSON-instans?” (dependency_search)
  • “Spor hvordan en forespørgsel afkodes og valideres.” (get_task_context)

Kendte begrænsninger

  • Omkring 130 navne fra Prelude og base, som map, foldr, fmap, pure og >>=, samt moduler som Data.List og Control.Monad, filtreres fra relationerne. Brug text_pattern_search til dem.
  • I grammatikken betegner en rå funktionsnode også funktionstyper, så presettet functions i structural_search returnerer kun lambdaer, og presettene methods og variables vælger intet. Brug find_symbol til navngivne funktioner.
  • Literate-filer (.lhs) læses i deres helhed med Haskell-grammatikken, så regn med ufuldstændige resultater for dem.
  • Haskell har ingen dekoratorsyntaks, så dekoratorrelationer er markeret som ikke relevante.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. For andre funktionelle kodebaser kan du læse guiden til Elixir.

Bedst egnet til

  • > Haskell-services og -biblioteker med mange moduler, typeklasser og instanser.
  • > Compilere, parsere og andre kodebaser, hvor en ændring af én datatype rækker langt.
  • > Teams, der bruger AI-agenter til at læse ukendt Haskell før en refaktorering.

Agent-arbejdsgange

  • > Finde alle kaldere af en funktion, før dens typesignatur ændres.
  • > Liste hvilke typer der har en instans af en typeklasse.
  • > Spore hvor en datakonstruktør bygges, og hvilke funktioner der bruger den.

Motordetaljer

  • > Haskell-understøttelsen knytter `.hs` og `.lhs` til Haskell. Typeklasser, `data`-typer og `newtype`-typer er typer, og kald genkendes i applikation med mellemrum og via infiksoperatorer.
  • > `instance Eq Point` registrerer, at `Point` implementerer `Eq`, og en instansmetode, der erstatter en klassestandard i samme fil, registrerer en override.
  • > At anvende en datakonstruktør tæller som instansiering, og omkring 130 navne fra Prelude og base filtreres fra relationerne.

Nyttige MCP-indgange

  • find_symbol

    Brug det til en funktion eller type, når du har brug for definitionen og referencerne; strukturelle presets returnerer kun lambdaer.

  • dependency_search

    Brug incoming-traversering på en typeklasse for at se, hvilke typer der har instanser.

  • get_task_context

    Brug det til prompts som "spor hvordan en forespørgsel afkodes og valideres".