2016-04-11 27 views
4

String ve String ile True ürününü karşılaştırmayı denedim. Bir Bool bir String karşılaştırırken Eşitlik Türleri Nasıl Karşılaştırılır?

Idris> String == String 
Can't find implementation for Eq Type 

Sonra False bekleniyor.

Idris> String /= Bool 
Can't find implementation for Eq Type 

import eksik miyim?

cevap

6

Bu, Idris'da sahip olduğumuz parametricity'u kıracaksınız. Türlere eşleşme yapamayız. Ama bu örneğin Eq uygulama yazmak için gerekli olacaktır: Ayrıca

{- Doesn't work! 
eqNat : Type -> Bool 
eqNat Nat = True 
eqNat _ = False -} 

, tek türlerinde desen maç, bunlar çalıştırma süresi içinde ihtiyaç olacağını eğer. Şu anda derleme sırasında türler silinir.

+0

Derleyici/arabirim serbest terimler elde edebilmek için parametrik mi isteniyor? –

+1

Eğer A == B' A ve B harfleri normal formda ise ve kapalı bir evrene aitse, o zaman bunları eşitlik açısından kontrol edebilmek için parametrikliği kırmanıza gerek yoktur. Tüm "Tür" indüksiyon-özyineleme ve Gözlemsel Tip Teorisi gibi yaptıkları gibi bir tür jenerik programlama kullanarak. [Burada] (https://github.com/effectfully/random-stuff/blob/master/EqType.agda) bir koddur. Bununla birlikte, kurallı biçimde terimlerle işlem yapmak, özellikle de türler için açık kodlar sunan parametrik olmayan bir evreniniz olduğunda, çoğunlukla işe yaramaz. – user3237465