Chuyển tới nội dung
cd /languages
  • Lập trình hàm thuần túy
  • Lập trình
  • Hỗ trợ AST và symbol

Haskell trên Maguyva: đồ thị mã cho type class và module

Maguyva hỗ trợ Haskell với AST, ký hiệu và đồ thị, để agent AI có thể lần theo hàm, instance của type class và constructor dữ liệu qua các module.

Haskell làm khó các công cụ AI hời hợt ở đâu

Haskell gọi hàm không cần dấu ngoặc, ghép chúng bằng toán tử và điều phối qua type class. render user là một lời gọi, f . g <$> xs chứa nhiều lời gọi, còn show mang nghĩa mà instance của kiểu đó quy định. Tìm kiếm văn bản thấy được tên, nhưng không thấy các instance phía sau.

Maguyva ghi lại instance và constructor thành quan hệ, để agent thấy kiểu nào triển khai một class và một giá trị được tạo ra ở đâu.

Maguyva trích xuất gì từ Haskell

Maguyva ánh xạ các tệp .hs và .lhs sang Haskell. Hàm và binding được trích xuất thành callable, còn type class, kiểu data và kiểu newtype được trích xuất thành kiểu. Lời gọi được nhận diện trong phép áp dụng ngăn cách bằng khoảng trắng và qua toán tử trung tố, còn import chuẩn hóa các mệnh đề qualified, hiding và as.

Type class và constructor trở thành quan hệ trong đồ thị:

  • instance Eq Point ghi lại rằng Point triển khai Eq.
  • Nếu một phương thức của class có phần thân mặc định trong cùng tệp, instance định nghĩa phương thức đó sẽ ghi lại việc ghi đè giá trị mặc định.
  • Áp dụng một constructor dữ liệu như Point 1 2 được tính là khởi tạo.
  • error, undefined và throw ghi lại lần ném, còn các trình xử lý như catch ghi lại lần bắt.

Vì khai báo instance có thể định nghĩa các tên như show hay return, một định nghĩa trong cùng tệp không được mặc định là đích của lời gọi không receiver mang tên đó.

Ví dụ prompt cho agent

  • “Ai gọi parseConfig, và từ những module nào?” (find_symbol, sau đó dependency_search theo chiều vào)
  • “Những kiểu nào có instance ToJSON?” (dependency_search)
  • “Lần theo cách một yêu cầu được phân tích và kiểm tra hợp lệ.” (get_task_context)

Giới hạn đã biết

  • Khoảng 130 tên của Prelude và base như map, foldr, fmap, pure và >>=, cùng các module như Data.List và Control.Monad, bị lọc khỏi quan hệ. Dùng text_pattern_search cho chúng.
  • Trong ngữ pháp, nút hàm thô còn biểu diễn kiểu hàm, nên preset functions trong structural_search chỉ trả về lambda, còn các preset methods và variables không chọn được gì. Dùng find_symbol cho hàm có tên.
  • Tệp literate .lhs được đọc toàn bộ bằng ngữ pháp Haskell; hãy dự kiến kết quả không đầy đủ ở những tệp này.
  • Haskell không có cú pháp decorator, nên các quan hệ decorator được đánh dấu là không áp dụng.

Bước tiếp theo

Kết nối một kho mã bằng hướng dẫn bắt đầu nhanh, sau đó xem ma trận hỗ trợ trên trang tương thích. Với các codebase hàm khác, hãy đọc hướng dẫn Elixir.

Phù hợp nhất

  • > Dịch vụ và thư viện Haskell có nhiều module, type class và instance.
  • > Trình biên dịch, bộ phân tích cú pháp và các codebase khác nơi thay đổi ở một kiểu dữ liệu lan ra xa.
  • > Các nhóm cùng agent AI đọc mã Haskell còn lạ trước khi tái cấu trúc.

Workflow agent

  • > Tìm mọi nơi gọi một hàm trước khi đổi chữ ký kiểu của nó.
  • > Liệt kê các kiểu có instance cho một type class.
  • > Lần theo nơi một constructor dữ liệu được tạo ra và những hàm nào dùng nó.

Chi tiết engine

  • > Hỗ trợ Haskell bao gồm các tệp `.hs` và `.lhs`. Type class, kiểu `data` và kiểu `newtype` là kiểu; lời gọi được nhận diện trong phép áp dụng cách bằng khoảng trắng và qua toán tử trung tố.
  • > `instance Eq Point` ghi lại rằng `Point` triển khai `Eq`, và một phương thức instance thay thế giá trị mặc định của class trong cùng tệp sẽ ghi lại việc ghi đè.
  • > Áp dụng một constructor dữ liệu được tính là khởi tạo; khoảng 130 tên của Prelude và base bị lọc khỏi quan hệ.

Điểm khởi đầu MCP hữu ích

  • find_symbol

    Dùng cho hàm hoặc kiểu khi bạn cần định nghĩa và các tham chiếu; các preset cấu trúc chỉ trả về lambda.

  • dependency_search

    Dùng duyệt theo chiều vào trên một type class để thấy những kiểu nào có instance.

  • get_task_context

    Dùng cho prompt như "lần theo cách một yêu cầu được phân tích và kiểm tra hợp lệ".