# Haskell i Maguyva: kodegrafer for typeklasser og moduler

Canonical source: https://maguyva.ai/nb/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øtter Haskell med AST, symboler og graf, slik at AI-agenter kan følge funksjoner, typeklasseinstanser og datakonstruktører på tvers av moduler.

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .hs, .lhs
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

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

## 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](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). For andre funksjonelle kodebaser bør du lese [veiledningen for Elixir](/nb/languages/elixir).

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