Ben Nasıl emin sadece Arbitrary (Set Int)
örneği herhangi GHC uzantıları gerek kalmadan kullanılır yapabilirsiniz Data.Set
için test paketi sadece gerçekten a ~ Int
için makul Arbitrary Set a
tanımlar fakat GHC özel ~
onasıl Haskell 98 belirli bir tip uygulama için bir örneğini tanımlayabiliriz?
instance Enum a => Arbitrary (Set a)
kullanır önlemek için fark ? GHC okunur kodunda, Kullanayım ya FlexibleInstances
veya GADTs
ve sonra ya
instance Arbitrary (Set Int)
veya
instance a ~ Int => Arbitrary (Set a)
: kolaylık olması açısından,
Int
bir örnek olduğu ihtiyacım herhangi sınıfları ileIsInt
sınıf kısıtlayabilir. Yani GHC IsInt 'bir ~ Int' a'' dan çıkarmak olmaz vardır. Bu bazen can sıkıcı ek tür ek açıklamaları gerektirebilir. Bunun sadece H98 (ya da H2010) içinde olmasına yardımcı olabileceğini sanmıyorum. –@DanielWagner, evet, ghc yaklaşımına kesinlikle gerisinde. Eşitlik kısıtlamaları standartlaştırılmışsa, kesinlikle onları tercih ederim. Ama 'containers' genellikle mümkün olduğunca "taşınabilir" olarak olmaya çalışır, bu yüzden ben bir uzantısı olmadan gerekenleri yapabiliyorsa, yaparım. ~: Int' IsInt a => Int 'Çeşidi şey almak için: ~ – dfeuer
@DanielWagner, ben' refl :: Int bu uygulama ki size 'fromIntF' uygulayabilir, GHC en uyumlu olduğunu belirterek, aynı zamanda değer olduğunu düşünüyorum : a. Gerçekten de bu, dile nasıl uyduğuna bakılmaksızın, benzer bir eşitlik türü için çalışacaktır. – dfeuer