Bu, Inconsistent Eq and Ord instances? numaralı sorudur.Haskell: Standart kütüphaneler, Eq ve Ord uyumlu olduğunu varsayıyor mu?
soru esasen vardır: Bir tür Eq
ve Ord
örneklerini bildirirken, kimse bu compare x y
döner EQ
sağlamalıdır ve ancak x == y
döner True
olur? Bu varsayımı bozan örnekler oluşturmak tehlikeli midir? Bir kişinin sahip olabileceği doğal bir yasa gibi görünüyor, ama Prelude'de açıkça belirtilmemiş gibi görünüyor. monad veya functor yasaları.
Temel cevap şuydu: Kütüphaneler bu kanunun sahip olduğunu varsayabilirler, çünkü bunu yapmak biraz tehlikelidir.
Sorum, şimdi, geçerli: standart kütüphaneler herhangi birini (özellikle Set
veya Map
) bu varsayımı yapmak? Sadece GHC ile birlikte verilen standart kütüphanelere güvenmekteyim diye, uyumsuz olan Eq
ve Ord
türlerine sahip olmak tehlikeli midir? (büyük-liste sorular hala kabul edilebilir olsaydı, soran olacaktır: Yaygın olarak kullanılan kütüphaneler bu yasayı varsayıyorum hangisi?)
Edit. Kullanım durumum orijinal soruna benzer. Özel bir örneğim var, Eq
, biraz kullanıyorum. Ben Ord
istediğim tek nedeni, onu bir Map
etki alanı olarak kullanabilmem; Özel siparişi umursamıyorum ve bunu kesinlikle kodda kullanmaz. Yani, türetilmiş örneği Ord
kullanabilirsem, o zaman hayatım daha kolay olacak ve benim kodum daha temiz olacak. (
class (Eq a) => Ord a where
...
Yani ihlali niteliğinde olacağı için
x == y = compare x y == EQ
x /= y = compare x y /= EQ
ihlal etmek gibi yanlış olur:
"hangi sıklıkla kullanılmış kütüphaneler bu kanunu kabul ediyorlar "--- insanların beyinleri? –
Gerçekten de, daha iyi bir soru ((b) = (b == EQ ile karşılaştır) bir anlam ifade eder. – Ingo
Bu sadece boş bir merak mıdır, yoksa ikisini değiştirmek için mantıklı olduğunu düşündüğünüz bir kullanım durumunuz var mı? Eğer ikincisiyse, sundugunu görmeyi çok isterim (cidden, şimdi merak ediyorum, ve iyi bir kullanım durumunun kendimi düşünemiyorum ....) – jamshidh