La page http://www.haskell.org/haskellwiki/G...m_foreign_code donne un petit exemple de comment faire passer une fonction haskell comme callback vers du code C.
Cependant, le FunPtr utilisé comme callback est désalloué à la main...

La technique pour éviter ça pourrait consister à créer un datatype contenant un ForeignPtr et tous les callbacks envoyés vers le C, et d'ajouter au ForeignPtr un FinalizerPtr qui désallouerait automatiquement les callbacks avec freeHaskellFunPtr. Cependant ce n'est pas possible, car les FinalizerPtr n'ont pas accès aux types Haskell (et donc pas aux callbacks).
La fonction Foreign.Concurrent.addForeignPtrFinalizer permet d'ajouter une action IO arbitraire à un ForeignPtr, action qui sera lancée lors du garbage collecting du ForeignPtr, le problème est que cette méthode ne marche que sous GHC.

Y a-t-il une autre méthode qui soit portable (c'est important), et qui permettrait ainsi d'éviter d'avoir à désallouer à la main les FunPtr ?