# Haskell-tuki Maguyva-palvelussa: koodigraafit tyyppiluokille ja moduuleille

Canonical source: https://maguyva.ai/fi/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 tukee Haskellia AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata funktioita, tyyppiluokkien instansseja ja datakonstruktoreita moduulien yli.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .hs, .lhs
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Haskell-palvelut ja -kirjastot, joissa on paljon moduuleja, tyyppiluokkia ja instansseja.
- Kääntäjät, jäsentimet ja muut koodikannat, joissa yhden tietotyypin muutos ulottuu kauas.
- Tiimit, jotka lukevat tekoälyagenttien avulla tuntematonta Haskell-koodia ennen refaktorointia.

## Agenttien työnkulut

- Löytää funktion kaikki kutsujat ennen sen tyyppiallekirjoituksen muuttamista.
- Listata tyypit, joilla on tietyn tyyppiluokan instanssi.
- Jäljittää, missä datakonstruktori rakennetaan ja mitkä funktiot käyttävät sitä.

## Missä Haskell kampittaa pinnallisia tekoälytyökaluja

Haskell kutsuu funktioita ilman sulkeita, yhdistää niitä operaattoreilla ja välittää kutsut tyyppiluokkien kautta. `render user` on yksi kutsu, `f . g <$> xs` sisältää useita, ja `show` tarkoittaa sitä, mitä kyseisen tyypin instanssi sanoo. Tekstihaku löytää nimet, ei niiden takana olevia instansseja.

Maguyva tallentaa instanssit ja konstruktorit suhteina, joten agentti näkee, mitkä tyypit toteuttavat luokan ja missä arvo rakennetaan.

## Mitä Maguyva poimii Haskellista

Maguyva liittää `.hs`- ja `.lhs`-tiedostot Haskelliin. Funktiot ja sidonnat poimitaan kutsuttavina, ja tyyppiluokat, `data`-tyypit ja `newtype`-tyypit tyyppeinä. Kutsut tunnistetaan välilyönnein erotetussa soveltamisessa ja infiksioperaattoreiden kautta, ja tuonnit normalisoivat `qualified`-, `hiding`- ja `as`-lausekkeet.

Tyyppiluokista ja konstruktoreista tulee graafin suhteita:

- `instance Eq Point` tallentaa, että `Point` toteuttaa luokan `Eq`.
- Kun luokan metodilla on samassa tiedostossa oletusrunko, metodin määrittelevä instanssi tallentaa oletuksen ohituksen.
- Datakonstruktorin soveltaminen, kuten `Point 1 2`, lasketaan instanssin luonniksi.
- `error`, `undefined` ja `throw` tallentavat poikkeusten heittoja, ja käsittelijät kuten `catch` tallentavat sieppauksia.

Koska instanssimäärittelyt voivat määritellä nimiä kuten `show` tai `return`, samassa tiedostossa olevaa määritelmää ei oleteta samannimisen vastaanottajattoman kutsun kohteeksi.

## Esimerkkikehotteita agenteille

- ”Kuka kutsuu funktiota `parseConfig` ja mistä moduuleista?” (`find_symbol`, sitten `dependency_search` incoming)
- ”Millä tyypeillä on `ToJSON`-instanssi?” (`dependency_search`)
- ”Jäljitä, miten pyyntö dekoodataan ja validoidaan.” (`get_task_context`)

## Tunnetut rajoitukset

- Noin 130 Preluden ja base-kirjaston nimeä, kuten `map`, `foldr`, `fmap`, `pure` ja `>>=`, sekä moduulit kuten `Data.List` ja `Control.Monad` suodatetaan pois suhteista. Käytä niihin `text_pattern_search`-työkalua.
- Kieliopissa raaka funktiosolmu tarkoittaa myös funktiotyyppejä, joten `structural_search`-työkalun esiasetus `functions` palauttaa vain lambdoja, eivätkä esiasetukset `methods` ja `variables` valitse mitään. Käytä nimettyihin funktioihin `find_symbol`-työkalua.
- Lukutaitoiset `.lhs`-tiedostot luetaan kokonaisuudessaan Haskellin kieliopilla, joten niistä saadaan todennäköisesti vain osittaisia tuloksia.
- Haskellissa ei ole dekoraattorisyntaksia, joten dekoraattorisuhteet on merkitty soveltumattomiksi.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Muissa funktionaalisissa koodikannoissa lue [Elixir-opas](/fi/languages/elixir).

## Moottorin yksityiskohdat

- Haskell-tuki liittää `.hs`- ja `.lhs`-tiedostot Haskelliin. Tyyppiluokat, `data`-tyypit ja `newtype`-tyypit ovat tyyppejä, ja kutsut tunnistetaan välilyöntisoveltamisessa ja infiksioperaattoreiden kautta.
- `instance Eq Point` tallentaa, että `Point` toteuttaa luokan `Eq`, ja instanssimetodi, joka korvaa saman tiedoston luokan oletuksen, tallentaa ohituksen.
- Datakonstruktorin soveltaminen lasketaan instanssin luonniksi, ja noin 130 Preluden ja base-kirjaston nimeä suodatetaan pois suhteista.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä funktiolle tai tyypille, kun tarvitset määritelmän ja viittaukset; rakenteelliset esiasetukset palauttavat vain lambdoja.
- `dependency_search`: Käytä incoming-läpikäyntiä tyyppiluokalle nähdäksesi, millä tyypeillä on instansseja.
- `get_task_context`: Käytä sitä kehotteisiin kuten ”jäljitä, miten pyyntö dekoodataan ja validoidaan”.
