# Haskell in Maguyva: Code-Graphen für Typklassen und Module

Canonical source: https://maguyva.ai/de/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 unterstützt Haskell mit AST, Symbolen und Graph, damit KI-Agenten Funktionen, Typklasseninstanzen und Datenkonstruktoren über Module hinweg verfolgen.

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .hs, .lhs
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## Am besten geeignet

- Haskell-Services und -Bibliotheken mit vielen Modulen, Typklassen und Instanzen.
- Compiler, Parser und andere Codebasen, in denen die Änderung eines Datentyps weit reicht.
- Teams, die mit KI-Agenten unbekannten Haskell-Code vor einem Refactoring lesen.

## Agentenabläufe

- Alle Aufrufer einer Funktion finden, bevor sich ihre Typsignatur ändert.
- Auflisten, welche Typen eine Instanz einer Typklasse haben.
- Verfolgen, wo ein Datenkonstruktor erzeugt wird und welche Funktionen ihn verarbeiten.

## Wo Haskell oberflächliche KI-Tools ins Stolpern bringt

Haskell ruft Funktionen ohne Klammern auf, komponiert sie mit Operatoren und dispatcht über Typklassen. `render user` ist ein Aufruf, `f . g <$> xs` enthält mehrere, und `show` bedeutet, was die Instanz für diesen Typ festlegt. Eine Textsuche findet die Namen, nicht die Instanzen dahinter.

Maguyva erfasst Instanzen und Konstruktoren als Beziehungen, damit ein Agent sieht, welche Typen eine Klasse implementieren und wo ein Wert erzeugt wird.

## Was Maguyva in Haskell extrahiert

Maguyva ordnet `.hs`- und `.lhs`-Dateien Haskell zu. Funktionen und Bindungen werden als Callables extrahiert, Typklassen, `data`-Typen und `newtype`s als Typen. Aufrufe werden in leerzeichengetrennter Applikation und über Infix-Operatoren erkannt, und Importe normalisieren `qualified`-, `hiding`- und `as`-Klauseln.

Typklassen und Konstruktoren werden zu Graphbeziehungen:

- `instance Eq Point` erfasst, dass `Point` `Eq` implementiert.
- Hat eine Klassenmethode in derselben Datei einen Default-Rumpf, erfasst eine Instanz, die diese Methode definiert, ein Override des Defaults.
- Die Anwendung eines Datenkonstruktors wie `Point 1 2` zählt als Instanziierung.
- `error`, `undefined` und `throw` erfassen Throws, Handler wie `catch` erfassen Catches.

Weil Instanzdeklarationen Namen wie `show` oder `return` definieren können, wird eine Definition in derselben Datei nicht automatisch als Ziel eines gleichnamigen Aufrufs ohne Receiver angenommen.

## Beispiel-Prompts für Agenten

- „Wer ruft `parseConfig` auf, und aus welchen Modulen?“ (`find_symbol`, dann `dependency_search` incoming)
- „Welche Typen haben eine `ToJSON`-Instanz?“ (`dependency_search`)
- „Verfolge, wie ein Request dekodiert und validiert wird.“ (`get_task_context`)

## Bekannte Grenzen

- Etwa 130 Namen aus Prelude und base, etwa `map`, `foldr`, `fmap`, `pure` und `>>=`, sowie Module wie `Data.List` und `Control.Monad` werden aus den Beziehungen gefiltert. Verwende dafür `text_pattern_search`.
- In der Grammatik bezeichnet ein roher Funktionsknoten auch Funktionstypen. Deshalb liefert das Preset `functions` in `structural_search` nur Lambdas, und die Presets `methods` und `variables` wählen nichts aus. Verwende `find_symbol` für benannte Funktionen.
- Literate-Dateien (`.lhs`) werden als Ganzes mit der Haskell-Grammatik gelesen, rechne dort also mit unvollständigen Ergebnissen.
- Haskell hat keine Decorator-Syntax, daher sind Decorator-Beziehungen als nicht anwendbar markiert.

## Nächste Schritte

Verbinde ein Repository über den [Schnellstart](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Für andere funktionale Codebasen lies den [Elixir-Leitfaden](/de/languages/elixir).

## Engine-Einordnung

- Die Haskell-Unterstützung ordnet `.hs` und `.lhs` Haskell zu. Typklassen, `data`-Typen und `newtype`s sind Typen, und Aufrufe werden in Leerzeichen-Applikation und über Infix-Operatoren erkannt.
- `instance Eq Point` erfasst, dass `Point` `Eq` implementiert, und eine Instanzmethode, die einen Klassen-Default aus derselben Datei ersetzt, erfasst ein Override.
- Die Anwendung eines Datenkonstruktors zählt als Instanziierung, und etwa 130 Namen aus Prelude und base werden aus den Beziehungen gefiltert.

## Nützliche MCP-Einstiegspunkte

- `find_symbol`: Nutz es für eine Funktion oder einen Typ, wenn du Definition und Referenzen brauchst; strukturelle Presets liefern nur Lambdas.
- `dependency_search`: Nutz die eingehende Traversierung auf einer Typklasse, um zu sehen, welche Typen Instanzen haben.
- `get_task_context`: Nutz es für Prompts wie „verfolge, wie ein Request dekodiert und validiert wird“.
