definieren Ich betrachte die pipes Bibliothek Quellcode und zum Beispiel in den Core module Ich verstehe nicht, warum der Autor ganz über den Platz ist das Muster der Definition von Funktionen wie die Verwendung von:warum Rohre innere Funktionen
runEffect = go
where
go p = ...
Oder:
pull = go
where
go a' = ...
Oder:
reflect = go
where
go p = ...
I Ist das ein Trick, um einige Optimierungen zu ermöglichen? Ich finde es hässlich, wenn es ein Optimierungstrick ist, möchte ich wirklich, dass der Compiler es ohne solche Dinge machen könnte. Aber vielleicht gibt es noch einen anderen Grund?
'pipes' ist eine kleine Bibliothek mit zusammensetzbaren Abstraktionen, mit denen viele komplexe Logiken erstellt werden können. Daher lohnt es sich natürlich, dass sich die Optimierung auf der Ebene der Core-Bibliothek auszahlt. Es hat auch nichttriviale Umschreibungsregeln. Im Gegensatz dazu müssen wir uns im normalen Produktionscode nicht mit manuellen Wrapper beschäftigen. GHC macht das normalerweise gut. –
Danke. Dank deiner Keywords "voll angewendet" bin ich nun auf folgendes gestoßen: http://stackoverflow.com/questions/11690146/why-does-gh-c-consider-the-lhs-syntaktisch-wenn-inlining was ich hoffentlich teilen werde ein bisschen mehr Licht auf das Thema für mich. Es ist ziemlich enttäuschend, wenn man all die andere Magie sieht, die Haskell erreichen kann. –
Wenn es so einfach ist, eine rekursive Funktion zu "inline" zu machen, warum macht GHC diesen Trick nicht selbst? – mb14