haskell'in bağımlı türleri var mı?


20

Haskell zaten başka bir tür (C ++ şablon programlama benzer) üzerinde bir tür parametreleme yeteneğine sahip biliyorum, ama Haskell de değerleri üzerinde bir tür parametrelerini olup olmadığını merak ediyorum - bağımlı türleri destekler. Bağımlı türlerde, tamsayılar üzerinden parametrelenen bir türe sahip olabilirsiniz, örneğin n boyutundaki vektörler, n × m boyutundaki matrisler, vb.

Değilse, neden olmasın? Ve gelecekte desteklenmesi ihtimali var mı?

Yanıtlar:


18

Haskell'in tam bağımlı türleri yoktur, ancak DataKindsve gibi uzantılara çok yakın olabilir TypeFamilies. Şu anki sorun, bildiğim kadarıyla, değer seviyesi Haskell'in açık dipleri olduğu, ancak tip seviyesi Haskell'in olmadığı.

Bu, türlerin değerlerin kaldırılması da dahil olmak üzereDataKind diğer türlere göre parametreleştirilmesini engellemez . GHC 7.6'dan itibaren ve DataKindsetkinleştirildiğinde, tür düzeyinde doğallar ve dizelerin yanı sıra tür düzeyinde tuples, tür düzeyinde listeler ve herhangi bir türün (üst tür olmayan, genelleştirilmemiş) C ++ 'ın şablonlarda tamsayı kullanma yeteneğine benzeyen (ancak çok daha genel) cebirsel veri türleri.


1
GHC 8'de yapılacak değişiklikler tam bağımlı tipler ekliyor mu?
Janus Troelsen

@JanusTroelsen Pek değil; bağımlı türleri mümkün kılar .
Ptharien's Flame

8

Ptharien'in Alevinin mevcut durum hakkında güzel bir şekilde açıkladığı şeyleri biraz genişletmek için - ve GHC Haskell, her bir versiyonla bağımlı tipler yönünde (faz ayrılmasını korurken) daha fazla ilerliyor gibi görünüyor.

Bu nedenle, örneğin bu Eylül ayında ICFP 2013'te, bu sürecin bir sonraki aşaması hakkında, tür ve tür seviyelerinin çöküşü hakkında "Bağımlı olarak tiplendirilmiş Haskell: Tür eşitliğine sahip Sistem FC" adlı bir makale sunulmalıdır . Yaklaşık 3 yıl önce plan olduğu açıklandı .

Ve hatta bir sonraki adımdan da bahsediyor: " Adam Gundry'un yaklaşan tezinin System FC'nin bir versiyonunda types türlerini içereceğinin farkındayız ve bu özelliği kaynak dilde de sunmak istiyoruz. (Kişisel iletişim)"


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.