Ermitteln Sie, ob ein Wert eine Funktion in Haskell ist

8

Ist es möglich, eine Funktion isFunc :: a -> Bool zu schreiben, um festzustellen, ob ein beliebiger Wert eine Funktion (irgendeiner Art) ist, so dass

%Vor%

Ich verwende Data.Dynamic , damit ich kann den Typ nicht im Voraus bestimmen.

    
jhibberd 21.04.2012, 11:26
quelle

2 Antworten

10

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 ?

    
pigworker 21.04.2012, 11:40
quelle
11

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:

%Vor%

(Verzeihen Sie, wenn dies nicht die kürzeste Implementierung ist.)

    
rkhayrov 21.04.2012 12:02
quelle

Tags und Links