# Haskell v Maguyva: grafy kódu pro typové třídy a moduly

Canonical source: https://maguyva.ai/cs/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 podporuje Haskell s AST, symboly a grafem, takže AI agenti sledují funkce, instance typových tříd a datové konstruktory napříč moduly.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .hs, .lhs
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

## Nejlépe se hodí pro

- Služby a knihovny v Haskellu s mnoha moduly, typovými třídami a instancemi.
- Překladače, parsery a další kódové základny, kde změna jednoho datového typu dosáhne daleko.
- Týmy, které pomocí AI agentů čtou neznámý kód v Haskellu před refaktoringem.

## Workflow agentů

- Najít všechna volání funkce před změnou její typové signatury.
- Vypsat typy, které mají instanci dané typové třídy.
- Vysledovat, kde se datový konstruktor vytváří a které funkce ho zpracovávají.

## Kde Haskell podráží povrchní AI nástroje

Haskell volá funkce bez závorek, skládá je pomocí operátorů a rozesílá volání přes typové třídy. `render user` je jedno volání, `f . g <$> xs` jich obsahuje několik a `show` znamená to, co řekne instance pro daný typ. Textové vyhledávání najde jména, ne instance, které se za nimi skrývají.

Maguyva zaznamenává instance a konstruktory jako relace, takže agent vidí, které typy implementují třídu a kde vzniká hodnota.

## Co Maguyva v Haskellu extrahuje

Maguyva přiřazuje soubory `.hs` a `.lhs` k jazyku Haskell. Funkce a vazby se extrahují jako volatelné prvky, typové třídy, typy `data` a `newtype` jako typy. Volání se rozpoznávají v aplikaci oddělené mezerami i přes infixové operátory a importy normalizují klauzule `qualified`, `hiding` a `as`.

Typové třídy a konstruktory se stávají relacemi v grafu:

- `instance Eq Point` zaznamená, že `Point` implementuje `Eq`.
- Pokud má metoda třídy výchozí tělo ve stejném souboru, instance, která tuto metodu definuje, zaznamená přepsání výchozí implementace.
- Aplikace datového konstruktoru, například `Point 1 2`, se počítá jako vytvoření instance.
- `error`, `undefined` a `throw` zaznamenávají vyhození výjimek a obslužné funkce jako `catch` jejich zachycení.

Protože deklarace instancí mohou definovat jména jako `show` nebo `return`, definice ze stejného souboru se automaticky nepovažuje za cíl volání bez příjemce se stejným jménem.

## Ukázkové prompty pro agenty

- „Kdo volá `parseConfig` a z kterých modulů?“ (`find_symbol`, pak `dependency_search` incoming)
- „Které typy mají instanci `ToJSON`?“ (`dependency_search`)
- „Vysleduj, jak se požadavek dekóduje a validuje.“ (`get_task_context`)

## Známá omezení

- Asi 130 názvů z Prelude a base, například `map`, `foldr`, `fmap`, `pure` a `>>=`, a moduly jako `Data.List` a `Control.Monad` se z relací odfiltrují. Pro ně použijte `text_pattern_search`.
- V gramatice označuje surový uzel funkce i funkční typy, takže preset `functions` v `structural_search` vrací jen lambdy a presety `methods` a `variables` nic nevyberou. Pro pojmenované funkce použijte `find_symbol`.
- Literátní soubory `.lhs` se čtou celé gramatikou Haskellu, takže u nich počítejte s neúplnými výsledky.
- Haskell nemá syntaxi dekorátorů, proto jsou relace dekorátorů označeny jako nepoužitelné.

## Další kroky

Připojte repozitář podle [rychlého startu](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). U dalších funkcionálních kódových základen si přečtěte [průvodce jazykem Elixir](/cs/languages/elixir).

## Podrobnosti enginu

- Podpora Haskellu přiřazuje `.hs` a `.lhs` k jazyku Haskell. Typové třídy, typy `data` a `newtype` jsou typy a volání se rozpoznávají v aplikaci mezerou i přes infixové operátory.
- `instance Eq Point` zaznamená, že `Point` implementuje `Eq`, a metoda instance, která nahrazuje výchozí implementaci třídy ze stejného souboru, zaznamená přepsání.
- Aplikace datového konstruktoru se počítá jako vytvoření instance a asi 130 názvů z Prelude a base se z relací odfiltruje.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte ho pro funkci nebo typ, když potřebujete definici a odkazy; strukturní presety vracejí jen lambdy.
- `dependency_search`: Použijte incoming procházení na typové třídě, abyste viděli, které typy mají instance.
- `get_task_context`: Použijte ho pro prompty jako „vysleduj, jak se požadavek dekóduje a validuje“.
