Ich habe eine Funktion, die Daten nimmt und entweder die gleichen Daten oder eine leicht modifizierte Version zurückgibt.Effizienz der Gleichheit in Haskell
Ich möchte mein Programm eine Sache machen lassen, wenn es sich geändert hat oder eine andere Sache, wenn es sich nicht geändert hat.
Zuvor habe ich ein Paar (Bool,Object)
zurückgegeben und verwendet, um zu überprüfen, ob es sich geändert hat. In letzter Zeit fiel mir ein, dass ich den Code vereinfachen könnte, indem ich einfach das Objekt zurücksende und die Gleichheit mit ==
überprüfe.
Aber dann erkannte ich, dass Haskell nicht zwischen tiefer Gleichheitsprüfung und "Objektidentität" (d. H. Zeigergleichheit) unterscheidet. Wie kann ich also wissen, ob die Verwendung von ==
effizient ist oder nicht? Sollte ich es aus Effizienzgründen vermeiden oder gibt es Fälle, in denen ich mich darauf verlassen kann, dass der Compiler herausfindet, dass er keine tiefe Gleichheitsprüfung durchführen muss?
Normalerweise wäre ich nicht allzu besorgt über die Effizienz beim Schreiben eines ersten Programms, aber dies betrifft die Schnittstelle zu meinem Modul, also möchte ich es richtig machen, bevor zu viel Code geschrieben, und es scheint nicht wert zu sein Machen Sie das Programm viel weniger effizient, nur um ein kleines Stück Code. Außerdem möchte ich eine bessere Vorstellung davon bekommen, auf welche Art von Optimierungen ich mich verlassen kann.
Nur als eine Anmerkung, scheint dies ein besserer Fall für entweder ein "Entweder" Wert oder etwas Äquivalent, aber mehr semantische (z. B. "Data ChangeState a = Same a | Geändert a"). – Chuck
Keine schlechte Idee, bemerkt. – Steve