Ist es möglich, eine Funktion isFunc :: a -> Bool
zu schreiben, um festzustellen, ob ein beliebiger Wert eine Funktion (irgendeiner Art) ist, so dass
Ich verwende Data.Dynamic , damit ich kann den Typ nicht im Voraus bestimmen.
Parametricity sagt nein. Die einzigen Funktionen vom Typ
%Vor%sind konstante Funktionen.
Aber mit etwas Ad-hoc-Polymorphismus und etwas mehr Chuzpe können Sie das tun:
%Vor%und dann sieht es so aus, als hättest du
%Vor% Aber es scheint eine seltsame Sache zu tun. Was nutzt dir die resultierende Bool
?
Was du verlangst und was du mit Data.Dynamic
machen musst, scheinen verschiedene Dinge zu sein. Sie müssen den genauen Werttyp kennen, bevor Sie ihn mit fromDyn
/ fromDynamic
extrahieren. Um festzustellen, ob Dynamic
einen Funktionswert enthält, müssen Sie TypeRep
analysieren:
(Verzeihen Sie, wenn dies nicht die kürzeste Implementierung ist.)