Generische GHC-Rewrite-Regeln

9

Ich habe kürzlich alterF function zu Data.Map hinzugefügt, was eine umgedrehte Form von Control.Lens.At.at ist.

%Vor%

alterF wurde entwickelt, um selbst für sehr "schwere" Funktoren wie [] eine angemessene Leistung bieten zu können, selbst wenn die Tasten ziemlich teuer zu vergleichen sind. Leider ist es etwas langsamer, als man es bei einem leichteren Funktor und billigeren Schlüsseln wünschen könnte.

Um dies zu verbessern, habe ich die GHC Rewrite-Regeln für die Funktionen Const b und Identity hinzugefügt und sie in einfachere Implementierungen umgeschrieben, die normalerweise schneller sind. Ich füge noch eine weitere hinzu, für (,) b . Ich habe einen für (,) b hinzugefügt und ihn dann entfernt. Siehe das Update unten.

Allerdings bin ich ein wenig genervt von der Tatsache, dass ich eine bestimmte Regel für (,) b brauche, weil es viele andere Funktoren gibt, die demselben Muster folgen. Insbesondere wenn ein Funktor definiert ist

%Vor%

wo keiner der e_k % a erwähnt, sollte ich in der Lage sein, es auf die gleiche Weise neu zu schreiben. Gibt es eine Möglichkeit, dies mit GHC RULES zu tun? Oder muss ich auf ein allgemeineres Rewriting-System warten?

Aktualisieren

Leider wurde mir klar, dass meine Rewrite-Regel für Paare ungültig war (sie war zu streng), und das Reparieren war viel weniger vorteilhaft. Also habe ich diese Regel vorerst verschrottet. Ich denke, die allgemeine Frage bleibt jedoch interessant.

    
dfeuer 22.05.2016, 22:15
quelle

0 Antworten