In Kapitel 19 von Real World Haskell scheitern viele Beispiele jetzt an der Änderung von Control.Exception
.
Das lässt mich denken, dass einige der Dinge in diesem Buch tatsächlich veraltet sind und es nicht mehr wert sind, studiert zu werden, schließlich sind es 6 Jahre. Meine einzige andere Referenz ist Learn You a Haskell For Great Good , obwohl es ein großartiges Buch ist, ist es im Vergleich zu RWH viel grundlegender.
Kann jemand, der das Buch schon einmal gelesen hat, bitte einen Rat geben, welche Teile davon nicht mehr relevant sind? Insbesondere die Kapitel in der zweiten Hälfte des Buches, zum Beispiel Software-Transaktionsspeicher, gleichzeitige Programmierung, Socket-Programmierung usw.
BEARBEITEN: Hier geht es um die Ausgabe des Buches, das im Dezember 2008 veröffentlicht wurde. Dies ist die einzige bekannte Ausgabe ab heute (November 2017).
quelle
Monad
ist das eine Unterklasse vonApplicative
.Antworten:
Hauptausgabe von RWH
Es ist alt. RWH wurde zu einem Zeitpunkt geschrieben, als Version 6.8 von GHC verwendet wurde. 6.8 verwendete Basisversion 3.0.xx 6.10.1 verwendete bereits 4.0.0.0, was viele Änderungen einführte . Und das ist nur der Sprung von 6.8 auf 6.10. Die aktuelle Version von GHC ist 7.10. Monaden wurden geändert. Es gibt derzeit eine Diskussion ,
return
ausMonad
der entfernt werden mussMonad
Instanz in Real World Haskell wirklich synchron mit der realen Welt aus sein wird.Trotzdem ist es immer noch eine nützliche Ressource für allgemeine Richtlinien. Beachten Sie jedoch, dass sich viele Bibliotheken seit ihrer Veröffentlichung geändert haben.
Was Sie beim Lesen von RWH mitlesen können, ist "Was ich wünschte, ich wüsste es, wenn ich Haskell lerne" von Stephen Diehl . Es bietet zusätzliche Einblicke, aber beachten Sie, dass einige Abschnitte nicht wirklich für Neulinge geeignet sind.
Allgemeine Bemerkungen
Anmerkungen zu den Kapiteln
Dies ist nur ein kurzer Überblick über einige Dinge, die mir beim Lesen von RWH aufgefallen sind. Es ist wahrscheinlich unvollständig.
Kapitel 2. Typen und Funktionen im Vergleich zum FTP
Seit GHC 7.10 .
Die Art von
null
wurde aufgrund des Vorschlags für faltbare Traversable geändert . Viele weitere Funktionen wie , und viele andere , die bisher nur definiert wurden in die wurden mit allgemeineren ersetztfoldr
foldl
[a]
Prelude
Foldable t => t a
Varianten.Kapitel 11. Prüfung und Qualitätssicherung
Seit Haskell-Plattform 2010 oder Ende 2008.
Obwohl dies in einer Fußnote erwähnt wird , hat sich die QuickCheck-Bibliothek in vielerlei Hinsicht von Version 1 auf Version 2 geändert. Zum Beispiel wird
generate
jetztGen a
anstelle von verwendetStdGen
, und die Funktionalität der altengenerate
ist inTest.QuickCheck.Gen.unGen
.Überprüfen Sie im Zweifelsfall die Dokumentation .
Kapitel 14. Monaden & Kapitel 15. Programmieren mit Monaden
Code knacken:
Applicative m => Monad m
Ab GHC 7.10
Applicative
ist jetzt eine Superklasse vonMonad
, etwas, das 2007 nicht geplant war.Siehe 7.8.1 Versionshinweise .
Die
State
/Writer
/Reader
MonadenIn der Will die echte Staatsmonade bitte aufstehen? Abschnitt, behaupten die Autoren
Das stimmt nicht mehr, denn
State
und seine Freunde werden jetzt über implementiertSie werden also durch ihren Monadentransformator definiert.
Kapitel 17. Schnittstelle zu C: der FFI
Das gesamte Kapitel ist in Ordnung, aber wie man in den Kommentaren oder auf Yuras Shumovichs Blog lesen kann , ist der Finalizer-Teil im folgenden Code eine schlechte Praxis:
Wie
malloc()
beifree()
,new
mitdelete
,allocate
mitdeallocate
sollte immer die richtige Funktion verwendet werden.Wenn eine Fremdfunktion Speicher zuweist, sollten Sie auch die zugehörige Freigabefunktion verwenden.
Kapitel 19. Fehlerbehandlung
Die Fehlerbehandlung wurde vollständig von 6.8 auf 6.10 geändert, aber das haben Sie bereits bemerkt. Lesen Sie besser die Dokumentation .
Kapitel 22. Erweitertes Beispiel: Web Client-Programmierung
Einige der Beispiele scheinen gebrochen zu sein. Es sind auch andere HTTP-Bibliotheken verfügbar.
Kapitel 25. Profilerstellung und Optimierung
Die allgemeinen Profilerstellungstechniken sind immer noch dieselben, und das Beispiel (siehe unten) ist eine hervorragende Fallstudie für Probleme, die in Ihrem Programm auftreten können. Bei RWH fehlt jedoch die Multithread-Profilerstellung, z. B. über ThreadScope. Soweit ich weiß, ist Lazy IO nicht im gesamten Buch betroffen.
Kapitel 24 & Kapitel 28 (Gleichzeitige und parallele Programmierung & STM)
Während Kapitel 24. Concurrent- und Multicore-Programmierung und Kapitel 28. Software-Transaktionsspeicher immer noch relevant sind, ist Simon Marlows Buch Parallel and Concurrent Programming in Haskell ausschließlich auf Concurrent- und Parallel-Programmierung und ist ziemlich neu (2013). GPU-Programmierung und Repa fehlen in RWH vollständig.
Kapitel 26. Erweitertes Bibliotheksdesign: Erstellen eines Bloom-Filters
Wie in den anderen Kapiteln sind die allgemeinen Richtlinien der Designbibliothek immer noch gut geschrieben und relevant. Aufgrund einiger Änderungen (?)
ST
Kann das Ergebnis jedoch nicht mehr kompiliert werden.Kapitel 27. Netzwerkprogrammierung
Es ist immer noch meistens auf dem neuesten Stand. Schließlich ändert sich die Netzwerkprogrammierung nicht so leicht. Der Code verwendet jedoch veraltete Funktionen
bindSocket
undsClose
, die durchbind
undclose
(vorzugsweise durch qualifizierten Import) ersetzt werden sollten. Denken Sie daran, dass es sich um eine sehr niedrige Bibliothek handelt. Möglicherweise möchten Sie eine spezialisiertere Bibliothek auf hoher Ebene verwenden.Anhang A. Installieren von GHC- und Haskell-Bibliotheken
GHC 6.8 war die letzte Version vor der Einführung der Haskell-Plattform. Im Anhang erfahren Sie daher, wie Sie GHC und Cabal von Hand erhalten. Tu es nicht. Folgen Sie stattdessen den Anweisungen auf der Download-Seite von haskell.org .
Außerdem enthält der Anhang keine Informationen zu Cabal-Sandkästen, die in Cabal 1.18 eingeführt wurden und Sie von der Abhängigkeitshölle befreien . Und
stack
fehlt natürlich komplett.Fehlender Inhalt
Einige Themen werden in RWH überhaupt nicht behandelt. Dies umfasst Streaming-Bibliotheken wie Pipes und Conduits sowie Objektive .
Es gibt verschiedene Ressourcen für diese Themen, aber hier sind einige Links zu Einführungen, um Ihnen eine Vorstellung davon zu geben, worum es geht. Wenn Sie Vektoren verwenden möchten, verwenden Sie das
vectors
Paket.Control.Applicative
RWH verwendet
Control.Applicative
's(<$>)
an mehreren Stellen, erklärt es aber überhaupt nichtControl.Applicative
. LYAH und die Typeclassopedia enthalten Abschnitte überApplicative
. Da diesApplicative
eine Oberklasse vonMonad
(siehe oben) ist, wird empfohlen, diese Klasse auswendig zu lernen.Darüber hinaus mehrere Betreiber von
Control.Applicative
(und die selbst typeclass) sind jetzt Teil derPrelude
, so stellen Sie sicher, dass Ihre Mitarbeiter nicht mit tun kollidieren<$>
,<*>
und andere.Linsen
lens
)Streaming-Bibliotheken
conduit
)pipes
, impipes
Paket enthalten)Werkzeuge
stack
, ein plattformübergreifendes Programm zur Entwicklung von Haskell-Projektenghc-mod
, ein Backend für Vim, Emacs, Sublime Text und andere EditorenNeue / fehlende Spracherweiterungen und GHC-Änderungen
:i ($)
hat sich enorm verändert)-XTypeInType
-XDataKinds
-XGADT
-XRankNTypes
-XGenericNewtypeDeriving
-XDeriveFunctor
quelle