Erste Schritte mit Haskell


755

Seit einigen Tagen versuche ich, mich mit dem Paradigma der funktionalen Programmierung in Haskell zu beschäftigen. Ich habe dies getan, indem ich Tutorials gelesen und Screencasts angesehen habe, aber nichts scheint wirklich zu bleiben. Beim Erlernen verschiedener Imperativ- / OO-Sprachen (wie C, Java, PHP) waren Übungen ein guter Weg für mich. Aber da ich nicht wirklich weiß, wozu Haskell fähig ist und weil es viele neue Konzepte gibt, weiß ich nicht, wo ich anfangen soll.

Wie haben Sie Haskell gelernt? Was hat dich wirklich dazu gebracht, das Eis zu brechen? Auch irgendwelche guten Ideen für den Beginn von Übungen?


Antworten:


2476

Ich werde diesen Leitfaden nach Ihrem Können in Haskell bestellen, vom absoluten Anfänger bis zum Experten. Beachten Sie, dass dieser Vorgang viele Monate (Jahre?) Dauert und daher ziemlich lang ist.

Absoluter Anfänger

Erstens ist Haskell zu allem fähig, mit genügend Geschick. Es ist sehr schnell (meiner Erfahrung nach nur hinter C und C ++) und kann für alles verwendet werden, von Simulationen bis hin zu Servern, Guis und Webanwendungen.

Es gibt jedoch einige Probleme, die für einen Anfänger in Haskell einfacher zu schreiben sind als andere. Mathematische Probleme und Listenprozessprogramme sind dafür gute Kandidaten, da sie nur die grundlegendsten Kenntnisse von Haskell erfordern, um schreiben zu können.

Erstens sind einige gute Anleitungen zum Erlernen der Grundlagen von Haskell das Happy Learn Haskell-Tutorial und die ersten 6 Kapitel , in denen Sie ein Haskell lernen . Während Sie diese lesen, ist es eine sehr gute Idee, auch einfache Probleme mit dem zu lösen, was Sie wissen.

Weitere zwei gute Ressourcen sind die Haskell-Programmierung nach ersten Prinzipien und die Programmierung in Haskell . Beide enthalten Übungen für jedes Kapitel, sodass Sie kleine, einfache Probleme haben, die mit den auf den letzten Seiten erlernten übereinstimmen.

Eine gute Liste von Problemen, die Sie ausprobieren sollten, ist die Seite mit den Problemen mit haskell 99 . Diese beginnen sehr einfach und werden im weiteren Verlauf schwieriger. Es ist eine sehr gute Übung, viele davon zu machen, da Sie damit Ihre Fähigkeiten in Rekursion und Funktionen höherer Ordnung üben können. Ich würde empfehlen, alle Probleme zu überspringen, die Zufälligkeit erfordern, da dies in Haskell etwas schwieriger ist. Überprüfen Sie diese SO-Frage, falls Sie Ihre Lösungen mit QuickCheck testen möchten (siehe Zwischenstufe unten).

Sobald Sie einige davon erledigt haben, können Sie einige der Project Euler- Probleme lösen. Diese sind danach sortiert, wie viele Personen sie abgeschlossen haben, was ein ziemlich guter Hinweis auf Schwierigkeiten ist. Diese testen Ihre Logik und Haskell mehr als die vorherigen Probleme, aber Sie sollten immer noch in der Lage sein, die ersten paar zu tun. Ein großer Vorteil von Haskell bei diesen Problemen ist, dass die Größe von Ganzzahlen nicht begrenzt ist. Um einige dieser Probleme zu lösen, ist es hilfreich, die Kapitel 7 und 8 gelesen zu haben, in denen Sie auch ein Haskell lernen.

Anfänger

