Hago un uso extenso de esto mediante la compilación de librerías compartidas de haskell que se llaman fuera de Haskell.
por lo general las tareas involucradas sería
- crear las declaraciones de exportación extranjeras adecuadas
- crear instancias almacenables para los tipos de datos que necesita para reunir
- crear las estructuras C (o estructuras en el idioma que está usando) para leer esta información
- ya que no quiero inicializar manualmente el RTS haskell, agrego el código de inicialización/terminación a la lib misma. (dllmain en windows __attribute__ ((constructor)) en unix)
- ya que no necesito ninguno de ellos, creo un archivo .def para ocultar todas las funciones de cierre y rts de estar en la tabla de exportación (ventanas)
- use GHC para compilar todo junto
Estas tareas son más bien robóticas y estructuradas, hasta el punto de que podría escribir algo para automatizarlas. De hecho, lo que utilizo para hacer esto es una herramienta que he creado que hace el seguimiento de dependencias de las funciones que marcó para ser exportado, y las resumirá y compilará la lib junto con las declaraciones en C/C++.
(por desgracia, esta herramienta aún no está en hackage, porque hay algo que todavía tengo que fijar y probar mucho más antes de que esté cómodo haciéndolo)
herramienta está disponible aquí http://hackage.haskell.org/package/Hs2lib-0.4.8
http://mldonkey.sourceforge.net/Main_Page – grettke
http://coherentpdf.com/blog/?tag=ocaml – grettke
Caveat (http://www-list.cea.fr/labos/gb/LSL/ caveat/index.html) es una herramienta de verificación para C incrustada crítica escrita principalmente en C++, pero que usa OCaml como lenguaje de scripting (una revista Caml generada durante una sesión interactiva puede compilarse y vincularse con Caveat para ser reproducida en cualquier momento) . –