hsreduce/hsreduce.org
Daniel Krueger 8328fff13f Added statistics
- number of total calls of passes
- successful number of calls of passes
- total number of bytes removed per pass (still buggy)
2020-07-16 20:01:52 +02:00

4.7 KiB

Test-Cases

14827

das originale Repo gibt es leider nicht mehr

String ordentlich reduzieren

8763

was ist da der richtige Test-Case?

15164 / parser-calledarity

lives now in /home/daniel/workspace/hsreduce-test-cases/parser-calledarityanalysis

best thing is to probably binary search reduce the string

16979

containers

warum hört das bei 9000kb auf?

irgendwie kann es da nicht die Exports reduzieren?

Mergen: Testfall aus Mark Karpovs Mini Repo erstellen

protocol-buffers

Abhängigkeit "runterladen" vor dem Mergen

pandoc

geht noch nicht zu mergen

15176

I think there was something hard about reproducing that repo?

15753

GHC prints type operator wrong :)

18018

17722

17684

16127

17516

Mergen / hsAllInOne.hs

operators richtig behandeln

[A] default declarations

[C] `isOperator`: use operator syntax from Haskell2010 report

Reduction Passes

Function Inlining

ab wann lohnt sich Inlining?

Inlining, selbst wenn shadowings entstehen

Template haskell

[ ] TH: splices dumpen, gedumpte einfügen in HS-Datei und dann weiter reduzieren

On the Project Level

[ ] Module mergen

[ ] Dependencies vendorn: nicht mehr als separate Dependency

[ ] cabal file: dependencies entfernen

Bangtypes: Bang weg

Typen vereinfachen / Typaliase

[ ] unnötige Typaliase weg

[ ] Typ mit 1 Konstruktor: kann gleich Typalias sein, oder?

[ ] Typaliase reduzieren / minimieren

[ ] Typaliase inlinen

[ ] deriving-Clause minimieren

[ ] Produkttypen minimieren

forall

Beta-Reduktion anwenden

polymorphe Funktion: Typen konkretisieren (vllt. von Verwendungen inferieren?)

[ ] Variablen aus forall entfernen

[x] forall weg

Kontexte / Constraints

[ ] Variablen aus Kontext entfernen

[x] Kontexte / Constraints entfernen

Typsignaturen vereinfachen

Unit / ()

[ ] Typparameter durch Unit / () ersetzen + Benutzungen löschen
[x] Typparameter durch Unit / () ersetzen

Parameter

[ ] unbenutzte Parameter zu `_` abändern oder gleich löschen

[ ] -Wunused-params benutzen

`_` kommt anstatt Parameter vor

[ ] Parameter entfernen
[ ] aus Signatur löschen
[ ] aus Matches löschen
[ ] aus Verwendungen löschen

Remove Unused

Decls

[ ] iwie das Filtern von Decls schöner machen, einmal filter und für alle Decls kurz den Check implementieren oder iwie "Inversion of Control" hinkriegen
GADTs
[ ] Typvariablen durch () ersetzen
[x] forall weg
[x] Typkontext / Constraints weg
[x] Datendeklarationen
[x] unbenutzte Konstruktoren löschen
[x] Data Decls ohne Konstruktoren löschen
[x] unbenutzte Function Bindings
Schwierigkeiten: wenn die Signatur nicht mitgelöscht wird, macht es keinen Sinn, nur das FunBind zu löschen
wegen der nicht-funktionierenden Löschung sind dann andere decls noch lebendig
[x] sonstige Decls versuchen zu entfernen

Imports

[ ] Anzahl importierter Funktionen minimieren
sollte mit "-Wunused-imports" nicht so schwer sein, das kann es so fein erkennen
explizites import all
[ ] Konvertieren zu explizitem import all
[ ] alle imports qualified machen
[x] unused imports entfernen

Exports

Handling von impliziten export all
[x] Konvertieren zu explizitem export all
[x] unused exports entfernen
Beobachtung: alle Exports entfernen ist nicht beste Strategie, siehe #14270

Pragmas

die befinden sich bei SigD!
[ ] UNPACK Pragmas
[ ] INLINE Pragmas
[ ] other Pragmas
[x] LANGUAGE Pragmas

Misc

[ ] Datei formattieren

[ ] case-Ausdrücke minimieren

[ ] Matches entfernen und ein `_ -> …` Match einführen

[ ] arithmetische, boolesche Ausdrücke vereinfachen

Normalization

[ ] renaming functions

[ ] renaming parameters

[ ] renaming constants

[ ] renaming data declarations / types

Stubbing

[ ] Matches mit RHS == "undefined" weg

[ ] LGRHS: guards einzeln entfernen

[x] Matches mit GRHS == "undefined" entfernen

[x] LGRHS: guards entfernen

[x] HsExpr: place undefined into every possible HsExpr

[x] HsType durch () ersetzen

[x] where-Klauseln löschen

[x] GADTs: forall und Kontext löschen

[x] Case-Expressions mit nur einem Fall

[x] if-then-else mit einem Fall == "undefined"

Misc

MUST

[ ] ExceptT benutzen

[ ] Testen mit QuickCheck, hedgehog, tasty, usw.

[ ] Structureshrink Zum Laufen Bringen

[ ] Automatisiert Test-Cases Hinzufügen + Laufen Lassen Können

wahrsch. am besten repo dazu einrichten

[ ] #14270 mit git repo reproduzieren

Refactoring

error handling für das Parsing

error handling in GHC Monad