Danach sollten Sie die Rekursion und Funktionen höherer Ordnung ziemlich gut im Griff haben, also wäre es ein guter Zeitpunkt, um weitere Probleme in der realen Welt zu lösen. Ein sehr guter Ausgangspunkt ist Real World Haskell (Online-Buch, Sie können auch eine Hardcopy kaufen). Ich fand die ersten Kapitel zu schnell zu schnell eingeführt für jemanden, der noch nie eine funktionale Programmierung / Rekursion durchgeführt hat. Mit der Übung, die Sie bei den vorherigen Problemen gehabt hätten, sollten Sie sie jedoch vollkommen verständlich finden.

Das Durcharbeiten der Probleme in diesem Buch ist eine großartige Möglichkeit, um zu lernen, wie man Abstraktionen verwaltet und wiederverwendbare Komponenten in Haskell erstellt. Dies ist wichtig für Benutzer, die an objektorientierte (oo) Programmierung gewöhnt sind, da die normalen oo-Abstraktionsmethoden (oo-Klassen) in Haskell nicht vorkommen (Haskell verfügt über Typklassen, sie unterscheiden sich jedoch stark von oo-Klassen, eher wie oo-Schnittstellen ). Ich halte es nicht für eine gute Idee, Kapitel zu überspringen, da jedes eine Menge neuer Ideen einführt, die in späteren Kapiteln verwendet werden.

Nach einer Weile gelangen Sie zu Kapitel 14, dem Kapitel der gefürchteten Monaden (dum dum dummmm). Fast jeder, der Haskell lernt, hat Probleme, Monaden zu verstehen, da das Konzept so abstrakt ist. Ich kann mir kein Konzept in einer anderen Sprache vorstellen, das so abstrakt ist wie Monaden in der funktionalen Programmierung. Mit Monaden können viele Ideen (z. B. E / A-Operationen, fehlgeschlagene Berechnungen, Analyse usw.) unter einer Idee zusammengefasst werden. Fühlen Sie sich also nicht entmutigt, wenn Sie sie nach dem Lesen des Monadenkapitels nicht wirklich verstehen. Ich fand es nützlich, viele verschiedene Erklärungen von Monaden zu lesen; Jeder gibt eine neue Perspektive auf das Problem. Hier ist eine sehr gute Liste von Monaden-Tutorials . Ich kann die All About Monads nur empfehlen , aber die anderen sind auch gut.

Außerdem dauert es eine Weile, bis sich die Konzepte wirklich durchsetzen. Dies geschieht durch die Verwendung, aber auch durch die Zeit. Ich finde, dass manchmal das Schlafen bei einem Problem mehr als alles andere hilft! Irgendwann wird die Idee klicken und Sie werden sich fragen, warum Sie Schwierigkeiten hatten, ein Konzept zu verstehen, das in Wirklichkeit unglaublich einfach ist. Es ist großartig, wenn dies passiert, und wenn dies der Fall ist, ist Haskell möglicherweise Ihre bevorzugte Programmiersprache :)

Um sicherzustellen, dass Sie das Haskell-System perfekt verstehen, sollten Sie versuchen, 20 Zwischen-Haskell-Übungen zu lösen . Diese Übungen verwenden unterhaltsame Namen von Funktionen wie "pelzig" und "Banane" und helfen Ihnen, einige grundlegende funktionale Programmierkonzepte gut zu verstehen, wenn Sie sie noch nicht haben. Schöne Art, den Abend mit einem Bündel Papieren zu verbringen, die mit Pfeilen, Einhörnern, Würstchen und pelzigen Bananen bedeckt sind.

Mittlere

Sobald Sie Monaden verstanden haben, haben Sie wahrscheinlich den Übergang von einem Anfänger-Haskell-Programmierer zu einem fortgeschrittenen Haskeller geschafft. Wohin also von hier aus? Das erste, was ich empfehlen würde (wenn Sie sie noch nicht aus dem Erlernen von Monaden gelernt haben), sind die verschiedenen Arten von Monaden, wie z. B. Reader, Writer und State. Auch hier berichten Real World Haskell und All about Monads ausführlich darüber. Um Ihr Monadentraining abzuschließen, ist das Erlernen von Monadentransformatoren ein Muss. Mit diesen können Sie verschiedene Arten von Monaden (z. B. eine Reader- und eine State-Monade) zu einer kombinieren. Dies mag zunächst nutzlos erscheinen, aber nachdem Sie sie eine Weile benutzt haben, werden Sie sich fragen, wie Sie ohne sie gelebt haben.

