Para una herramienta que estoy escribiendo (http://hackage.haskell.org/package/explore) Necesito una forma de leer las definiciones de funciones haskell en tiempo de ejecución, aplicarlas a los valores de mi herramienta y recuperar los resultados de su aplicación .Evaluación de declaraciones/expresiones Haskell usando GHC API
¿Alguien me puede dar un ejemplo muy básico usando GHC (6.10.4 o 6.12.1) API?
ejemplo definición de la función que se lee de un archivo en tiempo de ejecución:
f x = 10**(4/1102*x - 1)
espera la salida del programa
--mapM_ print $ map f [428, 410, 389]
3.577165388142748
3.077536885227335
2.5821307011665815
!! ACTUALIZACIÓN !!
He publicado una respuesta rápida pero crea un archivo de objeto en el directorio de ejecución, cualquier consejo para evitar esto y evitar todo el archivo IO es muy bienvenido. También quiero ver una versión que hace todo en la memoria: el usuario proporciona la definición de la función en una GUI, por ejemplo, y la compilación/evaluación no crea ningún archivo objeto.
La API de GHC me dio los primeros ajustes cuando la probé por primera vez en 2006. Estoy realmente interesado en ver qué respuestas obtiene. +1 –
@Norman Ramsey: Acabo de publicar una respuesta adaptada de una publicación de blog de 2008. Sorprendido de ver que 'solo funciona' :) –
Me vienen a la mente dos preguntas: 1) ¿Sería aceptable ejecutar el código interpretado? En ese caso, desea una API en las partes interactivas de ghc, no en el compilador. 2) ¿Necesita ejecutar el código en un entorno restringido? Específicamente, ¿necesita limitar el acceso a cosas como InseguroPerformIO? – MtnViewMark