C'è un modo per collegare una funzione Haskell di tipoPlug nuovo metodo FFI in GHC
myFFI :: (C a) => String -> IO a
(dove C
è una certa typeclass descrivere i tipi di variabili che posso importazione) in GHC come uno schema di FFI in modo che posso scrivere nel mio roba programma Haskell come
foreign import myFFI "foo" foo :: T1 -> T2
che viene compilato in una chiamata a foo = unsafePerformIO $ myFFI "foo" :: T1 -> T2
?
Immagino che questo possa essere fatto modificando GHC, ma c'è un modo per farlo tramite un plugin che posso scrivere senza toccare correttamente il codice di codici GHC?
I tipi non sembrano corrispondere. Penso che dovresti '(T1 -> T2)' == 'IO a', e questo non corrisponde al typecheck. – Tener
@Tener, 'unsafePerformIO' eseguirà l'operazione IO (non uniforme, pari), che consentirà all'espressione di essere qualsiasi tipo' a', in questo caso in modo che 'a ~ (T1 -> T2)'. – dflemstr
Ho capito che dovrebbe essere facile ottenere qualcosa di buono usando TH. Così ora ho '[myFFI | Whatever.x :: T1 -> T2 |]' che compila in 'x = unsafePerformIO $ myFFI" Whatever.x ":: T1 -> T2'. C'è un modo per far funzionare questi 'unsafePerformIO all'avvio anziché pigramente? – Cactus