Bu soruya, önceki soruma bağlı olarak yeni bir soru başlatarak başladım. Ben benzer kurucular oluşur iki veri türleri varsaVeri türlerini kullanma Haskell
: Eğer ben ne yapıyorum görebilirsiniz eğer
data A = C | Z
data B = C
data C = X | Y
:
data A = X | Y | Z
data B = X | Y
olarak ben bir şekilde bu temsil edebilir yolu yoktur - Ben X | grup çalışıyorum Y bir veri türüne dönüştürülür, daha sonra diğer birçok veri türü tarafından kullanılabilir. Derleyicinin buna izin vermesi mümkün görünmüyor, ya da öyle görünüyorsa, X veya Y'ye göre eşleşme yapamıyorum, sadece C ??
C'nin birden çok kez bildirildiğini bildiren hata iletisini alıyorum.
Türlerimi kullanabileceğimi düşündüm, ancak birden çok yazımlamaya izin vermiyorlar.
I (aşağıda) gibi uzun bir yol beyan bile DÜZENLEME
, hala derlemek ve X ve Y birden bildirimleri var diyor olmaz: yapamayacağınız Sadece
data A = X | Y | Z
data B = X | Y
Ne soruyorsun A 'bir alt türü olacağını '. Önceden var olan türlerden ayrılan yeni bir tür oluşturan "data" anahtar kelimesiyle bildirilmez. Haskell'in böyle bir özelliği olduğunu sanmıyorum, ancak tüm Haskell uzantıları ile kendimi özlüyorum. – Gilles
@Gilles: Hayır, Haskell'in herhangi bir alt tipi polimorfizmi yok. Tip sınıfları üzerinden sadece parametrik polimorfizm ve ad-hoc polimorfizm vardır. Alabileceğiniz en yakın şey varoluşsal bir türdür, ama neredeyse değil, ama tamamen farklı bir şey. –
Bunu bir cevap olarak koyardım, ama tam olmadığı için .. Bir yazımcım ilan ederek istediğin şeye daha yakınlaşabilirsin ve sonra o "ortak şeyler" için ihtiyaç duyduğun operasyonları yapabilirsin. Bu, bu sorunu çözmek için bir şeyler çevirmek için oldukça yaygın bir yoldur (bu versiyonun bir versiyonu). –