Skip to content

Latest commit

 

History

History
133 lines (133 loc) · 4.72 KB

hsreduce.org

File metadata and controls

133 lines (133 loc) · 4.72 KB

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