Was bedeutet die => symbol bedeutet in Haskell?
Ich bin neu in Haskell und, im Allgemeinen, funktionalen Programmierung, und ich bin ein bisschen unangenehm mit der syntax.
In der folgende code was bedeutet der =>
bezeichnen? Und auch (Num a, Ord a)
?
loop :: (Num a, Ord a) => a -> (t -> t) -> t -> t
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine typeclass Einschränkung;
(Num a, Ord a) => ...
bedeutet, dassloop
arbeitet mit jeder Arta
ist eine Instanz derNum
undOrd
typeclasses, die entsprechenden numerischen Typen und bestellte Arten beziehungsweise. Im Grunde kann man sichloop
als der Typ auf der rechten Seite des=>
, außer dassa
wird benötigt, um eine Instanz vonNum
undOrd
.Können Sie denken typeclasses als im Grunde ähnlich wie OOP interfaces (aber Sie sind nicht das gleiche!) — Sie verkörpern eine Reihe von Definitionen, die jede Instanz unterstützt werden muss, und generische code kann geschrieben werden mit diesen Definitionen. Zum Beispiel
Num
beinhaltet numerische Operationen wie addition und Multiplikation, währendOrd
enthält weniger als, größer als, und so weiter.Weitere Informationen auf typeclasses, siehe diese Einführung von Lernen Sie eine Haskell.
=>
zwischen zwei teilen eines Typ-Signatur:So können Sie denken
(Num a, Ord a) => a -> (t -> t) -> t -> t
im Sinne von "der Typ ista -> (t -> t) -> t -> t
und auch einNum
Instanz füra
und einOrd
Instanz füra
".Mehr auf typeclasses sehen http://www.learnyouahaskell.com/types-and-typeclasses
Eine Art, nachzudenken ist es, dass
Ord a
undNum a
sind zusätzliche Eingaben für die Funktion. Sie sind eine Besondere Art von input-obwohl: Wörterbücher. Wenn Sie diese Funktion verwenden, mit einer bestimmten Arta
, muss es auch Wörterbücher verfügbar für dieOrd
undNum
Operationen auf dem Typa
als gut.Jede Funktion, die macht Gebrauch von einer Funktion, die mit dictionary-Eingänge müssen auch den gleichen Wörterbuch-Eingänge.
Jedoch, Sie müssen nicht explizit übergeben Sie diese Wörterbücher herum. Haskell wird sich darum kümmern, dass für Sie, vorausgesetzt, es gibt ein Wörterbuch zur Verfügung. Sie erstellen ein Wörterbuch mit einem typeclass Instanz.
Dieser erstellt ein Wörterbuch für die
Num
Operationen aufMyType
daherMyType
können überall verwendet werden, woNum a
ist eine erforderliche Eingabe (sofern die übrigen Voraussetzungen erfüllt sind natürlich).Auf der linken Seite des
=>
erklären Sie Einschränkungen für die Arten, die verwendet werden, auf der rechten Seite.In dem Beispiel, das Sie geben, bedeutet es, dass
a
eingeschränkt zu sein, eine Instanz der beidenOrd
Typ-Klasse und dieNum
Typ-Klasse.