2016-05-29 10 views
0

Ich bin relativ neu in Haskell; Was stellt die <= Syntax dar und was ist der Unterschied zwischen <= und =>? Beispiele von beiden wären hilfreich.Die Bedeutung von <= vs. => in Haskell

+0

'<=' ist nur der "kleiner als oder gleich" Operator/Funktion, nehme ich an? – Mephy

+0

In Haskell weiß ich, dass => unterscheidet sich von -> aber ich bin mir nicht sicher, wie. Ich habe beide <= and => in Notation verwendet – McLeodx

Antwort

5

Die beiden völlig unabhängig sind; sie scheinen nur wegen ASCII verwandt zu sein. Es macht mehr Sinn, wenn man sich ihre Unicode-Äquivalente aussehen:

  • => ist ein Pfeil: . Es wird verwendet, Einschränkungen bei Typ Signaturen zu spezifizieren:

    Eq a => a -> a -> Bool 
    

    Eq a => Die in der obigen Signatur bedeutet, dass die Typvariable a kann jeder Typ sein, der eine Instanz der Klasse Eq ist. Das heißt, jeder Typ, der entweder deriving (Eq) oder eine explizite Instanz wie instance Eq Type where ... hat.

    In Funktionssignaturen gibt -> ein normales Argument an, während =>Constraints in der Signatur angibt. Im obigen Beispiel (Eq a => a -> a -> Bool) nimmt die Funktion zwei Argumente vom Typ a und gibt uns eine Bool. Der Eq a => Teil ist kein explizites Argument für die Funktion; es sagt uns nur, dass a Teil von Eq sein muss (das heißt, es muss vergleichbar sein mit ==).

  • <= ist kleiner oder gleich. Das heißt, es ist , nicht. Es ist eine normale Funktion in der Standard-Bibliothek, die Teil der Ord Klasse ist:

    λ> :t (<=) 
    (<=) :: Ord a => a -> a -> Bool 
    

    Sie es in einem normalen Ausdruck verwenden können:

    λ> 10 <= 12 
    True 
    

Der einzige Grund, symmetrisch sie scheinen, weil das ist Die ASCII-Approximation von und ist die gleiche, aber das ist nur eine Einschränkung in der Notation. Ansonsten sind sie völlig unabhängig voneinander.

Sie können die eindeutigen Unicode-Symbole in Ihrem Code verwenden. Die Erweiterung UnicodeSyntax ermöglicht die Verwendung von für => und das base-unicode-symbols Paket enthält Unicode-Versionen von Standardbibliotheksfunktionen einschließlich für <=.

3

Sie sind völlig verschiedene Dinge.

  • => (sowie ->) ist integrierter Typ-Level-Syntax. Es wird verwendet, um Einschränkungen zu bezeichnen. Zum Beispiel kann die Signatur

    abs :: Num a => a -> a 
    

    sagt man, dass die abs Funktion einen Wert vom Typ nimmt a und einen Wert von der gleichen Art ergibt, unter der Bedingung a einen Nummerntyp (das heißt, erfüllt den Num a constraint). Eine solche Beschränkung wird normalerweise & dagger; a Typ Klasse; in diesem Fall

    class Num a where 
        ... 
    

    können Sie lesen den => Pfeil als eine Art-Funktionszuordnung zu: abs zuerst die Informationen von welche spezifischen Art von Nummer a ist als “ implizites Argument ”, dann ein eine solche Zahl als ein explizites Argument, und nur dann gibt das Ergebnis.

  • <= ist keine Syntax, es ist nur ein Infix-Operator, der in der Standardbibliothek definiert ist. Genauer gesagt ist es der "less-than" -Operator, den Mathematiker schreiben .
    Sie können solche Operatoren auf Hayoo nachschlagen, keine Notwendigkeit, Fragen über sie zu stellen.


& Dolch; Streng genommen ist eine Klasse keine Einschränkung, sondern ein Constraint-Konstruktor “ ”, d. H. Eine Typ-Level-Funktion, deren Ergebnis vom Typ Constraint ist. Zum Beispiel wird Num :: * -> Constraint angewendet auf z.B. Int :: * bedeutet, dass Num Int eine Einschränkung ist. (Diese sind nicht Signaturen geben aber Art Signaturen, das heißt “ Arten von Typ-Ebene Dinge ”.)