Jetzt können Sie das reale Haskell-Buch fertigstellen, wenn Sie möchten. Das Überspringen von Kapiteln spielt jetzt keine Rolle mehr, solange Sie Monaden haben. Wählen Sie einfach, was Sie interessiert.

Mit dem Wissen, das Sie jetzt haben würden, sollten Sie in der Lage sein, die meisten Pakete auf cabal (zumindest die dokumentierten ...) sowie die meisten Bibliotheken, die mit Haskell geliefert werden, zu verwenden. Eine Liste interessanter Bibliotheken zum Ausprobieren wäre:

  • Parsec : zum Parsen von Programmen und Text. Viel besser als die Verwendung von regulären Ausdrücken. Hervorragende Dokumentation, hat auch ein reales Haskell-Kapitel.

  • QuickCheck : Ein sehr cooles Testprogramm. Sie schreiben ein Prädikat, das immer wahr sein sollte (z length (reverse lst) == length lst. B. ). Anschließend übergeben Sie dem Prädikat den QuickCheck und es werden viele zufällige Werte (in diesem Fall Listen) generiert und getestet, ob das Prädikat für alle Ergebnisse wahr ist. Siehe auch das Online-Handbuch .

  • HUnit : Unit-Test in Haskell.

  • gtk2hs : Mit dem beliebtesten GUI-Framework für Haskell können Sie gtk-Anwendungen in Haskell schreiben.

  • Happstack : Ein Webentwicklungs-Framework für Haskell. Verwendet keine Datenbanken, sondern einen Datentypspeicher. Ziemlich gute Dokumente (andere beliebte Frameworks wären Snap und Yesod ).

Es gibt auch viele Konzepte (wie das Monadenkonzept), die Sie eventuell lernen sollten. Dies ist einfacher als das erste Mal Monaden zu lernen, da Ihr Gehirn daran gewöhnt ist, mit dem Grad der Abstraktion umzugehen. Ein sehr guter Überblick über diese hochrangigen Konzepte und deren Zusammenspiel ist die Typeclassopedia .

  • Anwendbar: Eine Schnittstelle wie Monaden, aber weniger leistungsfähig. Jede Monade ist anwendbar, aber nicht umgekehrt. Dies ist nützlich, da es einige Typen gibt, die anwendbar sind, aber keine Monaden. Außerdem ist Code, der mit den anwendbaren Funktionen geschrieben wurde, häufig zusammensetzbarer als das Schreiben des entsprechenden Codes mit den Monad-Funktionen. Weitere Informationen finden Sie unter Functors , Applicative Functors und Monoids .

  • Faltbar , Travers : Typeclasses dass abstrakt viele der Operationen von Listen, so dass die gleichen Funktionen können auf andere Behältertypen angewandt werden. Siehe auch die Erklärung zum Haskell-Wiki .

  • Monoid : Ein Monoid ist ein Typ mit einem Wert von Null (oder einem leeren Wert) und einer notierten Operation, <>die zwei Monoide miteinander verbindet, so dass x <> mempty = mempty <> x = xund x <> (y <> z) = (x <> y) <> z. Diese werden als Identitäts- und Assoziativitätsgesetze bezeichnet. Viele Typen sind Monoide wie Zahlen mit mempty = 0und <> = +. Dies ist in vielen Situationen nützlich.

  • Pfeile : Pfeile sind eine Möglichkeit, Berechnungen darzustellen, die eine Eingabe annehmen und eine Ausgabe zurückgeben. Eine Funktion ist der grundlegendste Pfeiltyp, es gibt jedoch viele andere Typen. Die Bibliothek hat auch viele sehr nützliche Funktionen zum Bearbeiten von Pfeilen - sie sind sehr nützlich, selbst wenn sie nur mit einfachen alten Haskell-Funktionen verwendet werden.

  • Arrays : Die verschiedenen veränderlichen / unveränderlichen Arrays in Haskell.

  • ST-Monade : Ermöglicht das Schreiben von Code mit einem veränderlichen Status, der sehr schnell ausgeführt wird und dennoch außerhalb der Monade rein bleibt. Weitere Informationen finden Sie unter dem Link.

  • FRP: Functional Reactive Programming, eine neue, experimentelle Methode zum Schreiben von Code, die Ereignisse, Trigger, Ein- und Ausgänge (z. B. eine GUI) verarbeitet. Ich weiß allerdings nicht viel darüber. Paul Hudaks Vortrag über Yampa ist ein guter Anfang.

