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 Eq
Typklasse, aber nicht unbedingt in der Ord
Typklasse ist ).
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.
Lass mich ein paar Worte sagen