Geben Sie eine Anwendung mit mehrdeutigen Typen ein

8

Ich habe kürzlich -XTypeApplications entdeckt, was mir erlaubt, meinen Code zu schreiben. Berücksichtigen Sie Folgendes:

%Vor%

anstatt proxy foo (Proxy::Proxy 'True) zu schreiben, kann ich jetzt untag $ foo @'True schreiben, was mir eine Menge Proxy boilerplate erspart. Das ist in Ordnung, aber wir können besser mit mehrdeutigen Typen umgehen:

%Vor%

Jetzt Ich kann foo' @'True schreiben! Beachten Sie, dass der Typ zwar vor -XTypeApplications mehrdeutig war, aber nicht mehr, da ich den Typ a angeben kann. Ich denke, das ist ziemlich gut, aber andere nicht. Also hatte ich gehofft, einen Wrapper einzuführen.

%Vor%

(noch allgemeiner in meinem tatsächlichen Anwendungsfall, aber das bringt den Punkt über), so dass Benutzer -XTypeApplications nicht benötigen. Wenn ich versuche, wrapAmbiguous wie proxy (wrapAmbiguous foo') (Proxy::Proxy 'True) zu verwenden, erhalte ich den Fehler

%Vor%

Es scheint mir, dass dies legal sein sollte, aber GHC kann anscheinend den Typ von foo' mit forall (t :: Bool) (Foo t) => b nicht vereinheitlichen. Gibt es eine Möglichkeit, meinen Wrapper zum Laufen zu bringen?

    
crockeea 29.09.2016, 14:03
quelle

0 Antworten

Tags und Links