Missverständnis von SPECIALISE Pragma

8

Der Zweck des Pragma% SPECIALIZE besteht darin, eine spezifischere Version der Funktion zu erstellen.

Ich habe eine Funktion

%Vor%

und ich habe es wie folgt spezialisiert:

%Vor%

Aber der Compiler gibt mir diese verwirrende Warnung:

%Vor%

Was ist los?

    
errfrom 02.11.2017, 15:54
quelle

1 Antwort

9

Die Spezialisierung funktioniert bei begrenztem Polymorphismus, wo Typvariablen wie a eingeschränkt sind, z. B.

%Vor%

Hier ermöglicht die Spezialisierung a ~ Int dem Compiler, die Int -Versionen von (==),(*) zu inline einzubinden, was die Effizienz verbessert. Beachten Sie, dass solche Funktionen vom Kontext (Eq a, Num a) bereitgestellt werden.

In Ihrem Fall gibt es keinen Kontext, der a einschränkt, sodass diese Optimierung nicht durchgeführt werden kann. Nach all Ihrem polymorphen Code kann (*) oder irgendeine andere numerische Funktion in Int nicht mehr verwendet werden, da Ihr Code zur Kompilierung jeden Typ a verarbeiten muss, einschließlich solcher, die keine Zahlen sind.

    
chi 02.11.2017, 16:08
quelle

Tags und Links