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 ! { L o o k u p , u p d một t đ } ⇒ ( A → B ! ∅ ) ! ∅
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.Δl o o k u pu p d một t đ
B ! ( { L o o k u p , u p d một t đ } ∪ delta ) ⇒ ( A → B ! ∅ ) ! Δ
B ! ( { L o o k u p , u p d một t đ } ∪ Δ ) ⇒ ( A → B ! Δ ) ! Δ
Δ