2016-08-17 2 views
3

In Haskell, Typdeklarationen mit doppelseitigem colon d.h. (: :), wie not :: Bool -> Bool.Typdeklarationen Syntax Differenz zwischen Haskell und Haskell-ähnlicher Sprache

Aber in vielen Sprachen, deren Syntax zu Haskell ähnlich ist, z.B. elm, agda, sie verwenden einzelnen Doppelpunkt (:), um Typ zu deklarieren. wie not : Bool -> Bool.

Warum diese Sprachen Haskell Stil Typdeklaration Syntax aufgegeben.

  • ist (:) besser als (: :) um einen Typ zu deklarieren?
  • Oder ist (: :) besser für andere Anwendungen geeignet?
  • Oder nur weil (:) ist ein Zeichen kleiner als (: :)?
+1

FWIW, ich betrachte ':: ', um tatsächlich besser in einer Top-Level-Signatur zu lesen, da es ein bisschen mehr Platz zwischen der Wertebene und der Typenebene bringt. 'nicht: Bool -> Bool' sieht ein bisschen aus wie es geparst werden sollte' (nicht: Bool) -> Bool'. Aber viele existierende Infix-Operatoren haben das gleiche Problem; Ich nehme an, dass es im Grunde nur darauf ankommt, was Sie gewohnt sind. – leftaroundabout

+0

Wenn Sie vorgeben, dass eine Typannotation ein tatsächlicher Wert ist, macht '::' Sinn. Es beginnt mit einem ':' wie jeder andere Infix-Konstruktor, es geht dem "echten" Symbol für Typ-Annotationen voraus und gibt einen Namen und einen Typ als Argumente zurück und gibt eine Typ-Annotation zurück. – chepner

Antwort

9

Ich hörte SPJ irgendwo sagen, dass es ein diskutiertes Thema ist zwischen : und :: zu wählen. Er und John Hughes entschieden sich schließlich für ::. Von die A History of Haskell: Being Lazy With Class Papier:

Wir von Miranda nahmen die Konvention, die Daten Konstrukteuren ist aktiviert, während Variablen nicht, und hinzugefügt, um eine ähnliche Übereinkunft für Infix Bauer, das in Haskell muss mit einem Doppelpunkt beginnen. Die letztere Konvention wurde auf Übereinstimmung mit unserem Gebrauch gewählt (angenommen von SASL, KRC und Miranda) einem einzelnen Doppelpunkt: für die Liste „cons“ Operator. (Die Wahl von „:“ für Nachteile und „::“ für Typen Signaturen, nebenbei gesagt, war ein heiß umstrittenes Thema (ML hat die gegenüber) und bleibt umstritten bis heute.)

+0

Ich glaube nicht, dass SPJ und John Hughes das entschieden haben. Anfangs war es Phil Wadlers Design (imitiert Miranda und Orwell), und dann behielt das Haskell-Komitee es. Es war eine unglückliche Wahl. – augustss

+0

Ja, ich denke es war zwischen SPJ und Wadler. Ich werde wahrscheinlich versuchen, das Video bis zum Wochenende zu verlinken. – Sibi

10

IIRC die Haskell Wahl der Verwendung von :: ist ein bisschen ein (unglücklicher) historischer Unfall. Haskell basierte größtenteils auf Miranda, die auch :: für Typen verwendet. Die Autoren von Miranda wollte wirklich die Nachteile Betreiber : sein, da sie dachten, es wäre viel mehr ubiquitär verwendet, so dass die Eingabe des Bedieners zu :: werden delegiert hatte.

Es hat sich wirklich nicht als eine gute Idee erwiesen, da sonst die ganze Literatur (sogar die, die über Haskell spricht) auf Typen : verwendet. Als nächste paper at hand wird der doppelte Doppelpunkt für alle Muster (Haskell) verwendet, aber die mathematischen Urteile (wie auf Seite 10) folgen alle dem traditionellen einzelnen Doppelpunkt.


Ich glaube, ich erinnere mich, irgendwo (EDIT: es war here, aber ich bin zu faul, um die ganze Sache zu hören, den richtigen Zeitpunkt zu bekommen), dass zu der Zeit, eine Menge FP-Forscher wollten Miranda nur sehr klar definieren, so dass Forschungsberichte, die über faul-funktional-reine Sprachen sprechen, eine gemeinsame Sprache haben könnten, um über ihre Ideen zu sprechen. Die Designer von Miranda wollten das nicht, aber stattdessen sagten sie, dass es ihnen gut gehen würde, wenn dies mit einer anderen Sprache gemacht würde, die Miranda sehr ähnlich sein könnte (vorausgesetzt, dass die beiden Sprachen für beide Parteien noch unterscheidbar sind). . Das war der Ausgangspunkt für den Haskell-Ausschuss.

+3

Ich würde es nicht _that_ unglücklich nennen. Sie umzukehren wäre wahrscheinlich besser gewesen, aber es ist kaum das Ende der Welt, dass die Haskell-Notation sich etwas von der üblichen mathematischen Notation unterscheidet (dies ist an vielen anderen Orten der Fall als bei Typen). – Cubic

+0

Ihre Fußnote ist nicht ganz korrekt. – augustss

Verwandte Themen