Nasıl Haskell istisnalar çalışır?
GHCi
Prelude> error (error "")
*** Exception:
Prelude> (error . error) ""
*** Exception: *** Exception:
Neden bir iç içe geçmiş bir durum değil mi?
CEVAP
Cevap bu (biraz) şaşırtıcı semantiğikesin olmayan durumlar
Saf kod değerlendirmek gösterilebilirayarlayınolağanüstü değerler (error
undefined
değeri, yani açıkçadeğilistisnalar tür generated in IO), sonra da dilini bu set herhangi bir değer verir. Haskell, olağanüstü değerleri kod yerine kontrol-akış zorunlu dil merkezli özel durumlar kayan NaN
gibi.
Hatta gelişmiş Haskellers için arada bir yakaladım bir durum gibi
case x of
1 -> error "One"
_ -> error "Not one"
Kodu özel bir set olarak değerlendirildiğinden, DZD bir seçim için ücretsiz. İyileştirmeleri, bu her zaman sonucunu görebilirsiniz "Değil".
Neden bunu yapıyoruz? Aksi takdirde aşırı dil değerlendirme sırası sınırlamak istiyoruz çünkü, örneğin belirli bir sonucu tamir:
f (error "a") (error "b")
örneğin tarafından değerlendirilecek gerektiren hata değeri varsa sağdan sola. Çok-Haskelly BM!
Beri istemiyoruz sakat iyileştirmeler yapılabilir bizim kod sadece destek error
çözüm için belirttiğiniz sonucu olmayan bir deterministik seçim kümesinin üstün değerler: kesin olmayan giremez! Bir şekilde, tüm özel durumları döndü, biri seçilir.
Normalde, bu durumda error
hata ayıklama kullanarak son derece kafa karıştırıcı durum, içinde dize önemsediğin sürece umurunda değil - bir istisna bir durum.
Referanslar: A semantics for imprecise exceptions, Simon Peyton Jones, Alastair Reid, Tony Hoare, Simon Marlow, Fergus Henderson. Proc Programlama Dilleri Tasarım ve Uygulama (PLDİ'99), Atlanta. (PDF)
Nasıl Haskell, basit bir beşgen kullan...
Nasıl Haskell içinde doğan çalışır?...
Nasıl Haskell kuyruk özyineleme çalışı...
JavaScript kilitler nasıl çalışır?...
CSS üçgenler nasıl çalışır?...