Tenía la esperanza de incrustar un intérprete de Haskell usando hint
para poder escribir complementos en Haskell para usar con mi programa. No quiero tener que enviar toda la plataforma Haskell para mis ejecutables.
Normalmente, los ejecutables de Haskell son bastante independientes. Por ejemplo, borrar el PATH
no causa un problema:
$ PATH=. Hello
Hello world
Sin embargo, un programa de prueba simple usando runInterpreter
bombas si borro el PATH
:
$ PATH=. TryHint
GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n"
¿Qué bibliotecas o ejecutables deben estar disponibles en el entorno para que funcione?
otool
no da mucha orientación:
otool -L TryHint
TryHint:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0)
El código de prueba para TryHint
no hace mucho:
import Control.Monad
import Language.Haskell.Interpreter
main = do
f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int)
case f of
Left e -> print e
Right r -> mapM_ (print . r) [1..10]
Simplemente se une f
a una función Test.hs
para ser interpretada en tiempo de ejecución. Test.hs
Se ve como esto:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, como los archivos de interfaz para Prelude y todo lo que importa transitivamente, los archivos de biblioteca reales para base y ghc-prim y integer-gmp, y el settings
archivo GHC . (Básicamente, todo lo que se instala bajo /usr/lib/ghc
el directorio equivalente para su instalación).
PATH= ./TryHint
todo funciona sin problemas: imprime algunos números y luego sale. También estoy usando GHC 7.8.3. ¿Cómo estás construyendoTryHint
?