Es gibt viele neue Sprachfunktionen, die Sie sich ansehen sollten. Ich werde sie nur auflisten , Sie können viele Informationen über sie von Google, dem haskell-Wikibook , der haskellwiki.org-Site und der ghc-Dokumentation finden .

  • Multiparameter-Typklassen / funktionale Abhängigkeiten
  • Typ Familien
  • Existenziell quantifizierte Typen
  • Phantomtypen
  • GADTS
  • Andere...

Ein Großteil von Haskell basiert auf der Kategorietheorie , daher sollten Sie sich das ansehen. Ein guter Ausgangspunkt ist die Kategorietheorie für Informatiker . Wenn Sie das Buch nicht kaufen möchten, ist auch der Artikel des Autors hervorragend.

Schließlich möchten Sie mehr über die verschiedenen Haskell-Tools erfahren. Diese beinhalten:

  • ghc (und alle seine Funktionen)
  • Kabale : das Haskell-Paketsystem
  • darcs : ein in Haskell geschriebenes verteiltes Versionskontrollsystem, das für Haskell-Programme sehr beliebt ist.
  • Schellfisch : ein automatischer Dokumentationsgenerator von Haskell

Während Sie all diese neuen Bibliotheken und Konzepte lernen, ist es sehr nützlich, ein mittelgroßes Projekt in Haskell zu schreiben. Es kann alles sein (zB ein kleines Spiel, ein Datenanalysator, eine Website, ein Compiler ). Wenn Sie daran arbeiten, können Sie viele der Dinge anwenden, die Sie gerade lernen. Du bleibst ewig auf diesem Niveau (hier bin ich).

Experte

Es wird Jahre dauern, bis Sie dieses Stadium erreicht haben (Hallo ab 2009!), Aber von hier aus beginnen Sie vermutlich, Doktorarbeiten, neue ghc-Erweiterungen und neue Abstraktionen zu schreiben.

Hilfe bekommen

Schließlich gibt es in jeder Lernphase mehrere Orte, an denen Informationen abgerufen werden können. Diese sind:

  • der #haskell irc kanal
  • die Mailinglisten . Es lohnt sich, sich anzumelden, um die Diskussionen zu lesen - einige sind sehr interessant.
  • andere Orte auf der Homepage von haskell.org

Fazit

Nun, das stellte sich länger heraus als ich erwartet hatte ... Wie auch immer, ich denke, es ist eine sehr gute Idee, Haskell zu beherrschen. Es dauert lange, aber das liegt hauptsächlich daran, dass Sie dadurch eine völlig neue Denkweise lernen. Es ist nicht so, als würde man Ruby nach dem Erlernen von Java lernen, sondern als würde man Java nach dem Erlernen von C lernen. Außerdem stelle ich fest, dass sich meine objektorientierten Programmierkenntnisse durch das Erlernen von Haskell verbessert haben, da ich viele neue Möglichkeiten sehe, Ideen zu abstrahieren.


