Ich habe die Definition für und im Internet gefunden, aber ich konnte die tatsächliche Implementierung von und nicht finden. Ich habe nach einer Art Präludium-Haskell-Datei auf meinem Computer gesucht, aber es gab nichts zurück, was in einem Texteditor geöffnet werden konnte.Wie kann ich den Implementierungscode für "und" sehen?
Antwort
Sie Hoogle verwenden können, für Haskell-Funktionen zu suchen, etwa so:
http://www.haskell.org/hoogle/?hoogle=and
Die Funktion Links gelangen Sie in die Bibliothek Modul, in dem die Funktion definiert wurde, und in diesem Fall ist die Verbindung für and
nimmt uns hier:
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:and
Sie dann auf den Source
Link auf der rechten Seite des Funktionsnamens und es nehmen s du zur Quelle dieser Funktion. Für den Fall von and
verbindet es uns hier:
http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-List.html#and
and :: [Bool] -> Bool
or :: [Bool] -> Bool
#ifdef USE_REPORT_PRELUDE
and = foldr (&&) True
or = foldr (||) False
#else
and [] = True
and (x:xs) = x && and xs
or [] = False
or (x:xs) = x || or xs
#endif
Sie werden sehen, dass and
zwei Definitionen tatsächlich hat. Eine ist die Standard-Prelude-Definition, die nur aktiviert wird, wenn Sie mit dem USE_REPORT_PRELUDE
-Flag kompilieren, und die andere ist die Definition, mit der das Prelude normalerweise kompiliert wird, die normalerweise optimiert ist.
Blick auf http://www.haskell.org/onlinereport/standard-prelude.html
and
als foldr (&&) True
definiert.
Sie können nicht erwarten, den Quellcode in Ihrer lokalen Distribution von Haskell zu finden - das ist wahrscheinlich Haskell Platform. Gehen Sie stattdessen zu Hoogle und suchen Sie nach der Funktion. Eine Möglichkeit, die Sie haben möchten, ist, nach dem Namen and
zu suchen, zu seinem Haddock zu gehen und dann auf "Quelle" zu klicken.
In Hoogle können Sie auch nach Typ Signatur suchen, dh. [Bool] -> Bool
was Sie wahrscheinlich oft tun werden.
- 1. Wie kann ich den Ausführungsplan sehen?
- 2. Fmap und Karte, kann ich den Unterschied nicht sehen
- 3. Wie kann ich den Ausnahmeaufruf-Stack in SharePoint 2010 sehen?
- 4. Wie kann ich den Ausführungsplan für gespeicherte Prozeduren und Trigger in SQL Server sehen?
- 5. Wie kann ich den vollständigen Kostenstellen-Stack in GHC sehen?
- 6. Wie kann ich den vollständigen StackTrace in Maven sehen?
- 7. Wie kann ich den starken Namen meiner Baugruppe sehen?
- 8. Wie kann ich den spezifischen Wert von sql_mode sehen?
- 9. Wie kann ich die Eingaben für eine LINQ-Abfrage sehen?
- 10. Wie kann ich Tags für alle Benutzer einer Modellinstanz sehen?
- 11. Cache-Miss? Wie kann ich das sehen?
- 12. Kann ich den TFS-Dateiverlauf mit Etiketten sehen?
- 13. Wo kann ich den Quellcode für JavaScript-Methoden wie hasOwnProperty in Node.js sehen?
- 14. Codeignender Online Besucher Ich kann sehen, wie?
- 15. Endlosschleife kann ich nicht sehen
- 16. Wie kann ich dies entschlüsseln, damit ich es sehen kann
- 17. Wo kann ich den Quellcode des Sun JDK sehen?
- 18. Kann ich einen BufferedReader sehen?
- 19. Wie kann ich den für einen Template-Typ-Parameter abgeleiteten Typ sehen?
- 20. mongodb Datenbankliste ist leer, aber ich kann den Inhalt sehen
- 21. Warum kann ich keine Ausgabe in den zwei divs sehen?
- 22. Wie kann ich den Code sehen, den HotSpot nach der Optimierung generiert?
- 23. Wo kann ich den Quellcode von Glassfish im Internet sehen?
- 24. Wie kann ich eine ASPX-Seite für eine bestimmte Zeit sehen und dann auf andere Seite
- 25. Wie kann ich den Commit sha sehen, wenn ich git grep benutze?
- 26. Ich kann keine Verbindungszeichenfolge für Azure WebSite sehen. MySQL db
- 27. Python aufzählen - was kann ich nicht sehen?
- 28. Wie automatisch zu generieren (und den Code für sehen) lesen und Show in Haskell
- 29. Wie kann ich einen Wert von boost :: any sehen, wenn ich den Typ mit gdb kenne
- 30. Wie kann ich die Kern-Android-Klassen sehen?
Neugier: Was ist der Sinn der beiden Definitionen? –
@ChrisTaylor Ich habe keine Ahnung. Ich gehe einfach davon aus, dass die Leute, die die Basisbibliotheken optimieren, einen guten Grund haben, all diese zusätzlichen Zeichen einzugeben. –
Lustig, es gibt ein RULES-Pragma nach diesem Code, der ihm im Wesentlichen sagt, dass er vorgibt, die USE_REPORT_PRELUDE-Version für das Build/Foldr-Neuschreiben zu verwenden –