Muster für eine abmahnung

Warnungen werden nur als Warnungen und nicht als Fehler behandelt. Dies ist die Standardeinstellung, kann jedoch nützlich sein, um ein -Werror-Flag zu negieren. Melden Sie Ausdrücke, die in do- und mdo-Blöcken auftreten und scheinbar automatisch Informationen wegwerfen. Zum Beispiel würde die erste Anweisung im do-Block als verdächtig gemeldet, da sie den Typ StackM [Int] und nicht StackM () hat, aber dieser [Int]-Wert ist an nichts gebunden. Die Warnung wird unterdrückt, indem im Quellcode explizit erwähnt wird, dass Ihr Programm etwas wegwirft: Legt fest, wie viele Iterationen des Musterübereinstimmungsprüfers ausgeführt werden, bevor es aufgibt. Diese Grenze besteht darin, Fälle abzufangen, in denen die Musterübereinstimmungsprüfung übermäßig kostspielig sein könnte (aufgrund der exponentiellen Komplexität der Abdeckungsprüfung im allgemeinen Fall). In der Regel sollte dies nicht festgelegt werden, es sei denn, GHC informiert Sie, dass es das Iterationslimit des Musterübereinstimmungsprüfers überschritten hat (in diesem Fall sollten Sie die Umgestaltung Ihrer Musterübereinstimmung in Betracht ziehen, um zukünftige Leser Ihres Codes zu helfen). Das erste Formular deklariert, dass `f` eine (reine) C-Funktion ist, die keine Argumente annimmt und einen Zeiger auf eine C-Funktion mit dem Typ `t` zurückgibt, während das zweite Formular deklariert, dass `f` selbst eine C-Funktion mit dem Typ `t` ist. Die erste Deklaration ist in der Regel ein Fehler, und einer, der schwer zu debuggen ist, weil es zu einem Absturz führt, daher diese Warnung. Macht jede Warnung zu einem schwerwiegenden Fehler.

Nützlich, damit Sie bei der Batchkompilierung keine Warnungen verpassen. Warnung, wenn ein fehlgeschlagenes Muster in einem do-Block verwendet wird, der keine MonadFail-Instanz hat. Akkas Fragenmuster bietet eine einfache Möglichkeit, eine Nachricht an einen Schauspieler zu senden und eine Antwort von ihm zu erwarten. Damit dies ordnungsgemäß funktioniert, muss das Fragenmuster einige Details berücksichtigen, aber um es in diesem Abschnitt kurz zu halten, werden wir nur zwei erwähnen: Verwenden Sie die Warnungstextkomponente, wenn Sie Benutzer vor etwas Wichtigem warnen müssen, wie rechtliche Folgen einer Aktion oder Untätigkeit, die sie möglicherweise ergreifen. Gibt eine Warnung aus, wenn GHC eine überlastete Funktion nicht spezialisieren kann, in der Regel, weil die Funktion ein INLINEABLE-Pragma benötigt. Das Formular “alle” meldet alle derartigen Situationen, während das Formular “nicht alle” nur dann meldet, wenn die Situation während der Spezialisierung einer importierten Funktion eintritt. Genauer gesagt, warnen Sie, wenn eine Bindung eine Variable in den Gültigkeitsbereich bringt, die nicht verwendet wird, es sei denn, der Name der Variablen beginnt mit einem Unterstrich. Die Bedingung “starts-with-underscore” bietet eine Möglichkeit, die Warnung selektiv zu deaktivieren. Bewirkt, dass eine Warnung für fremde Deklarationen ausgesendet wird, die nicht unterstützte Aufrufkonventionen verwenden. Insbesondere wenn die stdcall-Aufrufkonvention auf einer anderen Architektur als i386 verwendet wird, wird sie als ccall behandelt.

Dieser Ansatz funktioniert gut, wenn Sie das Ask-Muster direkt in Ihrer Codebasis verwenden und dank einiger AspectJ-Features können wir den Quellcode-Speicherort der Ask-Nutzung praktisch ohne Overhead erfassen.