# Haskell in Maguyva: codegrafen voor typeklassen en modules

Canonical source: https://maguyva.ai/nl/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 ondersteunt Haskell met AST, symbolen en graaf, zodat AI-agents functies, typeklasse-instances en dataconstructors over modules heen volgen.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .hs, .lhs
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Haskell-services en -bibliotheken met veel modules, typeklassen en instances.
- Compilers, parsers en andere codebases waarin een wijziging aan één datatype ver doorwerkt.
- Teams die AI-agents gebruiken om onbekende Haskell te lezen voor een refactor.

## Agentworkflows

- Alle aanroepers van een functie vinden voordat de typesignatuur verandert.
- Opsommen welke types een instance van een typeklasse hebben.
- Volgen waar een dataconstructor wordt opgebouwd en welke functies hem gebruiken.

## Waar Haskell oppervlakkige AI-tools laat struikelen

Haskell roept functies aan zonder haakjes, combineert ze met operatoren en dispatcht via typeklassen. `render user` is één aanroep, `f . g <$> xs` bevat er meerdere, en `show` betekent wat de instance voor dat type zegt. Tekstzoeken vindt de namen, niet de instances erachter.

Maguyva legt instances en constructors vast als relaties, zodat een agent ziet welke types een klasse implementeren en waar een waarde wordt opgebouwd.

## Wat Maguyva in Haskell extraheert

Maguyva koppelt `.hs`- en `.lhs`-bestanden aan Haskell. Functies en bindings worden als callables geëxtraheerd, en typeklassen, `data`-types en `newtype`s als types. Aanroepen worden herkend in applicatie met spaties en via infix-operatoren, en imports normaliseren `qualified`-, `hiding`- en `as`-clausules.

Typeklassen en constructors worden graafrelaties:

- `instance Eq Point` legt vast dat `Point` `Eq` implementeert.
- Als een klassemethode in hetzelfde bestand een standaardbody heeft, legt een instance die deze methode definieert een override van die standaard vast.
- Het toepassen van een dataconstructor, zoals `Point 1 2`, telt als instantiatie.
- `error`, `undefined` en `throw` leggen throws vast, en handlers zoals `catch` leggen catches vast.

Omdat instance-declaraties namen als `show` of `return` kunnen definiëren, wordt een definitie in hetzelfde bestand niet automatisch als doel van een aanroep zonder receiver met die naam beschouwd.

## Voorbeeldprompts voor agents

- "Wie roept `parseConfig` aan, en vanuit welke modules?" (`find_symbol`, daarna `dependency_search` incoming)
- "Welke types hebben een `ToJSON`-instance?" (`dependency_search`)
- "Volg hoe een request wordt gedecodeerd en gevalideerd." (`get_task_context`)

## Bekende beperkingen

- Ongeveer 130 namen uit Prelude en base, zoals `map`, `foldr`, `fmap`, `pure` en `>>=`, en modules zoals `Data.List` en `Control.Monad`, worden uit de relaties gefilterd. Gebruik daarvoor `text_pattern_search`.
- In de grammatica staat een ruwe functieknoop ook voor functietypes, dus de preset `functions` in `structural_search` geeft alleen lambda's terug, en de presets `methods` en `variables` selecteren niets. Gebruik `find_symbol` voor benoemde functies.
- Literate `.lhs`-bestanden worden in hun geheel met de Haskell-grammatica gelezen, dus reken daar op onvolledige resultaten.
- Haskell heeft geen decoratorsyntaxis, dus decoratorrelaties zijn als niet van toepassing gemarkeerd.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Lees voor andere functionele codebases de [Elixir-gids](/nl/languages/elixir).

## Enginedetails

- Haskell-ondersteuning koppelt `.hs` en `.lhs` aan Haskell. Typeklassen, `data`-types en `newtype`s zijn types, en aanroepen worden herkend in applicatie met spaties en via infix-operatoren.
- `instance Eq Point` legt vast dat `Point` `Eq` implementeert, en een instancemethode die een klassestandaard uit hetzelfde bestand vervangt, legt een override vast.
- Het toepassen van een dataconstructor telt als instantiatie, en ongeveer 130 namen uit Prelude en base worden uit de relaties gefilterd.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een functie of type wanneer je de definitie en referenties nodig hebt; structurele presets geven alleen lambda's terug.
- `dependency_search`: Gebruik incoming-traversal op een typeklasse om te zien welke types instances hebben.
- `get_task_context`: Gebruik het voor prompts als "volg hoe een request wordt gedecodeerd en gevalideerd."
