Die kurze Antwort lautet "um zusätzliche Eigenschaften des vorhandenen Codes zu überprüfen". Eine längere Antwort folgt.
Ich bin nicht sicher, ob "implizit" oder "explizit" eine gute Terminologie ist. Diese Unterscheidung wird manchmal als "strukturelle" oder "nominelle" Untertypisierung bezeichnet. Dann gibt es auch eine zweite Unterscheidung in den möglichen Interpretationen der strukturellen Untertypen (kurz beschrieben). Beachten Sie, dass alle drei Interpretationen der Untertypisierung tatsächlich orthogonal sind und es daher nicht wirklich sinnvoll ist, sie miteinander zu vergleichen, anstatt die Verwendung der beiden zu verstehen.
Die wichtigste operationale Unterscheidung bei der Interpretation einer strukturellen Subtypisierungsrelation A <: B besteht darin, ob sie von einem realen Zwang mit (Laufzeit- / Rechenzeit-) Recheninhalt oder vom Identitätszwang bezeugt werden kann. Wenn erstere die wichtige theoretische Eigenschaft ist, die gelten muss, ist "Kohärenz", dh wenn es mehrere Möglichkeiten gibt, zu zeigen, dass A ein substruktureller Subtyp von B ist, muss jeder der begleitenden Zwänge den gleichen Recheninhalt haben.
Der Link, den Sie angegeben haben, scheint die zweite Interpretation der strukturellen Untertypen zu haben, bei der A <: B durch Identitätszwang beobachtet werden kann. Dies wird manchmal als "Teilmengeninterpretation" von Untertypen bezeichnet, wobei die naive Ansicht vertreten wird, dass ein Typ eine Menge von Werten darstellt, und daher A <: B, nur für den Fall, dass jeder Wert von Typ A auch ein Wert von Typ B ist manchmal auch als "Verfeinerungstyp" bezeichnet, und eine gute Lektüre für die ursprüngliche Motivation sind die Verfeinerungstypen von Freeman & Pfenning für ML . Für eine neuere Inkarnation in F # können Sie Bengston et al., Verfeinerungstypen für sichere Implementierungen, lesen. Die Grundidee besteht darin, eine vorhandene Programmiersprache zu verwenden, die möglicherweise bereits über Typen verfügt (oder nicht), deren Typen jedoch nicht allzu viel garantieren (z. B. nur die Speichersicherheit), und eine zweite Ebene von Typen in Betracht zu ziehen, mit denen Teilmengen von Programmen ausgewählt werden zusätzliche, genauere Eigenschaften.
(Nun würde ich argumentieren, dass die mathematische Theorie hinter dieser Interpretation von Subtypisierung immer noch nicht so gut verstanden ist, wie sie sein sollte, und vielleicht deshalb, weil ihre Verwendung nicht so weit verbreitet ist, wie sie sein sollte. Ein Problem ist, dass die Menge von Werten "Die Interpretation von Typen ist zu naiv und wird daher manchmal eher aufgegeben als verfeinert. Ein weiteres Argument dafür, dass diese Interpretation der Subtypisierung mehr mathematische Aufmerksamkeit verdient, ist die Einführung zu Paul Taylors Subspaces in Abstract Stone Duality .)