38 Stimmen

Was macht das Typsystem von Haskell mächtiger als das Typsystem anderer Sprachen?

Beim Lesen von Nachteile des Scala-Typsystems gegenüber Haskell? muss ich fragen: Was ist es speziell, das das Typsystem von Haskell mächtiger macht als die Typsysteme anderer Sprachen (C, C ++, Java)? Anscheinend kann selbst Scala einige der gleichen Funktionen wie das Typsystem von Haskell nicht ausführen. Was ist es speziell, das das Typsystem von Haskell (Hindley-Milner Typinferenz) so mächtig macht? Kannst du ein Beispiel geben?

3 Stimmen

Es wäre einfacher, diese Frage zu beantworten, wenn Sie mehr Details darüber mitteilen, was Sie wissen. Sind Sie zum Beispiel darüber informiert, was Typinferenz ist, und möchten Sie nur wissen, wie sich die Hindley-Milner-Typinferenz unterscheidet, oder möchten Sie etwas über die Erweiterungen von Haskell über Hindley-Milner hinaus erfahren?

0 Stimmen

0voto

Poscat Punkte 567

Was ist Ausdrucksfähigkeit? Meines Verständnisses nach handelt es sich um die Einschränkung, die das Typsystem uns auf den Code auferlegt, oder anders gesagt, um die Eigenschaften des Codes, die wir beweisen können. Je ausdrucksstärker ein Typsystem ist, desto mehr Informationen können wir auf Typenebene einbetten (die vom Typ-Checker zur Kompilierzeit verwendet werden können, um unseren Code zu überprüfen).
Hier sind einige Eigenschaften des Typsystems von Haskell, die andere Sprachen nicht haben.

  1. Reinheit.
    Reinheit ermöglicht es Haskell, reinen Code von IO-fähigem Code zu unterscheiden
  2. Parametrik.
    Haskell erzwingt Parametrik für parametrisch polymorphe Funktionen, damit sie bestimmte Gesetze einhalten müssen. (Einige Sprachen ermöglichen es Ihnen, polymorphe Funktionstypen auszudrücken, aber sie erzwingen keine Parametrik, zum Beispiel erlaubt es Scala, auf einen bestimmten Typ abgestimmtes Muster abzugleichen, selbst wenn das Argument polymorph ist)
  3. ADT
  4. Erweiterungen
    Das Basistypsystem von Haskell ist eine schwächere Version von 2, was an sich nicht wirklich beeindruckend ist. Aber mit diesen Erweiterungen wird es wirklich leistungsstark (sogar in der Lage, abhängige Typen mit Singleton auszudrücken):
    1. existenzielle Typen
    2. Rang-n-Typen (vollständiges 2)
    3. Typ-Familien
    4. Datenarten (ermöglicht "typisiertes" Programmieren auf Typenebene)
    5. GADT ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X