Eine der vielbeachteten Funktionen ist, dass wenn ein Programm kompiliert wird, es sehr wahrscheinlich meistens korrekt ist, mehr als ein Programm, das in einer Sprache mit einem weniger ausgeklügelten oder strikten System geschrieben ist.
Das heißt, Haskell ist ein System zum Übersetzen von Laufzeitfehlern in Compilerfehler: -)
Ich frage mich, ob die Programmierung in Haskell Situationen hervorruft, in denen ein Programmierer einen Runtime-Bug einführen könnte, der kein offensichtliches Analogon (in Erscheinung und Häufigkeit) in einer weniger stark typisierten Sprache hat?
Einige grundlegende Beispiele, die mir in den Sinn kommen: (nicht großartig, ich suche Ratschläge, worüber ich vorsichtig sein kann)
Andere / bessere Beispiele für Fehler?
Es muss nicht asymptotisch sein, aber Platzverluste aufgrund von Faulheit sind ein Problem in realen Anwendungen von Haskell. Ich kenne Haskell-nutzende Firmen, die komplett auf strikte Datentypen umgestellt haben (während sie immer noch die Faulheit der Funktionsparameter verwenden).
Quellen für diese Ansicht finden Sie unter:
Faulheit, besonders faule E / A, wo reine Funktionen IO
Aktionen erzwingen oder eine Datei Handle
vor dem Lesen schließen können. Der Haskell-Kurs von der Stanford University hat gute Informationen dazu in der Iteratee
Vorlesung. Imho, diese Vortragsreihe ist sehr gut geschrieben und deckt viel Boden ab.
Betrachten Sie den folgenden Dataype:
%Vor% Ich möchte ein U Int
mit zufälligen Werten erstellen. Mit der Traversable
-Instanz ist es einfach:
Jetzt erstelle ich eine zufällige unendliche U Int
und drucke die ersten drei Werte der Liste:
Funktioniert auch gut. Als letzten Test drucken wir den einzelnen Wert auf der rechten Seite:
%Vor%Pfui. Das hängt.
Tags und Links haskell