tek yolu aslında a :~: b
bir örneğini oluşturmak için (veya benzer; önemli olan bir bu typechecker için "kanıtlıyor" terimini oluşturmaktır) sonra ve Çalışma zamanında kanıt tanığının değerlendirilmesini gerektiren Refl
yapıcısında desen eşleşmesi. Benim anlayışım, GHC'deki bağımlı tipler için mevcut tasarımın hala tüm tipte eşitlik kanıtlarını çalıştırması gerekliliğidir. Bununla birlikte, bir kişi, yazım denetiminden sonra, kanıt tanığını çok düşük maliyetli bir işlevle (örneğin, unsafeCoerce Refl :: Reverse (Reverse a) :~: a
) değiştirebilir, bu da değerlendirmeyi çok düşük maliyetle yapar, ancak yine de güvenlidir (kanıt tanıklığı daha önce yazıldığından, eğer sona ererse, doğru bir kanıt üretecektir). Haskell bağımlı yazarak mevcut durumu hakkında
Çok daha fazla bilgi burada bulunabilir: https://typesandkinds.wordpress.com/2016/07/24/dependent-types-in-haskell-progress-report/
AFAICS, şu anda bunu yapmak için hiçbir şekilde. Bu yüzden GHC'yi bir günde bir sonlandırma denetleyicisine entegre etmeyi ve 'T' tam olarak bir tane hata kodu yapıcısı olduğunda 'x :: T' 'yi x = unsafeCoerce()' ye dönüştürebilir. : ~: 'yapar. Birinin indüksiyonla bir kanıt yazması gerekiyor, ama en azından çalışma zamanı cezası verilmiyor. – chi
Bir noktada, aslında bu tür şeyler için tasarlanan bir dili kullanmak daha pratik olmalı ... –