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 | Double
TypeScript'te kolayca yapabileceğiniz bir şey gibi temsil edemeyeceğinizi anlıyorum ( langauge Sık kullandım ve Sum türlerini destekliyor) ve daha Either
sonra 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 show
iş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, show
fonksiyon her zaman string
parametre 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 Int
bir Double
veya tam tersini yapmasını istemiyorum . Bu iki türü sadece örnek olarak kullandım. Her yerini alabilecek Int
olan a
ve Double
birlikte b
her iki tür de türetmek benim söz konusu Show
. anonymous sum types
Haskell'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 | Bool
biz derlemek zorunda show x
, işaretçi işleve çağırarak için hangi bilmek kolay bir yolu yoktur show
tip-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ı Int
ve nedeninin ne olduğunu sormakla başlayın .
if ... then ... else ...
,then
veelse
bölümünde aynı türde olmalıdır . Bazı programlama dillerinde üçlü bir operatör olarak görebilirsiniz.