Wer dem Blog von Tony Morris und den Scala-Übungen gefolgt ist, weiß, dass diese beiden Signaturen gleichwertig sind:
> %Vor%Und:
%Vor%Außerdem wurde festgestellt, dass der Typ einfach bewohnt ist (d. h. alle Implementierungen des Typs sind exakt äquivalent). Ich kann den Beweis der Äquivalenz der beiden Typen erraten, weiß aber nicht wirklich, wo ich mit der Ein-Einwohner-Aussage anfangen soll. Wie beweist man das?
Der Option
-Typ ist doppelt bewohnt. Es kann etwas enthalten oder nicht. Dies ergibt sich aus der Signatur von fold
in der ersten Eigenschaft, in der Sie nur:
some
zurück, wenn du einen Wert vom Typ A
hast (du bist ein Some
) none
Argument zurück (du bist ein None
) Jede gegebene Implementierung kann nur das eine oder das andere tun, ohne die referentielle Transparenz zu verletzen.
Also ich glaube, es ist ein Fehler, es einfach bewohnt zu nennen. Jede Implementierung eines dieser Merkmale muss jedoch zu einem dieser beiden Fälle isomorph sein.
Das heißt, ich glaube nicht, dass Sie die "Bewohnbarkeit" eines Typs wirklich charakterisieren können, ohne seine Konstrukteure zu kennen. Wenn Sie eines dieser Optionsmerkmale um eine Implementierung erweitern, die einen Konstruktor mit einem Tuple12[A]
enthält, könnten Sie beispielsweise 13 verschiedene Versionen von fold
schreiben.
Tags und Links scala functional-programming type-theory