Gibt es eine Möglichkeit, eine Haskell-Funktion vom Typ SteckerStecker neue FFI Verfahren in GHC
myFFI :: (C a) => String -> IO a
(wo C
einige typeclass die Typen von Variablen beschreiben, ich importieren kann) in GHC als FFI-Schema, so dass ich kann wie
foreign import myFFI "foo" foo :: T1 -> T2
, die in einem Aufruf von foo = unsafePerformIO $ myFFI "foo" :: T1 -> T2
kompiliert wird?
Ich kann mir vorstellen, dass dies durch Ändern von GHC geschehen könnte, aber gibt es eine Möglichkeit, dies über ein Plugin zu tun, das ich schreiben kann, ohne die GHC-Codebasis zu berühren?
Die Arten scheint nicht zu entsprechen. Ich denke, du hättest '(T1 -> T2)' == 'IO a', und das tippt nicht nach. – Tener
@Tener, 'unsafePerformIO' führt die IO-Operation durch (unsafe, even), die den Ausdruck von einem beliebigen Typ' a' annehmen lässt, in diesem Fall also 'a ~ (T1 -> T2) '. – dflemstr
Ich habe festgestellt, dass es leicht sein sollte, mit TH etwas Gutes zu bekommen. So, jetzt habe ich '[myFFI | Was.x :: T1 -> T2 |]' das kompiliert in 'x = unsafePerformIO $ myFFI" Was.x ":: T1 -> T2'. Gibt es eine Möglichkeit, diese 'unsafePerformIO's beim Start statt langsam laufen zu lassen? – Cactus