# Haskell i Maguyva: kodgrafer för typklasser och moduler

Canonical source: https://maguyva.ai/sv/languages/haskell

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .hs, .lhs
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

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

## 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](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För andra funktionella kodbaser, läs [guiden för Elixir](/sv/languages/elixir).

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