Ich denke, dass nubBy
die binäre boolesche Operation eine Äquivalenzbeziehung erfordert.
Dies ist in etwa im gleichen Geist von sortBy
erfordert eine Vorbestellung Beziehung (reflexive & transitive). Wenn diese Anforderung ungültig ist, werden Quicksort und Mergesort zu nicht äquivalenten Algorithmen. Die Absicht des Haskell-Berichts besteht stattdessen darin, einer Implementierung zu erlauben, einen von ihnen (oder einen anderen korrekten Sortieralgorithmus) zu verwenden.
Ebenso, wenn der nubBy
Vergleich zulässig ist eine Nicht-Äquivalenz, ist die Implementierung unnötigerweise gezwungen, genau die Referenz Prelude
Algorithmus zu verwenden, die Verwendung einer effizienteren Alternative zu verhindern.
Um ehrlich zu sein, sind die genauen Anforderungen an die Betreiber, die an die "... Von" weitergegeben werden, nicht immer offensichtlich. Zum Beispiel scheint die Dokumentation von sortBy Korrektheit nur für totale Ordnungen zu garantieren, obwohl ich erwarte, dass die tatsächliche Implementierung auch für eine größere Klasse von Ordnungen funktioniert, vorausgesetzt, das Ergebnis wird bis zu der durch die Ordnung induzierten Äquivalenz interpretiert.
Die Dokumentation für nubBy besagt einfach, dass das erste Argument ein "benutzerdefiniertes Gleichheitsprädikat" ist. Es ist also nur für Gleichheit und nicht für beliebige Äquivalenzen garantiert.
aber mein Gefühl ist, dass, wenn ihre Umsetzung für die Gleichstellung funktioniert, ist es hat auch (up-to, natürlich gelesen wird das Ergebnis zur Verfügung gestellt) für Äquivalenzen zu arbeiten. Dies könnte tatsächlich beweisbar sein, indem die "free theorem", die mit dem nubBy
-Typ assoziiert ist, ausgenutzt wird. Mein Mangel an Fachkenntnis mit parametricity verrät mich hier :)
Das an "nubBy" übergebene 'eq' sollte kommutativ sein. – Cirdec