# Haskell sa Maguyva: mga code graph para sa type class at module

Canonical source: https://maguyva.ai/fil/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).

Sinusuportahan ng Maguyva ang Haskell gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga function, type-class instance at data constructor sa iba't ibang module.

## Snapshot ng support

- Antas: Support para sa AST at mga simbolo
- Programming
- Mga extension: .hs, .lhs
- Tunay na AST parsing para sa syntax-aware search at structural context.
- Pinapagana ng mga named symbol ang semantic lookup at cross-reference. Available ang graph navigation kapag naka-enable ang pagkuha ng mga ugnayan.
- Nag-aambag ang wikang ito ng mga simbolo at ugnayan sa graph-aware search; nag-iiba ang mga sinusuportahang uri ng edge ayon sa mga native construct nito.
- Available ang AST parsing at symbol extraction.

## Pinakabagay

- Mga Haskell service at library na may maraming module, type class at instance.
- Mga compiler, parser at iba pang codebase kung saan malayo ang abot ng pagbabago sa isang data type.
- Mga team na nagbabasa ng hindi pamilyar na Haskell code kasama ang mga AI agent bago mag-refactor.

## Mga workflow ng agent

- Hanapin ang lahat ng tumatawag sa isang function bago baguhin ang type signature nito.
- Ilista ang mga type na may instance para sa isang type class.
- I-trace kung saan nalilikha ang isang data constructor at aling mga function ang gumagamit nito.

## Saan nalilito ang mababaw na AI tool sa Haskell

Tumatawag ang Haskell ng mga function nang walang panaklong, pinagsasama ang mga ito gamit ang mga operator, at nagdi-dispatch sa pamamagitan ng type class. Isang call ang `render user`, may ilang call ang `f . g <$> xs`, at ang ibig sabihin ng `show` ay kung ano ang sabi ng instance ng type na iyon. Nahahanap ng text search ang mga pangalan, hindi ang mga instance sa likod nila.

Itinatala ng Maguyva ang mga instance at constructor bilang relationship, para makita ng agent kung aling mga type ang nag-i-implement ng isang class at kung saan nalilikha ang isang value.

## Ano ang kinukuha ng Maguyva mula sa Haskell

Iminamapa ng Maguyva sa Haskell ang mga `.hs` at `.lhs` file. Kinukuha bilang callable ang mga function at binding, at bilang type ang mga type class, `data` type at `newtype` type. Nakikilala ang mga call sa application na hinihiwalay ng espasyo at sa mga infix operator, at nino-normalize ng mga import ang mga clause na `qualified`, `hiding` at `as`.

Nagiging graph relationship ang mga type class at constructor:

- Itinatala ng `instance Eq Point` na ini-implement ng `Point` ang `Eq`.
- Kapag may default body ang isang class method sa parehong file, itinatala ng instance na nagdedeklara ng method na iyon na ino-override nito ang default.
- Bilang instantiation ang pag-apply ng data constructor tulad ng `Point 1 2`.
- Nagtatala ng throw ang `error`, `undefined` at `throw`, at nagtatala ng catch ang mga handler tulad ng `catch`.

Dahil puwedeng magdeklara ang mga instance declaration ng mga pangalan tulad ng `show` o `return`, hindi ipinagpapalagay na ang definition sa parehong file ang target ng call na walang receiver at may ganoong pangalan.

## Mga halimbawang agent prompt

- "Sino ang tumatawag sa `parseConfig`, at mula sa aling mga module?" (`find_symbol`, tapos `dependency_search` na incoming)
- "Aling mga type ang may `ToJSON` instance?" (`dependency_search`)
- "I-trace kung paano pina-parse at vina-validate ang isang request." (`get_task_context`)

## Mga kilalang limitasyon

- Mga 130 pangalan mula sa Prelude at base tulad ng `map`, `foldr`, `fmap`, `pure` at `>>=`, at mga module tulad ng `Data.List` at `Control.Monad`, ang nifi-filter mula sa mga relationship. Gamitin ang `text_pattern_search` para sa mga iyon.
- Sa grammar, kumakatawan din sa mga function type ang raw function node, kaya mga lambda lang ang ibinabalik ng `functions` preset sa `structural_search`, at walang napipili ang mga `methods` at `variables` preset. Gamitin ang `find_symbol` para sa mga named function.
- Binabasa nang buo gamit ang Haskell grammar ang mga literate `.lhs` file; asahan ang hindi kumpletong resulta sa mga file na iyon.
- Walang decorator syntax ang Haskell, kaya minarkahang hindi naaangkop ang mga decorator relationship.

## Mga susunod na hakbang

Mag-connect ng repository gamit ang [quickstart](/fil/docs/quickstart), tapos tingnan ang support matrix sa [compatibility page](/fil/docs/compatibility). Para sa iba pang functional codebase, basahin ang [gabay sa Elixir](/fil/languages/elixir).

## Mga detalye ng engine

- Iminamapa ng suporta sa Haskell ang mga `.hs` at `.lhs` file sa Haskell. Mga type ang type class, `data` type at `newtype` type; nakikilala ang mga call sa application na may espasyo at sa mga infix operator.
- Itinatala ng `instance Eq Point` na ini-implement ng `Point` ang `Eq`, at nagtatala ng override ang instance method na pumapalit sa default ng class sa parehong file.
- Bilang instantiation ang pag-apply ng data constructor; mga 130 pangalan mula sa Prelude at base ang nifi-filter mula sa mga relationship.

## Mga kapaki-pakinabang na MCP entry point

- `find_symbol`: Gamitin para sa isang function o type kapag kailangan mo ang definition at mga reference; mga lambda lang ang ibinabalik ng mga structural preset.
- `dependency_search`: Gumamit ng incoming traversal sa isang type class para makita kung aling mga type ang may instance.
- `get_task_context`: Gamitin para sa mga prompt tulad ng "i-trace kung paano pina-parse at vina-validate ang isang request".
