Verwendung der Verfeinerung, um Abhängigkeiten mit Konstanten auszudrücken 22

8

Ich versuche, Möglichkeiten mit verfeinerten (und formlosen) zu erkunden, um eine verbesserte Typenprüfung zu haben.

Ich möchte mit type einige Einschränkungen von Intervall oder Größe darstellen.

Also, mit verfeinerten, kann ich solche Dinge schreiben:

%Vor%

Aber ich möchte die Einschränkungen mit Naturalien größer ausdrücken.

%Vor%

Dieser funktioniert nicht, weil _1000 nicht definiert ist. Der letzte bereits definierte ist _22 Ich kann, mit formlosem Succ , mein eigenes machen, aber es ist sehr umständlich.

Beispiel:

%Vor%

Gibt es eine bessere Möglichkeit, solche Einschränkungen auszudrücken oder _1000 effizienter zu machen? Gibt es etwas, was ich vermisst hätte?

Bearbeiten:

Ich habe den Travis-Vorschlag ausprobiert:

%Vor%

Aber diese Zeile verursacht eine StackOverflowError zur Kompilierzeit (bei Makroexpansion) Wenn ich mit einer kleineren Nummer versuche, ist es in Ordnung.

%Vor%

In meiner Umgebung wird StackOverflowError für Zahlen größer als 400 ausgelöst.

Darüber hinaus endete die Kompilierung mit diesem Code nie (mit sbt):

%Vor%     
volia17 01.07.2015, 11:22
quelle

1 Antwort

10

Das Greater Prädikat in verfeinerten unterstützt sowohl Shapeless der Typ-level natürliche Zahlen ( Nat ) und integer Singleton-Typen ( welche von Shapeless Witness ) zur Verfügung gestellt werden. Die folgenden Einschränkungen machen dasselbe:

%Vor%

Aufgrund der Möglichkeiten Nat und integer Singleton Typen vertreten sind, sind diese viel weniger wahrscheinlich, dass der Compiler Überlauf um den Stapel zu machen. Folgendes funktioniert beispielsweise auf meinem Computer:

%Vor%

Auch wenn 10000 weit über dem Punkt liegt, an dem shapeless.nat(10000) beginnt, einen Überlauf zu stapeln.

Als Fußnote, ist es möglich, das Nat -Darstellung für Werte zu verwenden, die größer als 22, ohne einfach mit der Eingabe Succ einer Menge:

%Vor%

Das wird noch den Stapel für große Werte blasen, obwohl, so dass die ganzen Zahl Singleton-Typen sind die Art und Weise, in Ihrem Fall zu gehen.

    
Travis Brown 01.07.2015, 13:07
quelle

Tags und Links