Tidak, itu tidak mungkin. Pertimbangkan kasus khusus di mana Q = Void
.
Either P Q
kemudian Either P Void
, yang isomorfik untuk P
.
iso :: P -> Either P Void
iso = Left
iso_inv :: Either P Void -> P
iso_inv (Left p) = p
iso_inv (Right q) = absurd q
Karenanya, jika kita memiliki istilah fungsi
impossible :: ((P -> Void) -> Void) -> Either P Void
kita juga bisa memiliki istilah
impossible2 :: ((P -> Void) -> Void) -> P
impossible2 = iso_inv . impossible
Menurut korespondensi Curry-Howard, ini akan menjadi tautologi dalam logika intuitionistic :
((P -> False) -> False) -> P
Tetapi hal di atas adalah penghapusan negasi ganda, yang diketahui mustahil untuk dibuktikan dalam logika intuitionistic - karenanya merupakan kontradiksi. (Fakta bahwa kita dapat membuktikannya dalam logika klasik tidak relevan.)
(Catatan akhir: ini mengasumsikan bahwa keluar dari program Haskell berakhir. Tentu saja, menggunakan rekursi tak terbatas undefined
,, dan cara-cara serupa untuk benar-benar menghindari untuk mengembalikan hasil, kita dapat menghuni jenis apa pun di Haskell.)
((a -> b) -> b)
yang penuh isomorfik untuka
: satu-satunya implementasi yang mungkin adalahg f = f someHardcodedA
.