:type
ist nicht genug, da der Ausdruck, den ich haben möchte, lokal definierte Variablen enthalten kann, wie Dinge, die mit <-
, let
oder where
zugewiesen wurden. Getippte Löcher (die den Ausdruck mit _
ersetzen und mit ghc laden) sind eng, aber sie geben dir, was dort akzeptiert wird, was allgemeiner sein kann als der Ausdruck, über den du neugierig bist.
Ich dachte, ich hätte den Jackpot mit :type-at
gefunden, aber ich kann nicht so arbeiten, wie ich es mir erhofft habe. Mit dieser Datei namens "thing.hs":
Das ist das Ergebnis, wenn ich :type-at
:
Das ist im Grunde das Gleiche wie die Verwendung von :type
. Ich hatte gehofft, dass ich es sogar schaffen könnte, den Bereich für return something
zu übergeben und Monad a => a ()
oder IO ()
zu erhalten. Wäre noch cooler, wenn man wählen könnte zwischen dem Typ des Ausdrucks allein und dem Typ des Ausdrucks "an diesem Punkt" (nachdem er durch den Typ eingeschränkt wurde, der mit einem Typ-Loch erscheinen würde), aber beides wäre in Ordnung / p>
Manchmal kann man einfach ein getipptes Loch vor dem des Ausdrucks verwenden, für den Sie sich interessieren, und das Loch so verwenden, als wäre es eine Funktion. Zum Beispiel
%Vor% Auf diese Weise wird das Loch mit etwas wie WantedType -> OtherType
typisiert, wobei WantedType
der Typ f 3
ist.
Dies ist jedoch nicht ideal, da das Loch eine Fehlfunktion verhindert, um seine Aufgabe zu erfüllen. D. h., Manchmal ist der Typ von f 3
polymorph, und sein Kontext zwingt ihn, instanziiert zu werden. Zum Beispiel macht 4 + length []
4
zu Int
, auch wenn es einen beliebigen Num
-Typ haben kann. Durch die Verwendung von (_ 4) + length []
wird eine Funktion zwischen dem beliebigen Num
-Typ (der standardmäßig auf Integer
gesetzt wird) und dem benötigten Int
eingefügt, wodurch Fehleinschätzungen des Typs Fehlverhalten entstehen.
Stattdessen könnte eine Alternative die Verwendung der Übersetzung sein
%Vor%Dies sollte besser mit der Typ-Inferenz abgespielt werden und den richtigen Typ zurückgeben.
Natürlich sollte es besser sein herauszufinden, wie :type-at
funktioniert. Dennoch ist der Typ-Loch-Trick nicht zu unbequem, wenn Sie bereits einen Editor an der Stelle geöffnet haben.