hier ein Sonderfall der allgemeinen Frage ist ich wirklich fragen: Angenommen, ich in einem leistungskritischen Code-Abschnitt bin, und ich habe einen WertHaskell/GHC: Konstruktor nicht sicher dekonstruieren?
x :: Maybe Int
Ich weiß, es ist ein Just Int
und kein Nothing
erhalten , aber aufgrund Code aus meiner Kontrolle, kann ich nicht arrangieren, um die tatsächliche Int
direkt zu erhalten. Ich möchte
case x of
Just i -> whatever i
tun, aber ich möchte nicht GHC jede Überprüfung oder Fehlerbehandlung oder Sprünge oder irgendetwas einfügen; interpretiere die Bits einfach so, als wären sie in der Form Just i
und lass mich mit den Konsequenzen umgehen.
Ist das möglich? (Ja, ich weiß, das ist etwas, das man nicht regelmäßig tun sollte.)
Vielleicht spielen einige hässliche Tricks mit 'unsafeCoerce' und unter einer großen Annahme, wie GHC präzise implementiert seine Laufzeit können Sie dies erreichen. Aber...Ich bezweifle wirklich, dass diese Kontrolle ein großes Problem ist: Haben Sie Beweise dafür? Wie Knuth es ausdrückt, ist vorzeitige Optimierung die Wurzel allen Übels. Und benutzen Sie nicht 'unsichere * Sachen, es sei denn, Sie können wirklich, wirklich nicht ohne tun. – chi
Nein, ich habe keine Beweise, und ich werde ein Benchmarking durchführen, bevor ich irgendetwas umsetze. –
Haben Sie sich den kompilierten Core angesehen, den Ihr Programm generiert? Je nachdem, warum ein "Maybe" an erster Stelle steht, ist es * möglich *, dass GHC es vielleicht schon für dich entfernt hat ... – MathematicalOrchid