2012-01-26 14 views
8

, ben, Haskell yalnızca yani örnek kafaları maçları "özelliği" girmekHaskell'in herhangi bir dil uzantısı veya dil torunu var mıdır, özellikle de örnek olarak ifade etmenin yararı? Zaman zaman

instance (a ~ NewDataTyp b) => C a 

şimdi olacak bir hatadır Programda C başka örneği beyanı yazarken yani, herhangi bir türünü maç olacak, içeriği çakışması nedeniyle a ~ NewDataTyp b bağlamından dolayı çakışamaz. Bazen, üstesinden gelmek için çok çaba harcanır; Bu sınırlamayı önlemek için yüzlerce satır kod yeniden yapılandırmak zorunda kaldım.

Anlamlılık için daha yüksek önceliğe sahip herhangi bir dil uzantısı veya alt yazı dili (Curry? Agda?) Var mı? Bu muhtemelen (a) typeclass dünyasının açıklığını (b) polinom zamanın yazımını kestirebilir.

düzenlemek - Söz ilgilenenler için bu sayfada, ilgi olabilir: Ne olursa olsun için http://www.haskell.org/haskellwiki/Future_of_Haskell

+2

yol açar (http://stackoverflow.com/questions/8728596/explicitly-import-instances/8731340#8731340). Bildiğim kadarıyla, bu sorundan kurtulmanın tek yolu, tam bağımlı tipler eklemek ve 'Set''in türünde kullanılan 'Ord' örneğini içermektir. – ehird

+1

HM tipi kontrol (iki kat) üstel olduğundan, Haskell tipi kontrol polinom değildir. – augustss

+2

Bukalemun böyle bir uzantısı olup olmadığından emin değilim. Kısıtlayıcı çözücünün geri izlemeyi gerektirir, ancak çalışmaması için bir neden göremiyorum. – augustss

cevap

1

Scala sadece yazdıklarını daha çok veya daha az edebi çeviri kabul eder. Ne kadar kullanışlı olduğundan emin değilim. [Beklediğinizden daha fazla sorunlara] açık dünya varsayımı Çıkarma

trait C[T] 
case class NewDataType[T]() 

implicit def letItBeInjectiveWhyNot[K[_],T]: K[T] =:= K[T] 

implicit def cIsh[A,S](implicit ev: A =:= NewDataType[S]): C[A] 
implicit def another: C[Int] 

implicitly[C[NewDataType[String]]] 
implicitly[C[Int]]