35
Yay Pfeile! Zuerst lässt du Monaden dein Gehirn formen, dann stehst du auf deinem Kopf und denkst über Comonaden nach, und dann machst du beides gleichzeitig, um Pfeile zu bekommen :) In Haskell gibt es eine Menge Ausdruckskraft, die mit Typ-Level geöffnet werden kann auch programmieren.
Ephemient

13
@nanothief Monadist mächtiger, aber auch weniger kompositorisch ... viele Leute verwenden Monaden, bei denen sie mit sauberem ApplicativeCode davonkommen könnten . Die meisten Dinge, die Functors sind Monad, sind auch s, aber Sie gehen nicht herum >>=und returnwann fmapwird ausreichen, weil letzteres zu viel einfacherem Code führt, wenn Sie ihn verwenden können.
Tom Crockett

8
@pelotom, ich habe den Typeclassopedia-Link sowie bessere Gründe für die Verwendung von Applicative für diesen Abschnitt hinzugefügt und den Functor-Abschnitt entfernt. Es ist schwierig, die Monaden- und Anwendungskonzepte in die richtige Reihenfolge zu bringen, da in den meisten Unterrichtsmaterialien (einschließlich RWH) der Schwerpunkt auf Monaden liegt. Auf der anderen Seite hat das Erlernen eines Haskell-Tutorials einen langen Weg zurückgelegt, seit ich die Antwort ursprünglich geschrieben habe (fast 2 Jahre: O) und lehrt Applikativ vor Monade. Vielleicht sollte dies jetzt die empfohlene Art sein, Haskell zu lernen.
David Miani

2
Guter Hinweis. Ich habe vor über einem Jahr damit begonnen und bin den größten Teil der Zwischenphase hinter mir. Feedback: Das Monadenkapitel von RWH (Kapitel 14) ist schlecht erklärt. Das Lesen der Online-Version von RWH ist von Vorteil, da sie Crowdsourcing-Kommentare enthält, die das Kapitel unterstützen. FWIW, Sie hätten Monaden erfinden können , war das Monaden-Tutorial, das für mich am besten funktionierte.
Tom

6
@ Tomf: Danke! Ich war immer erstaunt darüber, wie gut diese Antwort funktioniert hat - es ist fast fünf Jahre her, seit ich sie geschrieben habe, aber sie ist immer noch stark. Ich werde jedoch bald ein Update durchführen müssen, da es etwas veraltet ist. Es werden keine Linsen, Pipes, Constraint-Arten, die Haskell-Plattform und Typ-Level-Nummern erwähnt, und sie sind ziemlich wichtige neue Themen, seit dies geschrieben wurde. Sie haben Recht, dass RWH nicht mehr so ​​gut ist, seit langem nicht mehr aktualisiert wurde und viele Beispiele nicht kompiliert werden. Ich bin froh, dass es dir trotzdem geholfen hat.
David Miani

179

Ein Kollege von mir hatte gute Erfahrungen mit Learn You a Haskell for Great Good! .

Das Tutorial richtet sich an Personen, die Erfahrung mit wichtigen Programmiersprachen haben, aber noch nicht in einer funktionalen Sprache programmiert haben.

Und überprüfen Sie die Antworten hier zu


27
Ich unterstütze das. Da dies nicht offensichtlich ist, finden Sie hier einen Link zu einer herunterladbaren PDF-Version des Tutorials: learnyouahaskell.com/learnyouahaskell.pdf Das Webdesign ist großartig, aber ich möchte auch eine Kopie für die U-Bahn haben.
Telemachos

8
Ich habe damit angefangen, aber meiner Meinung nach sollten Sie direkt zu Real World Haskell gehen. Der Unterschied ist wie das Lernen von C von K & R oder "C für Dummies", was einfach zu sein versucht, aber wichtige Dinge mit seinem Ansatz vermisst. Ich denke, es ist besser, nur die Fakten klar zu machen, als zu versuchen, Haskell "auf die zwingende Weise" zu lernen.
John Smith

7
Ich LIEBE das absolut und ich habe viel Zeit in dieses und Real World Haskell investiert. IMO, "Learn You a Haskell" bietet tiefere Einblicke als Real World Haskell, obwohl beide großartige Ressourcen sind.
Charlie Flowers

