# Haskell i Maguyva: kodegrafer til typeklasser og moduler

Canonical source: https://maguyva.ai/da/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 understøtter Haskell med AST, symboler og graf, så AI-agenter kan følge funktioner, typeklasseinstanser og datakonstruktører på tværs af moduler.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .hs, .lhs
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

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

## 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](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). For andre funktionelle kodebaser kan du læse [guiden til Elixir](/da/languages/elixir).

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