Pertanyaan tentang subtyping dari penangan di “Sistem Efek untuk Efek dan Penangan Aljabar”

8

Saya punya pertanyaan tentang subtyping di kertas "Sistem Efek untuk Efek dan Penangan Aljabar" . Saya bertanya-tanya mengapa tidak ada aturan subtyping untuk menambahkan efek di kedua sisi dari tipe handler, sesuatu seperti ini:

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

Ini akan berguna ketika menerapkan variabel dengan tipe pawang ke perhitungan dengan lebih banyak efek daripada jenis pawang di sisi kirinya.

Anda bisa menambahkan efek ke kedua sisi dari jenis penangan menggunakan aturan pengetikan untuk penangan, tetapi itu tidak akan berfungsi untuk variabel. Misalnya ketika pawang adalah argumen untuk suatu fungsi.

Labbekak
sumber

Jawaban:

9

Saya terkejut kami tidak mendapatkan pertanyaan ini lebih sering, karena Andrej dan saya telah mempertimbangkan menambahkan aturan ini untuk beberapa waktu dan percaya telah membuktikan kebenarannya. Tetapi pada akhirnya, itu ternyata salah, setidaknya dalam pengaturan nilai-panggilan-(saya telah mendengar itu bermain lebih baik dalam nilai-panggilan-oleh-tekan).

BAAB

B!{lookup,update}(AB!)!
Perhatikan dua set kosong di sisi kanan. Yang pertama menyatakan bahwa fungsi yang dihasilkan murni, yang kedua tidak ada efek yang terjadi ketika memproduksi fungsi ini.

Δlookupupdate

B!({lookup,update}Δ)(AB!)!Δ
B!({lookup,update}Δ)(AB!Δ)!Δ
Δ
Matija Pretnar
sumber
1
Matija terima kasih! Bagaimana Anda bisa lolos dengan tidak memiliki aturan ini? Bagaimana Anda bisa menerapkan state handler (ketika tidak inline) ke perhitungan yang memiliki efek lebih dari sekadar pencarian dan pembaruan? Saya kira Anda harus inline semua penangan?
Labbekak
1
A,B,Δ.B!({lookup,update}Δ)(AB!Δ)!Δ