7
@ abababa22 Ich denke, zuerst LYAH zu lesen und dann zu RWH zu gehen, ist die beste Idee. LYAH bringt dir nicht nur Haskell bei; Es bringt Ihnen funktionale Programmierung bei. Sie beginnen funktional zu denken, wenn Sie Probleme lösen. Natürlich würde nur LYAH nicht ausreichen, um eine große Anwendung zu schreiben, aber es beugt Ihrem Verstand den richtigen Weg. Wenn Sie einen imperativen Hintergrund haben, ist dies der beste Weg, IMO
Abdulsattar Mohammed

4
@Telemachus Nur zur Anmerkung: Das PDF ist nicht die endgültige Version, zumindest fehlt das letzte Kapitel.
SDCVVC

103

Hier ist ein gutes Buch, das Sie online lesen können: Real World Haskell

Die meisten Haskell-Programme, die ich durchgeführt habe, waren die Lösung von Project Euler- Problemen.

Ein Ratschlag, den ich vor nicht allzu langer Zeit gelesen habe, war, dass Sie einen Standardsatz einfacher Probleme haben sollten, die Sie (theoretisch) lösen können, und dann, wenn Sie versuchen, eine neue Sprache zu lernen, diese Probleme in dieser Sprache implementieren.


2
Real World Haskell ist meiner Erfahrung nach großartig, bis Sie Kapitel 5 erreichen. Von da an würde ich es nicht empfehlen.
MasterMastic

Warum @MasterMastic? Was ist das Problem nach Kapitel 5? Ich würde gerne wissen, bevor ich das Geld ausgebe.
Jay Blanchard

@ JayBlanchard In Kapitel 5 erhalten Sie ein konkretes Beispiel für eine Bibliothek, was nett ist, aber sie sagen Ihnen, was sie tun werden, tun es, aber sie erklären nicht, warum und überhaupt nicht klar, und es gibt ziemlich viel magisches Hex-Literal. Du gehst nur die Bewegungen durch. Das war nicht das größte Problem für mich, aber das größte Problem war, dass das Buch stark von solchen harten und langen Beispielen abhängt (lang genug, um mehr als ein ganzes Kapitel aufzunehmen). Sie können kaum die Teile lesen, die Sie wollen. Ich denke, großartige Autoren, erstaunliches Wissen, aber extrem schlechte Ausführung.
MasterMastic


69

Um die Antworten anderer hinzuzufügen, gibt es eine nützliche Funktion, die Ihnen beim Codieren hilft (z. B. beim Lösen von Projekt-Euler-Problemen): Hoogle . Sie können entweder die Befehlszeilenschnittstelle oder die Weboberfläche verwenden .

Befehlszeile

Stellen Sie nach der Installation der Haskell-Plattform sicher, dass cabal install hoogle

Hoogle-Verwendungsbeispiel:

Sie haben eine Funktion f x = 3 * x + 1und möchten sie anwenden (5 :: Int), dann auf das Ergebnis und auf dieses Ergebnis usw. anwenden und eine unendliche Liste dieser Werte erhalten. Sie vermuten, dass möglicherweise bereits eine Funktion vorhanden ist, die Sie unterstützt (jedoch nicht speziell für Sie f).

Diese Funktion wäre vom Typ, (a -> a) -> a -> [a]wenn sie benötigt wird f 5oder a -> (a -> a) -> [a]wenn sie benötigt wird 5 f(wir nehmen an, dass die Funktion für allgemeine Typen und nicht nur für Ints gilt).

$ hoogle "a -> (a -> a) -> [a]"
Prelude iterate :: (a -> a) -> a -> [a]

Ja, die Funktion, die Sie benötigen, ist bereits vorhanden und wird aufgerufen iterate. du benutzt es von iterate func 5!

Webschnittstelle

Das Ergebnis für dasselbe Beispiel finden Sie hier .


