Bunlar neden eşdeğer değil?
show $ if someCondition then someInt else some double
ve
if someCondition then show someInt else show someDouble
if ... elseİlk örnekteki parçayı kendi başına bir ifadeye ayırırsanız , türünü anonim bir toplam türüyle, türünü, Int | DoubleTypeScript'te kolayca yapabileceğiniz bir şey gibi temsil edemeyeceğinizi anlıyorum ( langauge Sık kullandım ve Sum türlerini destekliyor) ve daha Eithersonra buna dayanarak verileri kullanarak başvurmak zorunda kalacaktık show.
Burada verdiğim örnek önemsiz ama benim için "Tamam bir şey göstereceğiz, ve" bir şey someCondition"yerine" Tamam, eğer bir koşul doğruysa o zaman someInt, aksi takdirde someDouble göster " i düşünmek daha mantıklı ve aynı zamanda daha az kod çoğaltma için (burada gösteri iki kez tekrarlanır, ancak aynı zamanda uzun bir işlev uygulaması olabilir ve yerine if ... else> 2 dal düşünülebilir)
Benim düşünceme göre, derleyicinin toplam türünü (burada Int | Double) yapan türlerin her birinin showişlev için bir parametre olarak kullanılıp kullanılamayacağını kontrol etmesi kolay olmalı ve türlerin doğru olup olmadığına karar vermelidir . Daha da iyisi, showfonksiyon her zaman stringparametre türleri ne olursa olsun döndürür , bu yüzden derleyici tüm olası "dalları" (yani tüm olası türleri) taşımak zorunda değildir.
Böyle bir özellik mevcut değil mi? Yoksa uygulamak bence zor mu?
making all conversions explicit. Benim sorum, Haskell'in Intbir Doubleveya tam tersini yapmasını istemiyorum . Bu iki türü sadece örnek olarak kullandım. Her yerini alabilecek Intolan ave Doublebirlikte bher iki tür de türetmek benim söz konusu Show. anonymous sum typesHaskell'de hiç olmadığını anlıyorum, ancak bunun neden böyle olduğunu ve bunu yapmak için dili tasarlamamızı neyin engellediğini bilmek istiyorum.
x :: Int | Boolbiz derlemek zorunda show x, işaretçi işleve çağırarak için hangi bilmek kolay bir yolu yoktur showtip-silme bazlı RTS içinde. Muhtemelen çalışma zamanında bazı tür düzeyinde bilgileri tutmamız gerekir.
(String, Int)anonim değil. Sadece komik sözdizimi ile düzenli bir ürün türüdür. (String | Int)çok farklı olurdu. Kendinize (Int|Int)aynı olup olmayacağını Intve nedeninin ne olduğunu sormakla başlayın .
if ... then ... else ...,thenveelsebölümünde aynı türde olmalıdır . Bazı programlama dillerinde üçlü bir operatör olarak görebilirsiniz.