Üzgünüm, çok önde okuyunuz, soru için daha iyi bir başlık hayal değil.Kapalı tip aileleri ve garip fonksiyon tipleri
doMagic :: a -> Family a
doMagic = undefined
exampleA = doMagic $ Just()
exampleB = doMagic $()
GHCi onunla oynamak: Hatta bu tip ailesini kullanarak bir işlev ilan edebilir
type family Family x where
Family (Maybe x) = Maybe x
Family x = Maybe x
: Biz kendilerini Belkiler dışında kendisine her tip Maybe
tekabül ediyor eşleştiren bir kapalı tip aileye sahip olduğunu düşünün fonksiyon uygulamanın türünü değerlendirmek Tamam olduğunu göstermektedir: herhangi implementati sağlamak mümkün olup olmadığını
*Strange> :t exampleA
exampleA :: Maybe()
*Strange> :t exampleB
exampleB :: Maybe()
sorudur undefined
dışında doMagic
işlevinin üzerinde? Örneğin, her değeri Just
yapıcısına sarmak istediğimi söyleyeyim, Maybes hariç, sağlam kalmalıyım, bunu nasıl yapabilirim? Türlerini kullanmayı denedim, ancak kapalı tip aileleri kullanmıyorken doMagic işlevi için derlenebilir bir imza yazamadım, birisi bana yardım edebilir mi?
doMagic x = Sadece undefined' da türlerini saygı dinamik yazılan dilin 'in. Teorik olarak, bir tip sistem buna izin verebilir (ama bu gerçekten faydalı olabilir mi?). BTW, betimlediğiniz örnek, hangi a tipi 'a' türüne bağlı olarak farklı şeyler yaparsanız, çalışma zamanında tür bilgisi isterken, Haskell tip silme işlemine izin verecek şekilde tasarlanmıştır (çalışma zamanında herhangi bir tip bilgisi yoktur). Yine de, bir tür sınıfı kullanarak yakın bir şey elde edebilirsiniz. – chi
Dahası, soru "kapalı tip ailelerin varlığında bir türün _free teoremi nedir?" Ile ilgili görünüyor. – chi