Das Finden der Standardbibliotheksfunktionen für das, was Sie benötigen, wird viel einfacher, wenn Sie verstehen, wie Sie Hoogle nach dem fragen, was Sie benötigen.
Ankh-Morpork

57

Graham Huttons Programmierung in Haskell ist prägnant, ziemlich gründlich und seine jahrelange Lehrtätigkeit in Haskell zeigt es wirklich. Es ist fast immer das, womit ich den Leuten empfehle, unabhängig davon, wohin Sie von dort aus gehen.

Insbesondere Kapitel 8 ("Functional Parsers") bietet die Grundlagen, die Sie für den Umgang mit Monaden benötigen, und ich denke, dies ist bei weitem der beste Ausgangspunkt, gefolgt von All About Monads . (Beachten Sie in Bezug auf dieses Kapitel jedoch die Errata auf der Website: Sie können das doFormular nicht ohne besondere Hilfe verwenden. Möglicherweise möchten Sie zuerst etwas über Typklassen lernen und dieses Problem selbst lösen.)

Für Haskell-Anfänger wird dies selten betont, aber es lohnt sich, ziemlich früh zu lernen, nicht nur Monaden zu verwenden, sondern eigene zu konstruieren. Es ist nicht schwer, und maßgeschneiderte Aufgaben können eine Reihe von Aufgaben einfacher machen.


5
Dies ist ein völlig unterschätztes Buch (und eine Antwort). Das Kapitel über funktionale Parser, gefolgt von einem Kapitel über IO, in dem keine Monaden erwähnt werden, scheint wirklich ein eleganter pädagogischer Ansatz zu sein.
michiakig


31

Ich würde vorschlagen, dem #haskell irc-Kanal beizutreten und dort Fragen zu stellen. So habe ich Haskell gelernt. Wenn Sie wie oben vorgeschlagen durch Real World Haskell gehen, helfen Echtzeitantworten auf Ihre Fragen sehr. Viele kluge Leute auf #haskell schreiben Haskell zum Spaß und zum Profit, sodass Sie viele gute Beiträge erhalten. Versuch es!


5
1 - Um klar zu sein: Do nicht sie lernt nur mit dem IRC - Kanal. Gehen Sie nicht hinein und fragen Sie "Wie schreibe ich ein Haskell-Programm? Wie füge ich Zahlen hinzu?"
Alternative

Neben irc freenode gibt es in letzter Zeit auch eine lebhafte Diskussion über Haskell in Discord-Chats.
Truthadjustr


19

Als Einführung kann ich noch ein weiteres Haskell-Tutorial empfehlen .

Eine weitere gute Lernressource (wahrscheinlich auf mittlerer Ebene), die mir sehr geholfen hat und in den anderen Antworten meines Erachtens nicht erwähnt wurde, ist Brent Yorgeys Typeclassopedia , die in The Monad Reader (Ausgabe) zu finden ist 13)

Es ist in einem sehr zugänglichen Stil geschrieben und enthält (unter anderem) die folgenden einleitenden Ratschläge:

Es gibt zwei Schlüssel zur Weisheit eines erfahrenen Haskell-Hackers:

  1. Verstehe die Typen.

  2. Erhalten Sie eine tiefe Intuition für jede Typklasse und ihre Beziehung zu anderen Typklassen, gestützt auf die Vertrautheit mit vielen Beispielen.

Der Monad Reader selbst ist eine absolute Fundgrube für funktionale Programmierer (nicht nur für Haskell-Programmierer).


14

Versuchen Sie, einfache Programme darin zu schreiben.

Beispielaufgaben finden Sie wahrscheinlich in verschiedenen Lehrbüchern.

Ich würde nicht empfehlen, sich an Haskell / FP-Lehrbücher zu halten. Versuchen Sie einfach, einfache Dinge damit zu tun: Berechnungen, Manipulationen von Zeichenfolgen, Dateizugriff.

Nachdem ich ein Dutzend gelöst habe, habe ich das Eis gebrochen :)

