Câu hỏi về phân nhóm người xử lý trong hệ thống hiệu ứng cho hiệu ứng đại số và người xử lý


8

Tôi đã có một câu hỏi về phân nhóm trong bài báo "Một hệ thống hiệu ứng cho các hiệu ứng và xử lý đại số" . Tôi đã tự hỏi tại sao không có quy tắc phân nhóm để thêm hiệu ứng trên cả hai mặt của loại xử lý, đại loại như thế này:

T!AR!BT!(AC)R!(BC)

Điều này sẽ hữu ích khi áp dụng một biến có loại xử lý cho một tính toán có nhiều hiệu ứng hơn loại xử lý có ở phía bên trái của nó.

Bạn có thể thêm hiệu ứng cho cả hai mặt của loại trình xử lý bằng quy tắc gõ cho trình xử lý, nhưng điều đó sẽ không hiệu quả đối với các biến. Ví dụ khi xử lý là một đối số cho một chức năng.

Câu trả lời:


9

Tôi ngạc nhiên khi chúng tôi không nhận được câu hỏi này thường xuyên hơn, vì Andrej và tôi đã xem xét thêm quy tắc này trong một thời gian và tin rằng đã chứng minh tính đúng đắn của nó. Nhưng cuối cùng, nó hóa ra là sai, ít nhất là trong cài đặt gọi theo giá trị (tôi đã nghe nói nó phát ra tốt hơn trong giá trị gọi theo giá trị đẩy).

Xem xét xử lý nhà nước, được mô tả trên trang 24 của giấy cùng, trong đó có một tính toán stateful loại vào trạng thái và biến đổi nó thành một chức năng tinh khiết từ đến . Loại của nó là Lưu ý hai bộ trống ở phía bên tay phải. Trạng thái đầu tiên nói rằng hàm kết quả là thuần túy, hàm thứ hai không có hiệu ứng xảy ra khi sản xuất hàm này.BMộtMộtB

B!{tôiookbạnp,bạnpdmộtte}(MộtB!)!

Bây giờ giả sử rằng chúng tôi áp dụng trình xử lý cho một tính toán có thể gọi một số hiệu ứng khác bên cạnh và . Áp dụng quy tắc được đề xuất, bạn sẽ nhận được loại nhưng thực tế, loại đúng là là các hiệu ứng chưa được xử lý có thể xảy ra trước khi tạo hàm hoặc sau khi gọi hàm.Δtôiookbạnpbạnpdmộtte

B!({tôiookbạnp,bạnpdmộtte}Δ)(MộtB!)!Δ
B!({tôiookbạnp,bạnpdmộtte}Δ)(MộtB!Δ)!Δ
Δ

1
Cảm ơn Matija! Làm thế nào để bạn thoát khỏi việc không có quy tắc này? Làm thế nào bạn có thể áp dụng trình xử lý trạng thái (khi nó không phải là nội tuyến) cho một tính toán có nhiều hiệu ứng hơn là chỉ tra cứu và cập nhật? Tôi đoán bạn sẽ phải nội tuyến tất cả xử lý?
Labbekak

1
Bạn có thể thoát khỏi tính đa hình (không bao gồm trong bài báo bạn đã liên kết) và gán loại để xử lý. Xem bài viết ESOP mới nhất của chúng tôi về chủ đề này. A,B,Δ.B!({lookup,update}Δ)(AB!Δ)!Δ
Matija Pretnar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.