Dies ist vielleicht eine sehr grundlegende Frage, aber es scheint dennoch nicht auf SO bezogen worden zu sein.Haskell- (Typdeklaration) Was ist "a"?
Vor kurzem nahm ich Haskell und bisher gebe Erklärungen meist bestanden folgende:
Int
Bool
Float
etc, etc
nun in Listen erhalte ich, und ich bin Art Erklärungen zu sehen, dass a
, wie in der folgenden Funktion verwenden dass iteriert durch eine assoziative Liste:
contains :: Int -> [(Int,a)] -> [a]
contains x list = [values | (key,values)<-list, x==key]
Kann jemand eine Erklärung dafür geben, was diese a
ist und wie es funktioniert? Aus der Beobachtung scheint es jeden Typ zu repräsentieren. Bedeutet das, dass ich irgendeine Liste irgendeines Typs als Parameter eingeben kann?
Ebenso wichtig ist, dass 'a' nicht speziell ist: * irgendein * Kleinbuchstabe bedeutet das. Es ist ein Typ * Variable *, und es ist möglich, dass mehrere verschiedene Typvariablen in derselben Signatur vorkommen. Zum Beispiel nimmt 'const :: a -> b -> a' zwei Argumente jedes beliebigen Typs an und gibt einen Wert mit demselben Typ wie seine erste Eingabe zurück. – amalloy
Ich sehe, es ist sehr generisch. Also, ich denke, in den meisten Fällen würde "a" im Allgemeinen Elemente darstellen, die meine Funktion nicht wirklich verwendet oder zu viel verändert. – Bolboa
@Bolboa: Ja, es ist eng mit dem Konzept der "Generika" in anderen Sprachen verwandt. Und ja, wenn der Typ vollständig generisch ist, gibt es wenig, was Sie direkt mit dem Wert selbst tun können. Haskell hat eine Möglichkeit, mehr Informationen über den Typ zu geben (zum Beispiel "kann für Gleichheit verglichen werden", "kann gedruckt werden", "kann wie eine Zahl behandelt werden"), wodurch Sie mehr Verarbeitung der Werte vornehmen können ; Wenn Sie daran interessiert sind, suchen Sie in der Dokumentation oder in einem Lernprogramm nach "Klassen". – psmears