Přeskočit na obsah
cd /languages
  • Čistě funkcionální
  • Programování
  • Podpora AST a symbolů

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

Maguyva podporuje Haskell s AST, symboly a grafem, takže AI agenti sledují funkce, instance typových tříd a datové konstruktory napříč moduly.

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 a pak si prohlédněte matici podpory na stránce kompatibility. U dalších funkcionálních kódových základen si přečtěte průvodce jazykem Elixir.

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

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