Hoppa till innehåll
cd /languages
  • Rent funktionellt
  • Programmering
  • Stöd för AST och symboler

Haskell i Maguyva: kodgrafer för typklasser och moduler

Maguyva stöder Haskell med AST, symboler och graf, så att AI-agenter kan följa funktioner, typklassinstanser och datakonstruktorer mellan moduler.

Där Haskell får ytliga AI-verktyg att snubbla

Haskell anropar funktioner utan parenteser, kombinerar dem med operatorer och dispatchar via typklasser. render user är ett anrop, f . g <$> xs innehåller flera, och show betyder det som instansen för den typen säger. Textsökning hittar namnen, inte instanserna bakom dem.

Maguyva registrerar instanser och konstruktorer som relationer, så att en agent ser vilka typer som implementerar en klass och var ett värde byggs.

Vad Maguyva extraherar i Haskell

Maguyva kopplar .hs- och .lhs-filer till Haskell. Funktioner och bindningar extraheras som anropbara enheter, och typklasser, data-typer och newtype-typer som typer. Anrop känns igen i mellanslagsseparerad applikation och via infixoperatorer, och importer normaliserar qualified-, hiding- och as-satser.

Typklasser och konstruktorer blir grafrelationer:

  • instance Eq Point registrerar att Point implementerar Eq.
  • När en klassmetod har en standardkropp i samma fil registrerar en instans som definierar metoden en override av standarden.
  • Att applicera en datakonstruktor, som Point 1 2, räknas som instansiering.
  • error, undefined och throw registrerar throws, och hanterare som catch registrerar catches.

Eftersom instansdeklarationer kan definiera namn som show eller return antas en definition i samma fil inte vara målet för ett anrop utan mottagare med det namnet.

Exempel på prompter för agenter

  • “Vem anropar parseConfig, och från vilka moduler?” (find_symbol, sedan dependency_search incoming)
  • “Vilka typer har en ToJSON-instans?” (dependency_search)
  • “Spåra hur en förfrågan avkodas och valideras.” (get_task_context)

Kända begränsningar

  • Omkring 130 namn från Prelude och base, som map, foldr, fmap, pure och >>=, samt moduler som Data.List och Control.Monad, filtreras bort från relationerna. Använd text_pattern_search för dem.
  • I grammatiken betecknar en rå funktionsnod också funktionstyper, så presetet functions i structural_search returnerar bara lambdor, och presetet methods och variables väljer ingenting. Använd find_symbol för namngivna funktioner.
  • Literate-filer (.lhs) läses i sin helhet med Haskells grammatik, så räkna med ofullständiga resultat för dem.
  • Haskell har ingen dekoratorsyntax, så dekoratorrelationer är markerade som ej tillämpliga.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För andra funktionella kodbaser, läs guiden för Elixir.

Bäst lämpad för

  • > Haskell-tjänster och -bibliotek med många moduler, typklasser och instanser.
  • > Kompilatorer, parsers och andra kodbaser där en ändring av en datatyp når långt.
  • > Team som låter AI-agenter läsa obekant Haskell inför en refaktorering.

Agentarbetsflöden

  • > Hitta alla anropare av en funktion innan dess typsignatur ändras.
  • > Lista vilka typer som har en instans av en typklass.
  • > Spåra var en datakonstruktor byggs och vilka funktioner som använder den.

Motordetaljer

  • > Haskell-stödet kopplar `.hs` och `.lhs` till Haskell. Typklasser, `data`-typer och `newtype`-typer är typer, och anrop känns igen i mellanslagsapplikation och via infixoperatorer.
  • > `instance Eq Point` registrerar att `Point` implementerar `Eq`, och en instansmetod som ersätter en klasstandard i samma fil registrerar en override.
  • > Att applicera en datakonstruktor räknas som instansiering, och omkring 130 namn från Prelude och base filtreras bort från relationerna.

Användbara MCP-ingångar

  • find_symbol

    Använd det för en funktion eller typ när du behöver definitionen och referenserna; strukturella preset returnerar bara lambdor.

  • dependency_search

    Använd incoming-traversering på en typklass för att se vilka typer som har instanser.

  • get_task_context

    Använd det för prompter som "spåra hur en förfrågan avkodas och valideras".