Lesen Sie danach viel über fortgeschrittene Konzepte (Monaden, Pfeile, E / A, rekursive Datenstrukturen), da Haskell unendlich ist und es viele davon gibt.


14

Ich denke, dass die Realisierung von Haskells Feature anhand von Beispielen der beste Weg ist, um vor allem zu beginnen.

http://en.wikipedia.org/wiki/Haskell_98_features

Hier sind knifflige Typklassen wie Monaden und Pfeile

http://www.haskell.org/haskellwiki/Typeclassopedia

Denken Sie bei Problemen in der realen Welt und größeren Projekten an die folgenden Tags: GHC (am häufigsten verwendeter Compiler), Hackage (libraryDB), Cabal (Gebäudesystem), darcs (ein anderes Gebäudesystem).

Ein integriertes System kann Zeit sparen: http://hackage.haskell.org/platform/

die Paketdatenbank für dieses System: http://hackage.haskell.org/

Wiki des GHC-Compilers: http://www.haskell.org/haskellwiki/GHC

Nach Haskell_98_features und Typeclassopedia können Sie die Dokumentation darüber wahrscheinlich bereits selbst finden und lesen

Übrigens möchten Sie vielleicht einige GHC-Spracherweiterungen testen, die möglicherweise in Zukunft Teil des Haskell-Standards sind.

Dies ist mein bester Weg, um Haskell zu lernen. Ich hoffe es kann dir helfen.


13

Ich schlage vor, dass Sie zuerst das Tutorial von BONUS lesen und dann Real World Haskell (kostenlos online) lesen . Treten Sie dem IRC-Kanal #Haskell auf irc.freenode.com bei bei und stellen Sie Fragen. Diese Leute sind absolut neulingfreundlich und haben mir im Laufe der Zeit sehr geholfen. Auch hier auf SO ist ein großartiger Ort, um Hilfe bei Dingen zu bekommen, die Sie nicht verstehen können! Versuchen Sie, sich nicht entmutigen zu lassen, sobald es klickt, wird Ihr Verstand überwältigt sein.

Das Tutorial von BONUS wird Sie vorbereiten und Sie auf die aufregende Fahrt vorbereiten, die Real World Haskell mit sich bringt. Ich wünsche Ihnen Glück!


12

Wenn Sie nur Erfahrung mit imperativen / OO-Sprachen haben, empfehle ich die Verwendung einer konventionelleren funktionalen Sprache als Sprungbrett. Haskell ist wirklich anders und man muss viele verschiedene Konzepte verstehen, um irgendwohin zu gelangen. Ich schlage vor, zuerst eine Sprache im ML-Stil (wie z. B. F #) anzugehen.


Elm könnte die nächste, nützlichste und anfängerfreundlichste dieser Alternativen sein ...
Pedro Rolo

1
Ich bin nicht einverstanden, eine vorübergehende Route wie F # zu passieren. Für mich ist es, als würde man einen Wodka trinken, den man schnell trinken muss. Auf diese Weise schmerzhafter, aber auch das Vergnügen ist da. Temporäre Routen führen für mich nur zu mehr Verwirrung.
Truthadjustr

10

Die erste Antwort ist sehr gut. Um das Expertenlevel zu erreichen, sollten Sie mit einigen Experten selbst promovieren.

Ich empfehle Ihnen, die Haskell-Seite zu besuchen: http://haskell.org . Dort gibt es viel Material und viele Verweise auf die aktuellsten Dinge in Haskell, die von der Haskell-Community genehmigt wurden.


2
Tut mir leid, aber das PhD-Argument hier zu verwenden ist wie zu sagen, dass man ein 300-Dollar-Küchenmesser haben muss, um ein guter Koch zu sein. Selbst Simon Peyton Jones - der Vater von Haskell - hat keinen Doktortitel. Übung und Beharrlichkeit führen sowohl hier als auch in jedem anderen Bereich zu Fachwissen.
Petras Purlys
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.