ข้ามไปที่เนื้อหา
cd /languages
  • เชิงฟังก์ชันล้วน
  • การเขียนโปรแกรม
  • รองรับ AST และสัญลักษณ์

Haskell บน Maguyva: กราฟโค้ดสำหรับไทป์คลาสและโมดูล

Maguyva รองรับ Haskell ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามฟังก์ชัน อินสแตนซ์ของไทป์คลาส และคอนสตรักเตอร์ข้อมูลข้ามโมดูลได้

จุดที่ Haskell ทำให้เครื่องมือ AI แบบผิวเผินสะดุด

Haskell เรียกฟังก์ชันโดยไม่ใช้วงเล็บ ประกอบฟังก์ชันด้วยตัวดำเนินการ และส่งต่อการทำงานผ่านไทป์คลาส render user คือการเรียก f . g <$> xs มีการเรียกหลายครั้ง และ show มีความหมายตามที่อินสแตนซ์ของไทป์นั้นกำหนด การค้นหาข้อความเจอชื่อ แต่ไม่เจออินสแตนซ์เบื้องหลัง

Maguyva บันทึกอินสแตนซ์และคอนสตรักเตอร์เป็นความสัมพันธ์ เพื่อให้เอเจนต์เห็นว่าไทป์ใดอิมพลีเมนต์คลาส และค่าถูกสร้างขึ้นที่ไหน

Maguyva ดึงอะไรจาก Haskell ได้บ้าง

Maguyva จับคู่ไฟล์ .hs และ .lhs เข้ากับภาษา Haskell โดยฟังก์ชันและการผูกค่าถูกดึงออกมาเป็นสิ่งที่เรียกใช้ได้ ส่วนไทป์คลาส ไทป์ data และไทป์ newtype ถูกดึงออกมาเป็นไทป์ การเรียกถูกจดจำได้ทั้งในการประยุกต์ใช้ที่คั่นด้วยช่องว่างและผ่านตัวดำเนินการแบบอินฟิกซ์ และการอิมพอร์ตปรับอนุประโยค qualified, hiding และ as ให้เป็นมาตรฐาน

ไทป์คลาสและคอนสตรักเตอร์กลายเป็นความสัมพันธ์ในกราฟ

  • instance Eq Point บันทึกว่า Point อิมพลีเมนต์ Eq
  • หากเมธอดของคลาสมีส่วนเนื้อหาเริ่มต้นในไฟล์เดียวกัน อินสแตนซ์ที่นิยามเมธอดนั้นจะบันทึกการแทนที่ค่าเริ่มต้น
  • การใช้คอนสตรักเตอร์ข้อมูลอย่าง Point 1 2 นับเป็นการสร้างอินสแตนซ์
  • error, undefined และ throw บันทึกการโยน และตัวจัดการอย่าง catch บันทึกการจับ

เนื่องจากการประกาศอินสแตนซ์อาจนิยามชื่ออย่าง show หรือ return นิยามในไฟล์เดียวกันจึงไม่ถูกสันนิษฐานว่าเป็นเป้าหมายของการเรียกที่ไม่มีรีซีฟเวอร์ซึ่งใช้ชื่อนั้น

ตัวอย่างพรอมต์สำหรับเอเจนต์

  • “ใครเรียก parseConfig และเรียกจากโมดูลไหนบ้าง” (find_symbol จากนั้น dependency_search ทิศทางขาเข้า)
  • “ไทป์ใดบ้างที่มีอินสแตนซ์ ToJSON” (dependency_search)
  • “ติดตามว่าคำขอถูกแยกวิเคราะห์และตรวจสอบความถูกต้องอย่างไร” (get_task_context)

ข้อจำกัดที่ทราบ

  • ชื่อจาก Prelude และไลบรารีพื้นฐาน ประมาณ 130 ชื่อ เช่น map, foldr, fmap, pure และ >>= รวมถึงโมดูลอย่าง Data.List และ Control.Monad ถูกกรองออกจากความสัมพันธ์ ใช้ text_pattern_search สำหรับสิ่งเหล่านี้
  • ในไวยากรณ์ โหนดฟังก์ชันพื้นฐานยังใช้แทนไทป์ฟังก์ชันด้วย ดังนั้นพรีเซ็ต functions ใน structural_search จึงคืนเฉพาะแลมบ์ดา และพรีเซ็ต methods กับ variables ไม่เลือกอะไรเลย ใช้ find_symbol สำหรับฟังก์ชันแบบมีชื่อ
  • ไฟล์ลิเทอเรต .lhs ถูกอ่านทั้งไฟล์ด้วยไวยากรณ์ของ Haskell อาจได้ผลลัพธ์ไม่ครบในไฟล์เหล่านี้
  • Haskell ไม่มีไวยากรณ์เดคอเรเตอร์ ความสัมพันธ์ของเดคอเรเตอร์จึงถูกทำเครื่องหมายว่าไม่เกี่ยวข้อง

ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วยคู่มือเริ่มต้นใช้งาน แล้วดูตารางการรองรับได้ที่หน้าความเข้ากันได้ สำหรับโค้ดเบสเชิงฟังก์ชันอื่น ๆ ให้อ่านคู่มือภาษา Elixir

