online - Cómo enviar un ejecutable con Language.Haskell.Interpreter?
haskell pdf (1)
Enviar un ejecutable con Language.Haskell.Interpreter
parece ir perfecto con la forma en que lo has mostrado. Debe establecer su PATH
en el script que desea ejecutar.
Y a modo de nota al margen, tal como lo menciona @bennofs en los comentarios, la vinculación estática de la API de GHC no funciona con el nuevo enlazador dinámico introducido en GHC 7.8, (la ejecución de código interactivo ahora requiere bibliotecas dinámicas).
Esperaba insertar un intérprete de Haskell usando una hint
para poder escribir complementos en Haskell para usar con mi programa. No quiero tener que enviar la maldita plataforma Haskell para mis ejecutables. Normalmente, los ejecutables de Haskell son bastante autónomos. Por ejemplo, borrar la PATH
no causa un problema:
$ PATH=. Hello
Hello world
Sin embargo, un programa de prueba simple usando runInterpreter
bombs si runInterpreter
la 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 une f
a una función en Test.hs
para ser interpretada en tiempo de ejecución. Test.hs
ve así:
module Test where
f :: Int -> Int
f x = x + 1