Siirry sisältöön
cd /languages
  • Puhdas funktionaalinen
  • Ohjelmointi
  • AST- ja symbolituki

Haskell-tuki Maguyva-palvelussa: koodigraafit tyyppiluokille ja moduuleille

Maguyva tukee Haskellia AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata funktioita, tyyppiluokkien instansseja ja datakonstruktoreita moduulien yli.

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 avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Muissa funktionaalisissa koodikannoissa lue Elixir-opas.

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

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