เหมาะที่สุดสำหรับ

  • > เซอร์วิสและไลบรารี Haskell ที่มีโมดูล ไทป์คลาส และอินสแตนซ์จำนวนมาก
  • > คอมไพเลอร์ พาร์เซอร์ และโค้ดเบสอื่นที่การเปลี่ยนไทป์ข้อมูลเพียงตัวเดียวส่งผลไปไกล
  • > ทีมที่อ่านโค้ด Haskell ที่ไม่คุ้นเคยร่วมกับเอเจนต์ AI ก่อนรีแฟกเตอร์

เวิร์กโฟลว์ของเอเจนต์

  • > ค้นหาผู้เรียกทั้งหมดของฟังก์ชันก่อนเปลี่ยนซิกเนเจอร์ไทป์
  • > แสดงรายการไทป์ที่มีอินสแตนซ์ของไทป์คลาส
  • > ติดตามว่าคอนสตรักเตอร์ข้อมูลถูกสร้างที่ไหนและฟังก์ชันใดใช้มัน

รายละเอียดเอนจิน

  • > การรองรับ Haskell จับคู่ไฟล์ `.hs` และ `.lhs` กับ Haskell ไทป์คลาส ไทป์ `data` และไทป์ `newtype` เป็นไทป์ การเรียกถูกจดจำได้ในการประยุกต์ใช้ที่คั่นด้วยช่องว่างและผ่านตัวดำเนินการแบบอินฟิกซ์
  • > `instance Eq Point` บันทึกว่า `Point` อิมพลีเมนต์ `Eq` และเมธอดของอินสแตนซ์ที่แทนค่าเริ่มต้นของคลาสในไฟล์เดียวกันจะบันทึกการแทนที่
  • > การใช้คอนสตรักเตอร์ข้อมูลนับเป็นการสร้างอินสแตนซ์ ชื่อจาก Prelude และไลบรารีพื้นฐาน ประมาณ 130 ชื่อถูกกรองออกจากความสัมพันธ์

จุดเริ่มต้น MCP ที่มีประโยชน์

  • find_symbol

    ใช้กับฟังก์ชันหรือไทป์เมื่อต้องการนิยามและการอ้างอิง พรีเซ็ตเชิงโครงสร้างคืนเฉพาะแลมบ์ดา

  • dependency_search

    ใช้การท่องกราฟขาเข้าบนไทป์คลาสเพื่อดูว่าไทป์ใดมีอินสแตนซ์

  • get_task_context

    ใช้กับพรอมต์อย่าง "ติดตามว่าคำขอถูกแยกวิเคราะห์และตรวจสอบความถูกต้องอย่างไร"

คู่มือที่เกี่ยวข้อง

ส่วนอื่นของรีโพที่เกี่ยวข้อง

ดูคู่มือทั้งหมด
BEAM แบบทำงานพร้อมกัน การเขียนโปรแกรม

Elixir บน Maguyva: กราฟโค้ดสำหรับแอป Phoenix และ OTP

โครงสร้างของ Elixir อยู่ภายในมาโคร กราฟอ่านมาโครเหล่านั้นเป็นโครงสร้าง

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.ex, .exs

เปิดคู่มือ
ปลอดภัยมาก่อน การเขียนโปรแกรม

การรองรับ Rust ใน Maguyva: บริบทที่ปลอดภัยสำหรับการเปลี่ยนแปลงด้วยความช่วยเหลือของ AI

เกี่ยวข้องเมื่อคุณต้องการความช่วยเหลือจาก AI ใน Rust โดยไม่สูญเสียการ์ดเรลเชิงโครงสร้างที่ทำให้ Rust คุ้มค่าที่จะใช้

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.rs

เปิดคู่มือ