¿Hay una manera de conectar una función Haskell del tipoPlug nuevo método FFI en GHC
myFFI :: (C a) => String -> IO a
(donde C
es alguna clase de tipos que describe los tipos de variables que pueden importar) en GHC como un esquema de FFI para que puedo escribir en mis cosas programa Haskell como
foreign import myFFI "foo" foo :: T1 -> T2
que se compila en una llamada a foo = unsafePerformIO $ myFFI "foo" :: T1 -> T2
?
Imagino que esto se puede hacer modificando GHC, pero ¿hay alguna manera de hacerlo a través de un complemento que pueda escribir sin tocar la base de código de GHC?
Parece que los tipos no coinciden. Creo que tendrías '(T1 -> T2)' == 'IO a', y esto no comprueba el tipo. – Tener
@Tener, 'unsafePerformIO' realizará la operación IO (insegura, par), que permitirá que la expresión sea de cualquier tipo' a', en este caso para que 'a ~ (T1 -> T2)'. – dflemstr
Me he dado cuenta de que debería ser fácil obtener algo lo suficientemente bueno usando TH. Así que ahora tengo '[myFFI | Whatever.x :: T1 -> T2 |]' que se compila en 'x = unsafePerformIO $ myFFI" Whatever.x ":: T1 -> T2'. ¿Hay alguna manera de hacer que estos 'insegurosPerformIO's se ejecuten al inicio en lugar de funcionar de forma perezosa? – Cactus