Haskell - Definition kommutativer Funktionen: Wie man tatsächliche Argumente durch Kombination und nicht durch Permutation betrachtet

Elad Shtiegmann

Ich möchte eine Funktion definieren, die gleich typisierte Argumente berücksichtigt, ohne deren Reihenfolge zu berücksichtigen. Beispielsweise:

weirdCommutative :: Int -> Int -> Int
weirdCommutative 0 1 = 999
weirdCommutative x y = x + y

Ich möchte, dass diese Funktion tatsächlich kommutativ ist. Eine Option ist das Hinzufügen des Musters:

weirdCommutative 1 0 = 999

oder noch besser:

weirdCommutative 1 0 = weirdCommutative 0 1

Schauen wir uns nun den allgemeinen Fall an: Es kann mehr als zwei Argumente und / oder zwei Werte geben, die ohne Reihenfolge berücksichtigt werden müssen. Daher wird es schwierig, alle möglichen Fälle zu berücksichtigen.

Kennt jemand eine saubere, natürliche Art, kommutative Funktionen in Haskell zu definieren?

Ich möchte betonen, dass die Lösung, nach der ich suche, allgemein ist und nichts über den Typ (oder dessen Dekonstruktions-Typensatz) annehmen kann, außer dass Werte mit verglichen werden können ==(was bedeutet, dass der Typ in der EqTypklasse, aber nicht unbedingt in der OrdTypklasse ist ).

András Kovács

Es gibt tatsächlich ein Paket , das eine Monade und ein Gerüst zum Definieren und Verwenden von kommutativen Funktionen enthält. Siehe auch diesen Blog-Beitrag.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel