Notwendigkeit, die Erweiterung der Haskell-Sprache für die Produktion zu lernen

10

Die Haskell-Kernsprache ist wirklich einfach. Ausgehend von einem OO-Hintergrund besteht die Hauptschwierigkeit darin, sich an das reine Funktionsparadigma anzupassen.

Während ich "grundlegendes" Haskell lernte, habe ich Spracherweiterungen immer als Spielzeug für CS-Leute oder als Experimente für zukünftige Versionen der Sprache (wie from future import ???in Python) betrachtet.

Als ich mich jedoch mit Web-Frameworks wie Yesod befasste, stellte ich fest, dass für viele Quelldateien zwischen 3 und 4 Erweiterungen erforderlich sind. Einige sehen recht einfach aus (StringOverload). Andere sind wirklich einschüchternd (GADT, Type Famillies, Template Haskell). Ihre Dokumentation enthält Links zu Forschungsarbeiten, was für jemanden, der erwartet, "nur" eine neue Bibliothek zu lernen, beängstigend ist.

Ist es notwendig, GHC-Spracherweiterungen zu lernen, um in Haskell produktiv zu sein? Wenn Sie einen Haskell-Entwickler für eine Produktionsanwendung einstellen würden, würden Sie nach diesem Wissen fragen?

Simon Bergot
quelle

Antworten:

7

Ist es notwendig, GHC-Spracherweiterungen zu lernen, um in Haskell produktiv zu sein?

Ja. Und das gilt für jede Sprache / jedes Werkzeug. Mit dem Kern- / Grundwissen können Sie die Online-Wettbewerbsprobleme lösen, möglicherweise ein kleines Universitätsprojekt, aber definitiv keine reale Anwendung.

Wenn Sie einen Haskell-Entwickler für eine Produktionsanwendung einstellen würden, würden Sie nach diesem Wissen fragen?

Das hängt jetzt davon ab, ob Sie eine Person bei sich haben, die dieses Wissen teilen kann. Wenn ja, kann diese Person den neuen Mitarbeiter hochfahren. Wenn nicht, müssen Sie diese Person zuerst mit Wissen versorgen. Dies gilt auch für neue Technologien.

Natürlich könnten Sie auch versuchen, Leute einzustellen, die so tiefes Wissen in Haskell haben. Da Haskell jedoch relativ neu in der Industrie ist und nur sehr wenige kommerzielle Projekte durchgeführt wurden, wird es schwierig sein, eine solche Person zu finden. Der effektive Weg, um ein Team von Fachleuten in Haskell aufzubauen, besteht darin, Leute einzustellen, die sich mit Grundkenntnissen auskennen und bereit sind, in Haskell zu arbeiten, und sie dann auszubilden.

Manoj R.
quelle
Ich wollte protestieren, aber dann sah ich, dass Real World Haskell viele Spracherweiterungen lehrt. Vielen Dank für Ihre Antwort.
Simon Bergot
2
"Und das gilt für jede Sprache / jedes Werkzeug" - das ist völlig falsch. Nehmen wir an, Sie nehmen Sprachen wie Java, C #, C ++ - keine von ihnen verfügt über Spracherweiterungen, die im realen Anwendungscode häufig vorkommen. Wenn Sie jedes Mal Spracherweiterungen verwenden müssen, wenn Sie etwas weniger Triviales als "die Problemlösungen für Online-Wettbewerbe" schreiben müssen, stimmt meiner Meinung nach etwas mit der Sprachspezifikation nicht.
Malcolm
@Malcolm Warum finden Sie "Wenn Sie jedes Mal Spracherweiterungen verwenden müssen, wenn Sie etwas weniger Triviales als" die Problemlösungen für Online-Wettbewerbe "schreiben müssen, stimmt meiner Meinung nach etwas mit der Sprachspezifikation nicht." um wahr zu sein? Was ist das Merkmal einer Erweiterung, die sie negativ macht? Ich benutze ghc und die mitgelieferten Erweiterungen. Das Hinzufügen einer Erweiterung zu einem vorhandenen Projekt erscheint genauso aufwändig wie das Hinzufügen einer weiteren Bibliothek.
Davorak
2
@Davorak Weil wir anstelle einer einzelnen Sprache zig verschiedene Erweiterungskombinationen haben und Sie nichts darüber wissen, ob der Code auf einem bestimmten Compiler kompiliert werden soll. Erweiterungen machen den Code nicht portierbar. Und das macht es auch schwierig, die Sprache zu lernen, denn anstelle eines einzigen Satzes von Funktionen, die jeder verwendet, gibt es eine enorme Menge zusätzlicher Funktionen, und Sie haben keine Ahnung, welche Sie kennen und verwenden müssen und welche nur existieren weil Forscher Spaß haben.
Malcolm
2
@Davorak Das ist genau das Problem, von dem ich spreche: Jeder verwendet GHC, da dies der einzige noch aktiv gewartete Compiler ist. Andere Compiler können nicht mithalten, daher kann niemand sie verwenden, und es gibt wenig Grund, in sie zu investieren. Was die Bibliotheken betrifft: Sie wählen Bibliotheken für das Problem aus und arbeiten nur mit ihnen. Angenommen, wenn Sie XML lesen müssen, benötigen Sie nur eine XML-Lesebibliothek. Bei Erweiterungen ist es jedoch nicht offensichtlich, wann Sie welche benötigen. Es gibt jedoch auch ein Problem mit Bibliotheken. Angenommen, in Java gibt es nur Arrays und Sammlungen, und in Haskell gibt es eine Menge Array-Bibliotheken.
Malcolm